[3.0.14]
При перерегистрации новый Order может остаться в состоянии None навечно.
Сценарий 1
1) 29.24 Послал регистрацию заявки sell 194620@1 TransactionID=71653170
2) 29.32 Пришел OrdersChanged на Active
3) 29.43 Пришел NewOrder (уже странно, сначала статус потом что ордер зарегистрирован)
4) 29.98 Пришел OrdersChanged на Active
5) 30.40 Посылаем ReRegisterOrder на sell 194620@2. Т.е. меняется только объем. Получаем TransID=71653170
После этого 10 секунд никаких событий. А ожидается что 71653170 придет Done V=1,B=1, а 71653170 придет OrdersChanged=Active.
Отправляет ли S# MoveOrder для только измененного объема?
В качестве дополнения еще один формат лога;)
Легенда:
A=REG call RegisterOrder
A=MYTRADE event NewMyTrade
A=STATE event OrdersChanged
A=POSCHG event PositionsChanged
TID=TransactionID, ID = Order.ID (или Trade.ID), V=Volume, B=Balance.
POS=позиция возвращаема PositionManager. PrevID=ID перерегистрируемого ордера.
Код
T=2011031020012924,A=REG,ID=0,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=None,STATUS=,POS=0
T=2011031020012932,A=MYTRADE,ID=13313305,OID=378434295,TID=71653169,DIR=Buy,P=194580,V=1,OP=194580,OV=1,OB=0,STATE=Done
T=2011031020012932,A=STATE,ID=0,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=ReceiveByServer
T=2011031020012943,A=ORD,ID=378434509,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=Accepted
T=2011031020012946,A=POSCHG,ID=2011031020012946,P=RIH1,V=1
T=2011031020012990,A=POSCHG,ID=2011031020012990,P=RIH1,V=1
T=2011031020012998,A=STATE,ID=378434509,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=Accepted
T=2011031020013040,A=REREG,ID=0,TID=71653171,PrevID=378434509,DIR=Sell,P=194620,V=2,B=2,STATE=None,STATUS=,POS=1
Сценарий 2. Лога нет, но суть такая.
Пусть перерегистрируем заявку1. Актуальная информация о ней - что она Active.
Запрос на перереристрацию уходит. Новая заявка Заявка2. За то время пока он идет по перерегистрируемой заявке1 случается полный филл. К нам приходит Done по заявке1. А вот по заявке2 никакого Fail не придет в этом случае. Она так и останется в состоянии None.
Плюс такой вопрос. точнее несколько.
1) Правильно ли я понимаю, что OrdersChanged, NewMyTrade и PositionsChanged все асинхронные и могут прийти в любом порядке?
2) Из этого следует проблема, что к моменту OrderChanged на Done информация в PositionManager.Position может еще не обновится. Правильно ли я понимаю что она обновляется по NewMyTrade?
3) Правильно ли что PositionsChanged берет инфу о позиции напрямую из Смарта а не из пересчета по NewMyTrade?
С уважением.