Снять активную заявку

Страницы: 1
RSS
Снять активную заявку, Выставляется заявка и через 5 сек снимается
 
Пытаюсь научить робота снимать заявку. В качестве урока поставил себе задачу. Робот должен выставить рыночную заявку на покупку и через 5 сек снять ее. Пробовал в ORDER_KEY ставить TRANS_ID , не помогло. Зачем тогда вообще нужен TRANS_ID не понятно. Пробовал вручную вбить номер заявки из квика в код, тогда снимается. Значит робот должен получить этот номер, у меня не получается, подскажите как правильно?
Код
function main()

--Покупка лимитка
--[
A = {ACTION='NEW_ORDER',
      ACCOUNT='SPBFUT009BD',
      OPERATION='B',
      CLASSCODE='SPBFUT',
      SECCODE='BRX0',
      PRICE=tostring(42.1),
      QUANTITY=tostring(1),
      TRANS_ID=tostring(1002),
      TYPE='L'
         }
         
 Err_A = sendTransaction(A)

--]

--Снять заявку Покупка лимитка
function OnTransReply(trans_reply)
   orderNum = trans_reply.order_num
   message('Nomer zayavki'..tostring(trans_reply.order_num));-- NUMBER 
 
--[


end

[sleep(5000)


A = {ACTION='KILL_ORDER',
      ACCOUNT='SPBFUT009BD',
      CLASSCODE='SPBFUT',
      SECCODE='BRX0',
      TRANS_ID=tostring(1003),
      ORDER_KEY=tostring(trans_reply.order_num)
         }
         
Err_A = sendTransaction(A)

end
 
Код улучшил, но все равно заявка через 5 сек не снимается.
Код
stopped = false
function OnStop()
stopped = true
return 5000
end

function main()
Pokup()
orderNum=OnTransReply(order_num)
message('Nomer zayavki'..orderNum)
sleep(5000)
SnZ()
end
function Pokup()
--Покупка лимитка

A = {ACTION='NEW_ORDER',
      ACCOUNT='SPBFUT009BD',
      OPERATION='B',
      CLASSCODE='SPBFUT',
      SECCODE='BRX0',
      PRICE=tostring(42.1),
      QUANTITY=tostring(1),
      TRANS_ID=tostring(1002),
      TYPE='L'
         }
         
 local Err_A = sendTransaction(A)
end


function SnZ()
orderNum=OnTransReply(order_num)
Sn = {ACTION='KILL_ORDER',
      ACCOUNT='SPBFUT009BD',
      CLASSCODE='SPBFUT',
      SECCODE='BRX0',
      TRANS_ID=tostring(1003),
      ORDER_KEY=orderNum
         }
         
Err_Sn = sendTransaction(Sn)
end

 
Евгений, добрый день!

Дело в том, что такая конструкция не работает и не должна:
Код
orderNum=OnTransReply(order_num)
Поскольку OnTransReply является функцией обратного вызова, правильное ее использование будет выглядеть примерно вот так:
Код
function OnTransReply(reply)
   orderNum = reply.order_num
end

Один из вариантов решения вашей задачи - создать глобальную переменную orderNum, присвоить ей значение в OnTransReply и, после этого, снять заявку с ее помощью.
Рабочий пример:
Код
stopped = false
function OnStop()
stopped = true
return 5000
end

function main()
Pokup()
sleep(5000)
SnZ()
end

function Pokup()
--Покупка лимитка

A = {ACTION='NEW_ORDER',
      ACCOUNT='NL0011100043',
      OPERATION='B',
      CLASSCODE='QJSIM',
      SECCODE='MAIL',
      PRICE='2230,6',
      QUANTITY='1',
      TRANS_ID='1002',
      TYPE='L'
         }
         
 local Err_A = sendTransaction(A)
end


function SnZ()
Sn = {ACTION='KILL_ORDER',
      ACCOUNT='NL0011100043',
      CLASSCODE='QJSIM',
      SECCODE='MAIL',
      TRANS_ID='989',
      ORDER_KEY=tostring(orderNum)
         }
         
Err_Sn = sendTransaction(Sn)
end

function OnTransReply(reply)
   orderNum = reply.order_num
end

Касательно TRANS_ID - это пользовательский идентификатор транзакции (именно транзакции, не заявки/сделки), который используется только внутри терминала. Торговая система о нем ничего не знает.
 
Roman Azarov,благодарю за подробный ответ. Кажется теперь я понял чем отличается обычная функция от функции обратного вызова. Обычную функцию можно самому вызвать, а функция обратного вызова срабатывает сама, независимо от пользователя, если произошло определенное событие в квике.
 
Можно спросить тут же, чтобы не плодить темы.
Я отправил KILL_ORDER, указав в поле ORDER_KEY код отменяемой заявки и у меня срабатывает OnTransReply(trans_reply).
При этом исходная заявка либо успешно отменилась, тогда 'trans_reply.status == 3' либо ошибка и статус ==5, например если она уже была исполнена. Пока всё нормально.

Вопрос такой - есть ли в trans_reply код исходной отменяемой заявки - например я отправил несколько KILL_ORDER и хочу понять, что стало с исходными заявками. Или же надо использовать внешние переменные?
 
Artem, добрый день!
Цитата
есть ли в trans_reply код исходной отменяемой заявки
Да, есть - "order_num".
trans_reply - таблица с описанием транзакции. С полным списком ее параметров вы можете ознакомиться в руководстве пользователя "Интерпретатор языка Lua", доступном по этой ссылке.
 
Цитата
Цитата
есть ли в trans_reply код исходной отменяемой заявки
Да, есть - "order_num".
trans_reply.order_num = 0 в отменяемой заявке
Надо делать так, как надо. А как не надо - делать не надо.
 
Здравствуйте!

Цитата
Старатель написал:
trans_reply.order_num = 0 в отменяемой заявке
Действительно, немного поторопились со своим ответом.

При снятии заявки, в информации о транзакции, полученной в OnTransReply, ее номер не приходит.

Так что в случае:
Цитата
Artem написал:
например я отправил несколько KILL_ORDER и хочу понять, что стало с исходными заявками.
Необходимо пользоваться переменными чтобы запомнить номер заявки.
Страницы: 1
Читают тему
Наверх