Возникла непонятная ситуация, может быть ошибка не в 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
On 7 сен, 20:31, artemox <arte...@gmail.com> wrote:
Еще раз обращу Ваше внимание на то, что только по этим (5-ти) заявкам
Message был пустой.
Специально проверил весь лог за день.
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="ПУСТО" приходят на пару, и по отдельности не
появлялись.
Можете в лог добавить вывод order.GetHashCode() чтобы узнать, один и
тот же объект или нет?