← 戻る

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

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

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


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

このトピックは参考になりましたか?

トピックを共有

コメント (7)

ログイン または アカウントを作成, コメントを残すにはログインまたは新規登録してください

freelancer
freelancer

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

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

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

Alexander
Alexander

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

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

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

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

QuikTrader.CancelOrderInstantly

в true

rtDen
rtDen 著者

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

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

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

vader
vader

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

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

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

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

rtDen
rtDen 著者

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

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

vader
vader

rtDen:

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

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