move_orders

Страницы: 1
RSS
move_orders, Send Transaction - замена заявки
 
Добрый день

Не понятен механизм замены заявки на другую. Что именно не понятно:
1. почему там сразу для двух заявок цена, количество и номер? Их вообще две или больше? =)
2. нужен ли TRANS_ID или вместо него и используется один/два first/second_ORDER_NUMBER?
3. откуда брать номер заявок - из OnOrder(order_num) или OnTransReply (trans_id)?
4. что будет происходить, если одна из заявок уже исполнена?
5. вместо ответов можно одну ссылочку дать на исчерпывающее руководство... я такого пока просто не нашел, гуглю примеры, коих считанные штуки

Спасибо!
 
Добрый день.

1. Две заявки. Более подробно в руководстве пользователя Quik Раздел 5. Торговые операции клиента/Перестановка заявок
2. Trans_Id нужен всегда. Это уникальный идентификационный номер заявки. Если в скрипте будет несколько транзакций на отправку в Quik, то у каждой транзакции должен быть свой Trans_id, отличный от предыдущего.
3. Из OnOrder
4. То перестановку осуществить не сможете.
5. Пример такой заявки ниже.
Код
ACTION=MOVE_ORDERS; TRANS_ID=333; CLASSCODE=SPBFUT; SECCODE=EBM6; 
FIRM_ID=SPBFUT389; MODE=1; FIRST_ORDER_NUMBER=21445064; 
FIRST_ORDER_NEW_PRICE=10004; FIRST_ORDER_NEW_QUANTITY=4; 
SECOND_ORDER_NUMBER=21445065; SECOND_ORDER_NEW_PRICE=10004; 
SECOND_ORDER_NEW_QUANTITY=4; 
 
Большое спасибо, Егор!
 
Здравствуйте! Сюда же еще несколько вопросов:
1) "FIRST_ORDER_NUMBER" мы взяли order.order_num , а "SECOND_ORDER_NUMBER" - можно подставить тот же номер и тогда при новом обращении order.order_num мы получим тот же номер. Это я правильно понимаю?
2) если 1-я лимит. заявка была выставлена на 2 лота, в OnOrder(order) программа увидела, что прошла сделка на один лот - я могу переставить на другую цену только оставшийся лот, указав "FIRST_ORDER_NEW_QUANTITY" = "2", а "SECOND_ORDER_NEW_QUANTITY" = "1" ?
3) что произойдет (что выдаст res=sendTransaction(transaction), если я, не проверяя исполнился ли второй лот, буду вызывать эту функцию (пытаться делать перестановку множество раз, меняя цену - для гарантированного получения второго лота)? в программе пытаюсь сделать так:

NotBuy_OPT = true
function OnOrder(order)
  -- Если исполнилась заявка полностью
  if order.trans_id == trans_id_OPT and order.balance == 0 then
     -- Меняет значение флага
     NotBuy_OPT = false
end

function perestavit_order_OPT()
     local transaction = {
["ACTION"]= "MOVE_ORDERS", -- изменить количество в заявках на новые
["TRANS_ID"]= tostring(trans_id_OPT),
["CLASSCODE"]=tostring(classcode),
["SECCODE"]=tostring(seccode),
["FIRM_ID"]="UNIKA",
["MODE"]="1",
["FIRST_ORDER_NUMBER"]=tostring(OrderNum_OPT_),
["FIRST_ORDER_NEW_PRICE"]=tostring(price_put),
["FIRST_ORDER_NEW_QUANTITY"]=tostring(vol_kratno),
["SECOND_ORDER_NUMBER"]= ?
["SECOND_ORDER_NEW_PRICE"]=tostring(price_put+10),
["SECOND_ORDER_NEW_QUANTITY"]="1"
}
local res=sendTransaction(transaction)
sleep (50)
if NotBuy_OPT then
price_put = price_put + 10
local res=sendTransaction(transaction)
end; sleep (50);
if NotBuy_OPT then
price_put = price_put + 10
local res=sendTransaction(transaction)
end; sleep (50);
if NotBuy_OPT then
price_put = price_put + 10
local res=sendTransaction(transaction)
end; sleep (50);
if NotBuy_OPT then
price_put = price_put + 10
local res=sendTransaction(transaction)
end; sleep (50);
local res=sendTransaction(transaction)
if res~="" then
return nil, "send_LimitFUT():"..res
else
return trans_id
end
end
4) Хотя в программе и идет проверка на полное исполнение заявки (and order.balance == 0), но суть в быстром получении второго лота после первого и не использование маркет ордера
5) если думаю неправильно, пожалуйста подскажите (может пример)
6) возможно ли не использовать в примере sleep (50)?
Страницы: 1
Читают тему
Наверх