CheckOnOld Заявка не имеет номер транзакции

CheckOnOld Заявка не имеет номер транзакции
Atom
08.09.2010
artemox


Михаил, доброго дня!

Возникла непонятная ситуация, может быть ошибка не в S#, но без вашей помощи не разобраться :) Ситуация следующая: Перерегистрирую заявку, при очередном ReRegisterOrder приходит заявка с пустым Message: ID=91747363 State=Active Price=145460 Balance=1 Message= Но ошибок при этом нет, когда же я пытаюсь передвинуть эту заявку, в ReRegisterOrder возникает исключение: Заявка не имеет номер транзакции. Возможно, она не была зарегистрирована. Parameter name: order # Ecng.Trading.BusinessEntities # at Ecng.Trading.BusinessEntities.BaseTrader.CheckOnOld(Order order) at Ecng.Trading.BusinessEntities.BaseTrader.ReRegisterOrder(Order oldOrder, Order newOrder) at Ecng.Trading.Algo.Strategy.ReRegisterOrder(Order oldOrder, Func1 getNewPrice, Func1 getNewVolume, Boolean isForts)

Состояние и баланс заявки при вызове ReRegisterOrder не поменялись (судя по логу) Сама заявка 91747363 результат предыдущего ReRegisterOrder, т.е. должна быть зарегана.

За день было 5 таких заявок, 4 из них исполнились, но сделки в стратегию не попали :( До 2.4 такого не наблюдалось

S# 2.4 Q 5.16.0.145


Теги:


Спасибо:


artemox

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


Дополнение: Аналогичная ошибка и при отмене ордера. При этом в Квике заявка активна и руками снимается успешно.

Спасибо:

Mikhail Sukhov

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


Сообщение говорит о том, что номер транзакции равен 0. Все заявки перед регистрацией получают от QuikTrader уникальный идентификатор. У Вас он куда-то пропадает... Вы никак заявку в коде модифицируете?

Спасибо:

artemox

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


Id и TransactionId напрямую точно не модифицируется.

Еще раз обращу Ваше внимание на то, что только по этим (5-ти) заявкам Message был пустой. Специально проверил весь лог за день.

Спасибо:

Mikhail Sukhov

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


А в Quik по этим заявкам были проставлены транзакции?

Спасибо:

artemox

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


Да, я выгрузил в файл все заявки и сделки за день, по этим "потерянным" ничего подозрительного не нашел.

Спасибо:

Mikhail Sukhov

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


Режим синхронный или асинх? Робот в течении сессии перегружался?

Спасибо:

artemox

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


Режим синхр (он же по умолчанию? т.е. IsAsyncMode я не инициализирую) Робот не перезагружался. Добавил вывод в лог TransactionId, может быть что то прояснится. Но к сожалению дней 10 у меня не будет возможности сообщить о результатах, как только смогу отпишусь. Спасибо.

Спасибо:

artemox

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


Вот вырезки из расширенного-протокола:

tId это TransactionId

Изменяем некий ордер с Id=93673362:

Перед ReRegisterOrder => Id=93673362 tId=68420381 State=Active Price=147035 Balance=1 Вызов ReRegisterOrder Trader.OrdersChanged => Id=93673362 tId=68420381 State=Done Price=147035 Balance=1 Message=[FORTS] Операция выполнена успешно. New Order1 ID: 93673362, new Order2 ID: 0 Trader.OrdersChanged => Id=93673457 tId=0 State=Active Price=147040 Balance=1 Message="ПУСТО" После вызова ReRegisterOrder, дальше по коду вывод сформированной заявки => Id=93673457 tId=68420383 State=None Price=147040 Balance=1

Далее идет изменение нового ордера с Id=93673457 и tId=68420383 (где то State=None, то tId=0)

Перед ReRegisterOrder => Id=93673457 tId=0 State=Active Price=147040 Balance=1 ОПА!!! tId=0 Понятно что генерится Exception => Id=93673457 tId=0 State=Active Price=147040 Balance=1 Заявка не имеет номер транзакции. Возможно, она не была зарегистрирована. Parameter name: order # Ecng.Trading.BusinessEntities # at Ecng.Trading.BusinessEntities.BaseTrader.CheckOnOld(Order order)

Т.е. в Trader.OrdersChanged засветился ордер с tId=0, хотя потом tId проинициализировалось нормальным значением, и на этом ордере вылетела ошибка.

tId=0 и Message="ПУСТО" приходят на пару, и по отдельности не появлялись.

Спасибо:

artemox

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


Михаил, у Вас есть мысли по этому поводу?

Спасибо:

Mikhail Sukhov

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


Абсолютно никаких. Раз никто не написал об этом, то похоже присутствует ошибочное поведение в роботе. Давайте попробуем понять, перезаписываются ли у Вас номера транзакции или же полностью пересоздаются объекты Order.

Можете в лог добавить вывод order.GetHashCode() чтобы узнать, один и тот же объект или нет?

Спасибо:


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

loading
clippy