Сегодня возникла такая ситуация и дальше 0 сохранялся в OrdersChanged какое-то время: 16:31:01.1570028 OrdersChanged: TransactionId=0 Direction=Sell Time=14.11.2011 16:31:00 Price=151235 State=Done Status= Balance=0 Comm=FIVDMD0Y Portfolio=SPBFUT00XXX Id=5851294706 Type=Limit 16:31:01.4489763 OrdersChanged: TransactionId=0 Direction=Sell Time=14.11.2011 16:31:00 Price=151235 State=Done Status= Balance=0 Comm=FIVDMD0Y Portfolio=SPBFUT00XXX Id=5851294706 Type=Limit 16:31:01.5310023 OrdersChanged: TransactionId=56779959 Direction=Sell Time=14.11.2011 16:31:00 Price=151235 State=Done Status=Accepted Balance=0 Comm=FIVDMD0Y Portfolio=SPBFUT00XXX Id=5851294706 Type=Limit
Вроде бы TransactionId должен устанавливаться сразу в RegisterOrder и в NewOrders он уже должен быть инициализирован или я что-то не так понимаю? Спасибо!
Комментарии (51)
Вход или Создать аккаунт, Войдите или зарегистрируйтесь, чтобы оставить комментарий
Заявка отправляется синхронно или асинхронно?
Приведите участок кода с созданием и отправкой заявки.
Опущены try\catch и т.п. Все работало в течение месяцев без изменений в коде, касающихся регистрации заявок.
Ерунда какая-то. Быть не может такого =)
Trader - это QuikTrader? Что выдают события OrdersFailed, ProcessDataError?
так вроде там многое что другое и как раз может быть из-за этого. посмотрите на transactionid после вызова register order verifier молчит на проверках?
Да, verifier говорит, что все нормально. А transactionid разве не генерируется в RegisterOrder? Вроде бы раньше было что-то вроде InitOrder, который создавал уже инициализированную заявку.
Сейчас также. Но если у вас в терминале в этом столбце 0 - при обновлении тоже запишется 0. Да, приведите скриншот терминала с заявками.
а кода клиента нету? В общем, ждём TransactionId после вызова RegisterOrder :)
Как и ожидалось TransactionId есть сразу и что это было - непонятно. Только если в квике почему-то значение не изменилось и оставалось 0 (или изменилось на 0)? Еще есть отличие в значении Status, здесь оно сразу Accepted, а там было не определено какое-то время.
16:04:01.2493341 RegisterOrder Order: TransactionId=57039553 Direction=Buy Time=01.01.0001 0:00:00 Price=148865 Volume=2 State=Active Status=Accepted Balance=2 Comm=S#PJ23GVK2 Portfolio=SPBFUT00XXX Id=5868886383 Type=Limit 16:04:01.2493341 NewOrders Order: TransactionId=57039553 Direction=Buy Time=01.01.0001 0:00:00 Price=148865 Volume=2 State=Active Status=Accepted Balance=2 Comm=S#PJ23GVK2 Portfolio=SPBFUT00XXX Id=5868886383 Type=Limit 16:04:01.4192451 OrdersChanged Order: TransactionId=57039553 Direction=Buy Time=15.11.2011 16:04:01 Price=148865 Volume=2 State=Done Status=Accepted Balance=0 Comm=S#PJ23GVK2 Portfolio=SPBFUT00XXX Id=5868886383 Type=Limit 16:04:01.4202216 NewMyTrades Order: TransactionId=57039553 Direction=Buy Time=15.11.2011 16:04:01 Price=148865 Volume=2 State=Done Status=Accepted Balance=0 Comm=S#PJ23GVK2 Portfolio=SPBFUT00XXX Id=5868886383 Type=Limit Trade: Time=15.11.2011 16:04:01 Direction=Buy Price=148850 Volume=2 Id=450515242 16:04:01.4211981 OrdersChanged Order: TransactionId=57039553 Direction=Buy Time=15.11.2011 16:04:01 Price=148865 Volume=2 State=Done Status=Accepted Balance=0 Comm=S#PJ23GVK2 Portfolio=SPBFUT00XXX Id=5868886383 Type=Limit 16:04:01.4319396 OrdersChanged Order: TransactionId=57039553 Direction=Buy Time=15.11.2011 16:04:01 Price=148865 Volume=2 State=Done Status=Accepted Balance=0 Comm=S#PJ23GVK2 Portfolio=SPBFUT00XXX Id=5868886383 Type=Limit
Что изменилось по сравнению с самым первым логом? Тут всё нормально идёт. Проблема ушла?
Воспроизведётся ещё раз - пишите. И посмотрите при этом чему равно Id транзакции в квике.
эта проблема существует очень давно. вот сейчас отловил заявку <mark>16:06:33.461 [_trader_NewOrders] TransactionId: 0 unknown new order Thread: EventDispatcher thread #заявки 16:06:33.466 [_trader_NewOrders] OrderList id: 57884196 Thread: EventDispatcher thread #заявки</mark> в квике у неё id = 57884196
Начиная с какой версии?
Что показывает Verifier на квике? Какая версия S#? Привидите скриншот квика Как отправляется эта заявка и как выводится Id в NewOrder? Квик с общими счетами или нет? Это при Move?
Бугага :-)
У меня тоже самое.
И в 4.0.5 и оно же в 4.0.3 было.
Суть в том, что недры СТокШарпа выводят в лог сообщение о NewOrder с TransactionId0 (!!!) 20:50:18.515 | | QuikTrader | New order: TransactionId=0, Id5913817775, Price=1726,5, Balance=4, Security=GDZ1@RTS, State=Active
и после этого, как я понимаю, этот ордер не попадает в Strategy.Orders
Причем спрашивал тут Михаила: http://stocksharp.com/posts/m/13340/
и был проигнорирован.
Ну ё-моё, потерял кучу времени в коммерческом проекте на поиск причин.. Хорошо, что Заказчик не взял лося :-) Даешь исходники в свободный доступ!!!
Даешь помощь проекту чтобы баги фиксились быстрее. А Гидра и Плаза так вообще пол года как в исходниках.🤨
Не знаю-не знаю, open source должен быть полным :-) Тогда помощь проекту естественным образом повалит, причем и в виде фикса багов и по рефакторингу и по архитектуре.. Гора ж буржуйских успешных проектов так живет. Причем когда code contributor'ами могут быть все. А ядро команды заведует мерджами в транк :-)
Так что, таки даешь open-source :-)
Окей, раз все устраивает, тогда тему с опен сорсом закрываем. Только в следующий раз не нужно писать, что баги долго фиксяться, и фичи нужные не появляются.
Если бы все устраивало, я бы не ворчал :-)
Сейчас есть таски по открытому коду? Есть, навалом. Кто-нибудь помогает? Да, 1-2 человека порой что-то делают если им в очередной раз намекнуть.
Смысл открывать всё, если, по тому что сейчас открыто, пользы почти 0?
Это при Move?
В общем от всех у кого проблемы нужны ответы на следующие вопросы:
ps количество нулевых ордеров в день 1-5 из 800 ордеров
Т.е. после RegisterOrder TransactionId есть, а в событии NewOrder - нет? Покажите, как эта заявка выглядит в квике. И предоставьте лог - цена \ время \ id \ любой комментарий после RegisterOrder и тоже самое в NewOrder + скрин как раз из квика.
За 2 недели ответа нет - значит проблема исчерпана и решена?
И прикреплено как это выглядит в квике. Обратите внимание на слеш в комментарии, которого там быть не должно.
А как заявка подана? Именно через S#? Есть сомнения, т.к. именно квик добавляет слэш в комментарий и именно при подаче через квик не выставляется Id.
Только что без проблем создал заявку в квике - в коде клиента указал тоже что у вас - в квике добавился комментарий со слэшом. И да, для заявки, поданной из квика TransactionId пустой (= 0), как и у вас на скриншоте.
Создал такую же заявку с этим комментарием, но средствами S# (10 раз пробовал) - везде комментарий без слэша, везде есть Id.
Собственно ваши слова
Как повторится (если вдруг) для версии с выводом transactionId после register - пишите.
и, кстати, если щёлкнуть в квике уже по посланной заявке, та что в 11:00 была подана, то автоматом добавится код клиента с вашим S# + строкой. Меняем объём и цену и отправляем приказ через квик - вуаля, получаем в квике S# + строку + слэш и TransactionId = 0
Как-то уточнить всё же можно у того кто это запускал - как подавалась заявка с 76 лотами? И если это было сегодня - то, как я понимаю, вывод Id после RegisterOrder уже есть?
Прояснил этот вопрос, по какой-то причине одна заявка из 14 в этот период действительно была из квика ) Извиняюсь за беспокойство. Эта проблема точно была (в таблице заявок в программе был 0 в поле TransactionId), но не в этот раз )
В программу могут экспортироваться все заявки из квика. Если подаём руками - тогда действительно TransactionId = 0.
В общем пока помечу что не воспроизводится. Если повторится - пишите.
И кстати - это Register или ReRegister?
Сегодня столкнулся с такой же проблемой Постараюсь подробно изложить всю информацию, которую удалось получить из логов. Это сами логи:
19:00:46: 19:00:02: send limit order 67585732 19:00:46: 19:00:03: order changed 67585732 , order id 0 , order status , orderd state Done, matched True 19:00:47: 19:00:03: order changed 67585732 , order id 0 , order status , orderd state Done, matched True 19:00:47: 19:00:03: order changed 67585732 , order id 0 , order status , orderd state Done, matched True 19:00:50: 19:00:06: order changed 67585732 , order id 6127049890 , order status Accepted, orderd state Done, matched True 19:00:50: 19:00:06: trade changed 67585732 , order id 6127049890 , order status Accepted orderd state Done matched True 19:00:50: 19:00:06: send limit order 67585734 19:00:50: 19:00:06: Send market order 67585735 19:00:51: 19:00:07: order changed 67585734 , order id 0 , order status , orderd state Done, matched True 19:00:51: 19:00:07: order changed 67585734 , order id 0 , order status , orderd state Done, matched True 19:00:51: 19:00:07: order NOT MINE changed 0 , order id 6127051649 , order status orderd state Done 19:00:51: 19:00:07: trade NOT MINE changed 0 , order id 6127051649 , order status orderd state Done 19:00:51: 19:00:07: order changed 67585734 , order id 0 , order status , orderd state Done, matched True 19:00:51: 19:00:07: order changed 67585735 , order id 0 , order status , orderd state Done, matched True 19:00:51: 19:00:07: order changed 67585735 , order id 0 , order status , orderd state Done, matched True 19:00:51: 19:00:07: order changed 67585734 , order id 6127051648 , order status Accepted, orderd state Done, matched True 19:00:51: 19:00:07: trade changed 67585734 , order id 6127051648 , order status Accepted orderd state Done matched True
то, что идет после send limit order/Send market order - это ид транзакции, которые возвращает trader.RegisterOrder(order)
order NOT MINE changed и order changed - это события Trader.OrdersChanged, Trader.NewOrders trade NOT MINE changed и trade changed - это событие Trader.NewMyTrades
в логах видим, что для заявки 6127051649 приходят события order changed и trade changed, в которых id транзакции равен 0. на самом деле id транзакции должен был быть 67585735. Это видно на скриншотах во вложении.
ошибка произошла после перезапуска робота во время клиринга. квик при этом не перезапускался. в текущем состоянии робот стабильно работал в течении пару недель - ошибка не воспроизводилась.
Версия 4.0.5. квик настроен верно, верифаер пишет - все ок. замечу, что с такими настройками квика робот стабильно работал около 2 недель. В OnProcessDataError ничего не пришло. Квик самый обычный, с одним счетом.
заявки вывел в отдельную таблицу чтобы сделать скриншот, для удобства отображения. Настройки заявок для торговли - во вложении.
Ордера со сделками грузятся из разных мест независимо, поэтому наверное такая рассинхронность может быть.
в 4.0.7 это наблюдается?
Александр, не совсем понял, что значит "такая рассинхронность может быть"? Мы получае ордера и сделки в событиях, при этом основываемся на том, что id транзакции является уникальным и по нему можно идентифицировать любой ордер и трейд. Если это не так - то в каких случаях не так и как в таких случае понимать, что это событие по конкретной транзакции?
4.0.7 еще не пробовал. А есть предположение, что 4.0.7 исправит ситуацию?
Сегдня проявилась эта проблема, выглядит вот так:
вот несколько заявок с коментами
Обработайте событие PreProcessDdeData и выведите всю поступающую туда информацию.
Я правильно понял, что проблема наблюдается крайне редко, и как для синхронной отправки, так и для асинхронной? Какая версия квика используется и какая версия Trans2Quik.dll?