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


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


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

Возникла непонятная ситуация, может быть ошибка не в 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,
Func`1 getNewPrice, Func`1 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