В очередной раз про нулевой transactionId
Atom Ответить
15.01.2013


Приветствую всех!
В очередной раз подниму проблему с нулевым 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,6KB (0)

Теги:


Спасибо:



Скидка 15% на все обучение до 5 апреля (осталось 2 дней).

11 Ответов
Garic

Фотография
Дата: 15.01.2013
Ответить


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

Alexander

Фотография
Дата: 15.01.2013
Ответить


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

rtDen

Фотография
Курсы Программист
Дата: 16.01.2013
Ответить


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

rtDen

Фотография
Курсы Программист
Дата: 17.01.2013
Ответить


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

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

Alexander

Фотография
Дата: 17.01.2013
Ответить


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

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

rtDen

Фотография
Курсы Программист
Дата: 17.01.2013
Ответить


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

Alexander

Фотография
Дата: 17.01.2013
Ответить


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

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


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


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

rtDen

Фотография
Курсы Программист
Дата: 17.01.2013
Ответить


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

rtDen

Фотография
Курсы Программист
Дата: 23.01.2013
Ответить


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

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

Alexander

Фотография
Дата: 23.01.2013
Ответить


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

rtDen

Фотография
Курсы Программист
Дата: 29.01.2013
Ответить


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


Добавить файлы через драг-н-дроп, , или вставить из буфера обмена.

loading
clippy