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

В очередной раз про нулевой transactionId
Atom
1/15/2013
rtDen


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

transId.png 36 KB (506)

Tags:


Thanks:


1 2  >
Garic

Avatar
Date: 1/15/2013
Reply


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

Thanks:

Alexander

Avatar
Date: 1/15/2013
Reply


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

Thanks:

rtDen

Avatar
Date: 1/16/2013
Reply


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

Thanks:

rtDen

Avatar
Date: 1/17/2013
Reply


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

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

Thanks:

Alexander

Avatar
Date: 1/17/2013
Reply


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

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

Thanks:

rtDen

Avatar
Date: 1/17/2013
Reply


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

Thanks:

Alexander

Avatar
Date: 1/17/2013
Reply


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

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

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

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

Thanks: rtDen NattyD

rtDen

Avatar
Date: 1/17/2013
Reply


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

Thanks:

rtDen

Avatar
Date: 1/23/2013
Reply


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

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

Thanks:

Alexander

Avatar
Date: 1/23/2013
Reply


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

Thanks:
1 2  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy