[3.0.14] Перерегистрация заявок Smart

[3.0.14] Перерегистрация заявок Smart
Atom
10.03.2011
pyhta4og


[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?


С уважением.



Теги:


Спасибо:


< 1 2 
Mikhail Sukhov

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


Greene-nsk
S# 3.0.19

А можно ITrader.ReRegisterOrder сделать асинхронным? Перерегистрирую заявку для forts:

if (_Order.State == OrderStates.Active)
{
_Order = base.ReRegisterOrder(_Order, GetBestPrice, GetNewVolume, _Order.Security.Exchange == Exchange.Rts);
}

В момент вызова функция жутко подвисает на несколько секунд.
Причем, по какой-то причине виснет весь интерфейс, хотя я вроде в отдельном потоке запускаю.


Проще сделать ручками. А виснет из-за того, что скорее всего неправильно модель взаимодействия потоков и ГУИ потока сделана.
Спасибо:
< 1 2 

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

loading
clippy