← Zurück

В очередной раз про нулевой transactionId

Приветствую всех! В очередной раз подниму проблему с нулевым 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; Брокер: БКС, счет склеенный.

War dieses Thema hilfreich?

Thema teilen

Kommentare (11)

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

Garic
Garic

4.0.19. Ничего в ExtensionInfo не заполнял. После введения Спектры каждая вторая заявка с таким эффектом - в результате MyTrades не приходят в стратегию, поскольку S# не знает кто их отправил. Перешёл на 4.1.7 - глюков не замечено. З.Ы. Перейти оказалось на удивление просто.

Alexander
Alexander

Это глюк квика, о чём я им на форуме писал неоднократно и скидывал тут ссылки. Ставьте isSupportManualOrders = false, должно работать и на 4.0.23

rtDen
rtDen Autor

Спасибо отписавшимся. Хотел сегодня попробовать поменять isSupportManualOrders на false, но времени совсем не было, постараюсь попробовать завтра, о результатах сообщю.

rtDen
rtDen Autor

Вчера вечером тестировал робота, результаты: SupportManualOrders = true: 9 из 10 сделок пришли с нулевым trade.Order.TransactionId SupportManualOrders = false: 0 из 10 сделок было с нулевым TransactionId

Можно объяснить, почему так происходит и как SupportManualOrders работает внутри библиотеки? У всех ордеров TransactionId в квике был ненулевой.

Alexander
Alexander

SupportManualOrders фильтрует ордера с 0 TransactionID Почему так происходит - спросите у Арки, создателей Квика.

Я честно говоря замучался выяснять почему у них апдейты могут приходить раза 4 по ордерам, 3 из которых будут с пустым TransactionId, а в 4м, наконец, он проставится.

rtDen
rtDen Autor

Я не понимаю, почему при SupportManualOrders = true сделки приходят с нулевым TransactionId, а с SupportManualOrders = false с ненулевым. Ведь если бы они были всегда с нулевым TransactionId, они бы вообще не попали в NewMyTrades (при SupportManualOrders = false). Хочется понять, почему так происходит.

Alexander
Alexander

Ещё раз. Потому что SupportManualOrders = false не проставляет апдейты пока пришедший TransactionId не будет ненулевой.

Почему идут апдейты по ордерам следующим образом: 1ый апдейт - TransactionId = 0 2ой апдейт - TransactionId = 0 3ий апдейт - TransactionId = 0 4ый апдейт - TransactionId = xxxxxxxx

спросите у Арки на их форуме. Это проблема исключительно Квика.

В случае выше при SupportManualOrders = true мы уже по первому апдейту пришлём ордер, т.к. ничего не знаем о следующих апдейтах которые могут придти. При = false - только по последнему.

rtDen NattyD
rtDen
rtDen Autor

Т.е. данные о сделке приходят в S# из квика несколько раз, и при SupportManualOrders = true - S# обрабатывает первое поступление (а последующие нет), а при SupportManualOrders = False - первое поступление с ненулевым TransactionId? Вот именно этот механизм мне и был инетресен. Спасибо за ответ.

rtDen
rtDen Autor

Выяснил для себя новые аспекты темы =( При SupportManualOrders = false, сделки, произошедшие от стоп-заявок вообще не попадают в S#. При SupportManualOrders = true сделки приходят с нулевым transactionId (в квике transactionId проставлен).

Для себя пока вижу решение: выставить SupportManualOrders = true, вместо ExtensionInfo у ордера хранить доп. инфу в другой структуре и соотносить ордер и инфу по нему по комментарию ордера. Возможно, кто-нибудь предложит более красивое решение?

Alexander
Alexander

Использую 4.1.7, при SupportManualOrders = false никаких проблем нет. Стопы использую ежедневно.

rtDen
rtDen Autor

Перекомпилировал робота с библиотекой 4.1.6 Упомянутый выше баг пропал.