[3.0.14] Перерегистрация заявок Smart~/topic/1434/3_0_14-pereregistratsiya-zayavok-smart/Copyright @ StockSharp Platform LLC 2010 - 20242024-03-28T08:38:15Zhttps://stocksharp.ru/images/logo.pnghttps://stocksharp.ru/posts/m/6867/S# 3.0.19 А можно ITrader.ReRegisterOrder сделать асинхронным? Перерегистрирую заявку для forts: if ...2011-03-18T15:48:07Z2011-03-18T15:48:07ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">Greene-nsk <a href="https://stocksharp.ru/posts/m/6864/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">S# 3.0.19<br /><br />А можно ITrader.ReRegisterOrder сделать асинхронным? Перерегистрирую заявку для forts:<br /><br /> if (_Order.State == OrderStates.Active)<br /> {<br /> _Order = base.ReRegisterOrder(_Order, GetBestPrice, GetNewVolume, _Order.Security.Exchange == Exchange.Rts);<br /> }<br /><br />В момент вызова функция жутко подвисает на несколько секунд. <br />Причем, по какой-то причине виснет весь интерфейс, хотя я вроде в отдельном потоке запускаю.</div></div><br /><br />Проще сделать ручками. А виснет из-за того, что скорее всего неправильно модель взаимодействия потоков и ГУИ потока сделана.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6864/S# 3.0.19 А можно ITrader.ReRegisterOrder сделать асинхронным? Перерегистрирую заявку для forts: if ...2011-03-18T14:46:58Z2011-03-18T14:49:37ZGreene-nskhttps://stocksharp.ru/users/27932/info@stocksharp.ruS# 3.0.19<br /><br />А можно ITrader.ReRegisterOrder сделать асинхронным? Перерегистрирую заявку для forts:<br /><br /> if (_Order.State == OrderStates.Active)<br /> {<br /> _Order = base.ReRegisterOrder(_Order, GetBestPrice, GetNewVolume, _Order.Security.Exchange == Exchange.Rts);<br /> }<br /><br />В момент вызова функция жутко подвисает на несколько секунд. <br />Причем, по какой-то причине виснет весь интерфейс, хотя я вроде в отдельном потоке запускаю.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6737/ OrderMoveFailed(cookie,ordId,reason) OrderReRegisterFailed(id) - нет cookie и reason OrderMoveSucce...2011-03-16T10:25:13Z2011-03-16T10:25:13Zpyhta4oghttps://stocksharp.ru/users/497/info@stocksharp.ru<div class="quote"><span class="quotetitle">Mikhail Sukhov <a href="https://stocksharp.ru/posts/m/6715/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6713/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />OrderMoveFailed(cookie,ordId,reason) OrderReRegisterFailed(id) - нет cookie и reason<br />OrderMoveSucceded(cookie,ordId) OrderReRegistered(id) - нет cookie<br />OrderCancelFailed(id) OrderCancelFailed(id) <br />OrderCancelSucceded(id) OrderCancelled(id)<br />UpdateOrder(portf,symb,StOrder_State,...) OrderChanged(portf,symb,StOrder_State,...)<br /><br /><br />То в некоторых методах нет cookie плюс нет reason в OrderReRegisterFailed</div></div><br /><br />Новая версия СмартКом? У меня не такая сигнатура.</div></div><br /><br />снимается. я смотрел по документации на СмартКом, она не совпадает с реальностьюCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6715/ OrderMoveFailed(cookie,ordId,reason) OrderReRegisterFailed(id) - нет cookie и reason OrderMoveSucce...2011-03-15T19:13:58Z2011-03-15T19:13:58ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6713/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />OrderMoveFailed(cookie,ordId,reason) OrderReRegisterFailed(id) - нет cookie и reason<br />OrderMoveSucceded(cookie,ordId) OrderReRegistered(id) - нет cookie<br />OrderCancelFailed(id) OrderCancelFailed(id) <br />OrderCancelSucceded(id) OrderCancelled(id)<br />UpdateOrder(portf,symb,StOrder_State,...) OrderChanged(portf,symb,StOrder_State,...)<br /><br /><br />То в некоторых методах нет cookie плюс нет reason в OrderReRegisterFailed</div></div><br /><br />Новая версия СмартКом? У меня не такая сигнатура.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6713/Есть некие отличия. Если предположить что мэппинг таков: SmartCOM S# OrderFailed(cookie,id,reason) O...2011-03-15T16:16:55Z2011-03-15T16:16:55Zpyhta4oghttps://stocksharp.ru/users/497/info@stocksharp.ruЕсть некие отличия. Если предположить что мэппинг таков:<br /><br />SmartCOM S#<br />OrderFailed(cookie,id,reason) OrderFailed(cookie,id,reason)<br />OrderSucceded(сookie,ordid) NewOrder(cookie,ordid)<br />OrderMoveFailed(cookie,ordId,reason) OrderReRegisterFailed(id) - нет cookie и reason<br />OrderMoveSucceded(cookie,ordId) OrderReRegistered(id) - нет cookie<br />OrderCancelFailed(id) OrderCancelFailed(id) <br />OrderCancelSucceded(id) OrderCancelled(id)<br />UpdateOrder(portf,symb,StOrder_State,...) OrderChanged(portf,symb,StOrder_State,...)<br /><br /><br />То в некоторых методах нет cookie плюс нет reason в OrderReRegisterFailedCopyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6709/ В целом же конечно лучше сделать мэппинг 1-в-1 всех событий смарта со всеми параметрами во враппере...2011-03-15T15:29:07Z2011-03-15T15:29:07ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6708/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />В целом же конечно лучше сделать мэппинг 1-в-1 всех событий смарта со всеми параметрами во враппере. <br /></div></div><br /><br />Так а он и есть 1 в 1. Только названия чуть другие.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6708/С рефлекшн это идея. Попробовал вот так StServer srv = typeof(SmartComWrapper).GetField("#=qjxaeJ7mH...2011-03-15T15:24:40Z2011-03-15T15:24:40Zpyhta4oghttps://stocksharp.ru/users/497/info@stocksharp.ruС рефлекшн это идея. Попробовал вот так<br /><div class="code"><strong>Код</strong><div class="innercode"><br />StServer srv = typeof(SmartComWrapper).GetField("#=qjxaeJ7mH$ELRDDBxcDAGzw==", System.Reflection.BindingFlags.Instance|System.Reflection.BindingFlags.NonPublic).GetValue(st.Wrapper) as StServer;<br /></div></div><br />и вроде получил что-то;). Попробую потрейсить.<br /><br />В целом же конечно лучше сделать мэппинг 1-в-1 всех событий смарта со всеми параметрами во враппере. <br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6704/При тестировании на демосчете приходит ТОЛЬКО OrderChanged! Судя по сигнатуре OrderChanged мэпит Sma...2011-03-15T14:53:08Z2011-03-15T15:00:36ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6697/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">При тестировании на демосчете приходит ТОЛЬКО OrderChanged!<br />Судя по сигнатуре OrderChanged мэпит SmartCOM2.UpdateOrder(), хотя параметры в SmartComWrapper и не документированы.<br /></div></div><br /><br />Хорошее замечание. Сейчас исправим.<br /><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6697/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Чтобы разобраться со своей проблемой (После ReRegisterOrder заявка остается в состоянии None) я хотел бы писать лог событий SmartCOM. Например, есть надежда что возможно приходит SmartCOM2.OrderMoveFailed.<br /></div></div><br /><br />И это добавлю.<br /><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6697/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Во-первых, в SmartCOMWrapper нет однозначного соответствия между public-событиями и событиями SmartCOM2<br /></div></div><br /><br />Ок, укажу в документации, из какого SmartCOM2 события вызывается данное S# событие.<br /><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6697/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Во-вторых, кроме OrderChanged ничего не приходит. Это или баг в S#, или SmartCOM ничего не шлет.<br /></div></div><br /><br />Баг, это мое 6-ое чувство. Но все равно выше написанное исправлю на будущее. upd: Событие OrderReRegisterFailed<br /><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6697/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Возможно ли или вывести в public StServer в SmartComWrapper? </div></div><br /><br />Если я вынесу, то тогда придется во всех роботах ссылку делать на Interop.StXXX.dll, что не очень красивый дизайн. Если так сильно нужно, просто сделайте через Reflection. Код нужен?Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6697/ Автор: pyhta4og Перейти к цитате При перерегистрации новый Order может остаться в состоянии None на...2011-03-15T14:00:11Z2011-03-15T14:00:11Zpyhta4oghttps://stocksharp.ru/users/497/info@stocksharp.ru<div class="quote"><span class="quotetitle">Цитата:</span><div class="innerquote"><br />Автор: pyhta4og Перейти к цитате<br />[3.0.14]<br />При перерегистрации новый Order может остаться в состоянии None навечно.<br /><br /><br />В СмартКом нужно такие вещи проверять с купе с событиями SmartComWrapper. Он четко сможет показать, ошибка в S# или в SmartCom. Данные нужны такие: точное время, номер заявки, номер транзакции, номер смарта (только в SmartComWrapper), номер куки (только в SmartComWrapper).<br /></div></div><br /><br />[3.0.16]<br />Подписался на <br />SmartComWrapper.OrderReRegisterFailed, <br />.OrderReRegistered, <br />.OrderCancelled,<br />.OrderCancelFailed, <br />.OrderFailed<br />и<br />.OrderChanged<br /><br /><br />При тестировании на демосчете приходит ТОЛЬКО OrderChanged!<br />Судя по сигнатуре OrderChanged мэпит SmartCOM2.UpdateOrder(), хотя параметры в SmartComWrapper и не документированы.<br /><br />Чтобы разобраться со своей проблемой (После ReRegisterOrder заявка остается в состоянии None) я хотел бы писать лог событий SmartCOM. Например, есть надежда что возможно приходит SmartCOM2.OrderMoveFailed.<br /><br />Однако это нельзя сейчас сделать.<br /><br />Во-первых, в SmartCOMWrapper нет однозначного соответствия между public-событиями и событиями SmartCOM2, а cсылка на StServer - private. и напрямую не подпишешься.<br /><br />Во-вторых, кроме OrderChanged ничего не приходит. Это или баг в S#, или SmartCOM ничего не шлет.<br /><br /><br />Возможно ли или вывести в public StServer в SmartComWrapper? Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6597/ Сценарий 1 1) 29.24 Послал регистрацию заявки sell 194620@1 TransactionID=71653170 2) 29.32 Пришел ...2011-03-11T08:24:55Z2011-03-11T08:24:55ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">Mikhail Sukhov <a href="https://stocksharp.ru/posts/m/6594/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6568/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Сценарий 1<br /><br />1) 29.24 Послал регистрацию заявки sell 194620@1 TransactionID=71653170<br />2) 29.32 Пришел OrdersChanged на Active <br />3) 29.43 Пришел NewOrder (уже странно, сначала статус потом что ордер зарегистрирован)<br /></div></div><br /><br />А как это проверяете?<br /></div></div><br /><br />Багу нашел.<br /><br /><div class="quote"><span class="quotetitle">Mikhail Sukhov <a href="https://stocksharp.ru/posts/m/6594/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6568/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Отправляет ли S# MoveOrder для только измененного объема?<br /></div></div><br /><br />В SmartTrader MoveOrder вызывается всегда в методе ReRegisterOrder.<br /></div></div><br /><br />Изменил поведение. Теперь только для тех, у кого Security.Exchange == RTS.<br />Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6594/ При перерегистрации новый Order может остаться в состоянии None навечно. В СмартКом нужно такие вещ...2011-03-11T07:24:45Z2011-03-11T07:24:56ZMikhail Sukhovhttps://stocksharp.ru/users/201/info@stocksharp.ru<div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6568/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote">[3.0.14]<br />При перерегистрации новый Order может остаться в состоянии None навечно.<br /></div></div><br /><br />В СмартКом нужно такие вещи проверять с купе с событиями SmartComWrapper. Он четко сможет показать, ошибка в S# или в SmartCom. Данные нужны такие: точное время, номер заявки, номер транзакции, номер смарта (только в SmartComWrapper), номер куки (только в SmartComWrapper).<br /><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6568/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Сценарий 1<br /><br />1) 29.24 Послал регистрацию заявки sell 194620@1 TransactionID=71653170<br />2) 29.32 Пришел OrdersChanged на Active <br />3) 29.43 Пришел NewOrder (уже странно, сначала статус потом что ордер зарегистрирован)<br /></div></div><br /><br />А как это проверяете?<br /><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6568/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Отправляет ли S# MoveOrder для только измененного объема?<br /></div></div><br /><br />В SmartTrader MoveOrder вызывается всегда в методе ReRegisterOrder.<br /><br /><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6568/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Пусть перерегистрируем заявку1. Актуальная информация о ней - что она Active. <br />Запрос на перереристрацию уходит. Новая заявка Заявка2. За то время пока он идет по перерегистрируемой заявке1 случается полный филл. К нам приходит Done по заявке1. А вот по заявке2 никакого Fail не придет в этом случае. Она так и останется в состоянии None.<br /></div></div><br /><br />Не проверял.<br /><br /><div class="quote"><span class="quotetitle">pyhta4og <a href="https://stocksharp.ru/posts/m/6568/"><img src="https://stocksharp.ru/images/icon_latest_reply.gif" title="Перейти" alt="Перейти" /></a></span><div class="innerquote"><br />Плюс такой вопрос. точнее несколько.<br /><br />1) Правильно ли я понимаю, что OrdersChanged, NewMyTrade и PositionsChanged все асинхронные и могут прийти в любом порядке?<br />2) Из этого следует проблема, что к моменту OrderChanged на Done информация в PositionManager.Position может еще не обновится. Правильно ли я понимаю что она обновляется по NewMyTrade?<br />3) Правильно ли что PositionsChanged берет инфу о позиции напрямую из Смарта а не из пересчета по NewMyTrade?<br /></div></div><br /><br />1. OrdersChanged + NewMyTrade синхронизируются между собой (сделки обновляют Order.Balance и Order.State если баланс стал равен 0). PositionsChanged - полностью независим (могу наврать, но это вроде от биржи тянется).<br />2. Да, обновляется по NewMyTrade.<br />3. Правильно.Copyright @ StockSharp Platform LLC 2010 - 2024https://stocksharp.ru/posts/m/6568/ При перерегистрации новый Order может остаться в состоянии None навечно. Сценарий 1 1) 29.24 Послал...2011-03-10T18:05:49Z2011-03-10T18:05:49Zpyhta4oghttps://stocksharp.ru/users/497/info@stocksharp.ru[3.0.14]<br /><br />При перерегистрации новый Order может остаться в состоянии None навечно.<br /><br />Сценарий 1<br /><br />1) 29.24 Послал регистрацию заявки sell 194620@1 TransactionID=71653170<br />2) 29.32 Пришел OrdersChanged на Active <br />3) 29.43 Пришел NewOrder (уже странно, сначала статус потом что ордер зарегистрирован)<br />4) 29.98 Пришел OrdersChanged на Active<br />5) 30.40 Посылаем ReRegisterOrder на sell 194620@2. Т.е. меняется только объем. Получаем TransID=71653170<br /><br />После этого 10 секунд никаких событий. А ожидается что 71653170 придет Done V=1,B=1, а 71653170 придет OrdersChanged=Active.<br /><br />Отправляет ли S# MoveOrder для только измененного объема?<br /><br />В качестве дополнения еще один формат лога;)<br />Легенда: <br />A=REG call RegisterOrder<br />A=MYTRADE event NewMyTrade<br />A=STATE event OrdersChanged<br />A=POSCHG event PositionsChanged<br />TID=TransactionID, ID = Order.ID (или Trade.ID), V=Volume, B=Balance.<br />POS=позиция возвращаема PositionManager. PrevID=ID перерегистрируемого ордера.<br /><br /><div class="code"><strong>Код</strong><div class="innercode"><br />T=2011031020012924,A=REG,ID=0,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=None,STATUS=,POS=0<br />T=2011031020012932,A=MYTRADE,ID=13313305,OID=378434295,TID=71653169,DIR=Buy,P=194580,V=1,OP=194580,OV=1,OB=0,STATE=Done<br />T=2011031020012932,A=STATE,ID=0,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=ReceiveByServer<br />T=2011031020012943,A=ORD,ID=378434509,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=Accepted<br />T=2011031020012946,A=POSCHG,ID=2011031020012946,P=RIH1,V=1<br />T=2011031020012990,A=POSCHG,ID=2011031020012990,P=RIH1,V=1<br />T=2011031020012998,A=STATE,ID=378434509,TID=71653170,DIR=Sell,P=194620,V=1,B=1,STATE=Active,STATUS=Accepted<br />T=2011031020013040,A=REREG,ID=0,TID=71653171,PrevID=378434509,DIR=Sell,P=194620,V=2,B=2,STATE=None,STATUS=,POS=1<br /></div></div><br /><br /><br />Сценарий 2. Лога нет, но суть такая.<br /><br />Пусть перерегистрируем заявку1. Актуальная информация о ней - что она Active. <br />Запрос на перереристрацию уходит. Новая заявка Заявка2. За то время пока он идет по перерегистрируемой заявке1 случается полный филл. К нам приходит Done по заявке1. А вот по заявке2 никакого Fail не придет в этом случае. Она так и останется в состоянии None.<br /><br /><br /><br />Плюс такой вопрос. точнее несколько.<br /><br />1) Правильно ли я понимаю, что OrdersChanged, NewMyTrade и PositionsChanged все асинхронные и могут прийти в любом порядке?<br />2) Из этого следует проблема, что к моменту OrderChanged на Done информация в PositionManager.Position может еще не обновится. Правильно ли я понимаю что она обновляется по NewMyTrade?<br />3) Правильно ли что PositionsChanged берет инфу о позиции напрямую из Смарта а не из пересчета по NewMyTrade?<br /><br /><br />С уважением.<br /><br /><br />Copyright @ StockSharp Platform LLC 2010 - 2024