Ставлю один стоп ордер в квике и нажимаю на кнопку снятия стопа.
Код обработчика кнопки:
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
Comments (7)
Login or Create account, Log in or register to leave a comment
Снятие всех стоп-заявок
А при чем здесь это? В некоторых случаях мне нужно снимать конкретные ордера, а не все.
Так и должно быть. При вызове Cancel для заявки с балансом (не объёмом!) <= 1 мы уверены, что больше не придёт обновлений по DDE и её баланс не изменится.
Иначе - может быть такая ситуация - меняется Order.Balance после получения OrderState.Done.
Если вам это не критично - поставьте свойство
в true
Спасибо за ответ, помогло.
Да вроде не критично, хотя из прочитанного топика не совсем понял, где у меня это может всплыть )
Т.е. если QuikTrader.CancelOrderInstantly == true, то после получения заявки статуса Done ,у неё может поменятся баланс?