[3.0.14]
При перерегистрации новый Order может остаться в состоянии None навечно.
Сценарий 1
- 29.24 Послал регистрацию заявки sell 194620@1 TransactionID=71653170
- 29.32 Пришел OrdersChanged на Active
- 29.43 Пришел NewOrder (уже странно, сначала статус потом что ордер зарегистрирован)
- 29.98 Пришел OrdersChanged на Active
- 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.
Плюс такой вопрос. точнее несколько.
- Правильно ли я понимаю, что OrdersChanged, NewMyTrade и PositionsChanged все асинхронные и могут прийти в любом порядке?
- Из этого следует проблема, что к моменту OrderChanged на Done информация в PositionManager.Position может еще не обновится. Правильно ли я понимаю что она обновляется по NewMyTrade?
- Правильно ли что PositionsChanged берет инфу о позиции напрямую из Смарта а не из пересчета по NewMyTrade?
С уважением.