S# 4.1.17 Quik 6.7.3.2 Настройки трейдера:
// включаем асинхронный режим (не ждем Order.Id от биржи)
this.Trader.IsAsyncMode = true;
// включаем поддержку режима ручных заявок
this.Trader.SupportManualOrders = true;
Выставляю руками заявку в стакан (заведомо неисполнимую, остается висеть в стакане). Корректно прилетает NewOrders. У ордера State: Active
Снимаю руками заявку. Опять прилетает NewOrders. У ордера State: Done; Cancelled: True Событие OrdersChangedне приходит...
Если ордер исполняется частично тоже прилетает NewOrders с Partially: True и правильным балансом
В случает когда ордер исполняется опять прилетает NewOrders с Matched: True Balance: 0 State: Done
P.S. для стоп-ордеров, выставленных руками в квике, все работает правильно...
Comments (2)
Login or Create account, Log in or register to leave a comment
Нашел где надо пофиксить багу. BaseTrader, метод protected Order GetOrder(Security security, long id, Func<long, Order> createOrder, Func<Order, bool> changeOrder)
Всегда присваивается isNew = true:
Далее идет проверка, которая ВСЕГДА будет кидать NewOrder:
Для фикса видимо нужно сначала поискать ордер в кэше, и только если его нет создавать...
Уважаемые разработчики!
Пофиксите, пожалуйста, багу! Ведь даже transactionId каждый раз новый получается и workaround не написать...
Фикс - это один if: