← Zurück

Синхронность снятия ордеров

Ставлю один стоп ордер в квике и нажимаю на кнопку снятия стопа.

Код обработчика кнопки:


trader.IsAsyncMode = false;
OrderStates stateBefore;
OrderStates stateAfter;
Order cancelOrder = new Order();
foreach (Order order in trader.StopOrders)
{
   if (order.State == OrderStates.Active)
   {
       cancelOrder = order;
   }
}
stateBefore = cancelOrder.State;
trader.CancelOrder(cancelOrder);
stateAfter = cancelOrder.State;
AddLog("do: " + stateBefore.ToString() + " posle: " + stateAfter.ToString(), true);

Имею вот такие результаты в логе, если стоп ордер стоит на 1 контракт, то почти всегда (или вообще всегда?) 16:50:38 do: Active posle: Done А если стоп стоит на 2 контракта и больше, то преобладает такое: 16:51:09 do: Active posle: Active

Это глюк или так и должно быть?

S#: 4.0.23 Брокер: Открытие, демо счет Инструмент: SiM2

War dieses Thema hilfreich?

Thema teilen

Kommentare (7)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

freelancer
freelancer

Снятие всех стоп-заявок

Trader.CancelOrders((bool?)true, Portfolio, null, null, Security);
rtDen
rtDen Autor

А при чем здесь это? В некоторых случаях мне нужно снимать конкретные ордера, а не все.

Alexander
Alexander

rtDen: Это глюк или так и должно быть?

Так и должно быть. При вызове Cancel для заявки с балансом (не объёмом!) <= 1 мы уверены, что больше не придёт обновлений по DDE и её баланс не изменится.

Иначе - может быть такая ситуация - меняется Order.Balance после получения OrderState.Done.

Если вам это не критично - поставьте свойство

QuikTrader.CancelOrderInstantly

в true

rtDen
rtDen Autor

Спасибо за ответ, помогло.

Alexander Mukhanchikov: Если вам это не критично

Да вроде не критично, хотя из прочитанного топика не совсем понял, где у меня это может всплыть )

vader
vader

rtDen: Спасибо за ответ, помогло.

Alexander Mukhanchikov: Если вам это не критично

Да вроде не критично, хотя из прочитанного топика не совсем понял, где у меня это может всплыть ) Извините, не очень понял, что именно не критично? То что баланс заявки может измениться после получения состояния Done?

Т.е. если QuikTrader.CancelOrderInstantly == true, то после получения заявки статуса Done ,у неё может поменятся баланс?

rtDen
rtDen Autor

vader: Извините, не очень понял, что именно не критично? То что баланс заявки может измениться после получения состояния Done? Вроде так.

vader: Т.е. если QuikTrader.CancelOrderInпочему онstantly == true, то после получения заявки статуса Done ,у неё может поменятся баланс? Наверное так, но я не понимаю, почему он должен меняться на что-то кроме нуля, если я снимаю заявку.

vader
vader

rtDen:

vader: Извините, не очень понял, что именно не критично? То что баланс заявки может измениться после получения состояния Done? Вроде так.

vader: Т.е. если QuikTrader.CancelOrderInпочему онstantly == true, то после получения заявки статуса Done ,у неё может поменятся баланс? Наверное так, но я не понимаю, почему он должен меняться на что-то кроме нуля, если я снимаю заявку. В тот момент, пока вы отменяете заявку, она может быть частичнго исполнена, и тогда баланс поменяется допустим с 8 до 5.