Изменение стоп-заявки

Страницы: 1
RSS
Изменение стоп-заявки
 
Чтобы изменить параметры действующей стоп-заявки я удаляю действующую и выставляю новую.
Но иногда происходит так, что во время удаления эта стоп-заявка успевает сработать - и в этом случае новая уже не требуется, но в алгоритме это не прописано и все-равно выставляется новая-стоп заявка.
Как можно это исправить? Спасибо
 
После удаления стоп-заявки смотреть на результат. Если заявка успешно снялась, значит она не сработала и нужно выставлять заново. Если неуспешно - значит долго думали, сработала.
www.bot4sale.ru

Пасхалочка для Алексея Иванникова: https://forum.quik.ru/messages/forum10/message63088/topic7052/#message63088
 
Цитата
Айдар написал:
Чтобы изменить параметры действующей стоп-заявки я удаляю действующую и выставляю новую.
Но иногда происходит так, что во время удаления эта стоп-заявка успевает сработать - и в этом случае новая уже не требуется, но в алгоритме это не прописано и все-равно выставляется новая-стоп заявка.
Как можно это исправить? Спасибо
При отправке стоп-заявки переменная Param_sdelki["PRICE_CLOSE_STOP"] = 0. Затем в OnTrade если стоп-заявка срабатывает то ей присваивается цена:
function OnTrade(TABLE_trade)
    --номер стоп-заявке тоже присваивается с этим проблем нет
    if TABLE_trade.trans_id==Param_sdelki["NUM_USER_STOP"] then
         if bit_set(TABLE_trade.flags, 0)==false and bit_set(TABLE_trade.flags, 1) == false then
              --стоп заявка исполнилась
              Param_sdelki["PRICE_CLOSE_STOP"]=TABLE_trade.price --итоговая цена закрытия стоп заявки
         end
    end

И даже проверка переменной (if Param_sdelki["PRICE_CLOSE_STOP"]=0) не всегда помогает.  
 
Любое клиент-серверное взаимодействие в той или иной мере будет транзакционным. Условно: отправили запрос - ждете ответ - проверка. Только потом следующее действие.
При этом таких "транзакций" может быть много параллельно. Например, отправили 100 транзакций, далее ждете по ним ответы. Кто-то ответит первым, кто-то последним.

Поэтому и алгоритм должен быть построен так, чтобы поддерживать такой механизм. Например, создаете сущность "Задача". В вашем случае она будет состоять из двух этапов: снять ордер, поставить ордер.
Далее просто выполняете задачу, поэтапно. Если на каком-то этапе ошибка - кидаете исключение и алгоритм принимает решение о том, что делать в этом случае.
 
попробую еще это добавить в условие
 
А почему номер транзакции связанного лимитного ордера сравнивается с номером стоп-ордера?

TABLE_trade.trans_id==Param_sdelki["NUM_USER_STOP"]
 
Цитата
Nikolay написал:
А почему номер транзакции связанного лимитного ордера сравнивается с номером стоп-ордера?

TABLE_trade.trans_id==Param_sdelki["NUM_USER_STOP"]
номер транзакции я сравнивал с пользовательским номером стоп заявки, значит это неправильно?
 
Цитата
Айдар написал:
Чтобы изменить параметры действующей стоп-заявки я удаляю действующую и выставляю новую.
Но иногда происходит так, что во время удаления эта стоп-заявка успевает сработать - и в этом случае новая уже не требуется, но в алгоритме это не прописано и все-равно выставляется новая-стоп заявка.
Как можно это исправить? Спасибо
используйте колбек стоп-заявки
любое изменение будет приходить в колбек.
Надо обрабатывать все события в колбеке.
 
Цитата
Айдар написал:
номер транзакции я сравнивал с пользовательским номером стоп заявки, значит это неправильно?
Нет. Номер стоп-ордера - это его номер. После его активации устанавливается лимитный ордер, номер которого будет записан в таблице стоп-ордеров, в поле linkedorder.
Соответственно сделки будут приходить по ордеру с этим номером.

В идеальном мире:
При активации стоп-ордера придет колбек OnStopOrder. Для своего стоп-ордера увидите заполненное поле linkedorder.
При совершении сделок по этому ордеру придут колбеки OnTrade, где в поле order_num будет тот же номер, что и в linkedorder.

В реальном мире, в теории, колбек OnStopOrder с заполненным linkedorder может прийти после колбека OnTrade. Правда, с учетом того что OnTrade приходит не один раз, то синхронизация возможна.

В любом случае схема такая
стоп ордер - linkedorder - ордер с этим номером - сделки по этому ордеру.

Правда при работе с стоп ордерами всегда важно помнить, что стоп ордера - это просто триггер. Он всего лишь отправляет транзакцию при активации. А исполнится ли лимитный ордер или останется висеть неисполненным, или он будет отвергнут ядром биржи - это уже "проблема индейцев". Т.е. это Вы должны контролировать что случилось после активации стоп-ордера. Иначе позиция может так и остаться не закрытой.
 
В колбеке OnStopOrder зацепился за параметр "filled_qty" (исполненное количество). И по нему ставлю условия - если >0 (неважно весь объем исполнился или нет) - то заявку удалять уже поздно. Пока проверяю
Страницы: 1
Читают тему (гостей: 1)
Наверх