Приветствую всех! В очередной раз подниму проблему с нулевым transactionId. В торгующем роботе появились баги, которых раньше не наблюдалось. Стал разбираться, добавил отладочной информации в логи, выяснил, что баг пояляется из-за того, что в trader.NewMyTrades в trade.Order не заполнен ExtensionInfo (появляется далеко не во всех сделках). Заявки подавались только через S# (не руками). Перед вызовом trader.RegisterOrder() заполняется order.ExtensionInfo с нужной информацией. Лог из события trader.NewMyTrades: 12:31:58:978M NewMyTrade по ордеру id: 9733300629 transId: 0 и соответственно trade.Order.ExtensionInfo - оказывается незаполнен и из-за этого сделка неправильно обрабатывается.
При этом TransactionId в квиковской таблице заполнен (см. скриншот). Воспроизвести баг на демо счете БКС не удалось, на реальном счете сегодня воспроизвелся несколько раз.
Предивижу ответ с советом перейти на 4.1, но очень не хочется менять библиотеку в работающем роботе, без уверенности, что баг пропадет. Хотелось бы узнать, это баг квика либо S#?
S#: 4.0.23 isAsyncMode = false; isSupportManualOrders = true; Брокер: БКС, счет склеенный.
Comments (11)
Login or Create account, Log in or register to leave a comment
4.0.19. Ничего в ExtensionInfo не заполнял. После введения Спектры каждая вторая заявка с таким эффектом - в результате MyTrades не приходят в стратегию, поскольку S# не знает кто их отправил. Перешёл на 4.1.7 - глюков не замечено. З.Ы. Перейти оказалось на удивление просто.
Это глюк квика, о чём я им на форуме писал неоднократно и скидывал тут ссылки. Ставьте isSupportManualOrders = false, должно работать и на 4.0.23
Спасибо отписавшимся. Хотел сегодня попробовать поменять isSupportManualOrders на false, но времени совсем не было, постараюсь попробовать завтра, о результатах сообщю.
Вчера вечером тестировал робота, результаты: SupportManualOrders = true: 9 из 10 сделок пришли с нулевым trade.Order.TransactionId SupportManualOrders = false: 0 из 10 сделок было с нулевым TransactionId
Можно объяснить, почему так происходит и как SupportManualOrders работает внутри библиотеки? У всех ордеров TransactionId в квике был ненулевой.
SupportManualOrders фильтрует ордера с 0 TransactionID Почему так происходит - спросите у Арки, создателей Квика.
Я честно говоря замучался выяснять почему у них апдейты могут приходить раза 4 по ордерам, 3 из которых будут с пустым TransactionId, а в 4м, наконец, он проставится.
Я не понимаю, почему при SupportManualOrders = true сделки приходят с нулевым TransactionId, а с SupportManualOrders = false с ненулевым. Ведь если бы они были всегда с нулевым TransactionId, они бы вообще не попали в NewMyTrades (при SupportManualOrders = false). Хочется понять, почему так происходит.
Ещё раз. Потому что SupportManualOrders = false не проставляет апдейты пока пришедший TransactionId не будет ненулевой.
Почему идут апдейты по ордерам следующим образом: 1ый апдейт - TransactionId = 0 2ой апдейт - TransactionId = 0 3ий апдейт - TransactionId = 0 4ый апдейт - TransactionId = xxxxxxxx
спросите у Арки на их форуме. Это проблема исключительно Квика.
В случае выше при SupportManualOrders = true мы уже по первому апдейту пришлём ордер, т.к. ничего не знаем о следующих апдейтах которые могут придти. При = false - только по последнему.
Т.е. данные о сделке приходят в S# из квика несколько раз, и при SupportManualOrders = true - S# обрабатывает первое поступление (а последующие нет), а при SupportManualOrders = False - первое поступление с ненулевым TransactionId? Вот именно этот механизм мне и был инетресен. Спасибо за ответ.
Выяснил для себя новые аспекты темы =( При SupportManualOrders = false, сделки, произошедшие от стоп-заявок вообще не попадают в S#. При SupportManualOrders = true сделки приходят с нулевым transactionId (в квике transactionId проставлен).
Для себя пока вижу решение: выставить SupportManualOrders = true, вместо ExtensionInfo у ордера хранить доп. инфу в другой структуре и соотносить ордер и инфу по нему по комментарию ордера. Возможно, кто-нибудь предложит более красивое решение?
Использую 4.1.7, при SupportManualOrders = false никаких проблем нет. Стопы использую ежедневно.
Перекомпилировал робота с библиотекой 4.1.6 Упомянутый выше баг пропал.