Mikhail Sukhov
|
Дата: 11.02.2011
Greene-nsk Mikhail Sukhov Greene-nsk Код StrategyAdapter sAdapter = new StrategyAdapter(strategy); ... Log.Out("Регистрируем стратегию: " + sAdapter.StrategyInstance.strategyID); StrategyManager.Register(sAdapter, portfolio, security);
Я так понимаю, StrategyAdapter - это наследник от Strategy? А список заявок вы смотрите в sAdapter или в переданном strategy? Все смотрю и заявки исполняю из StrategyAdapter sAdapter (производный от TimeFrameStrategy). Из WealthScript strategy берется только инфа о приказах на исполнение. Багу(-и) подтверждаю. Фикс будет в 3.0.2.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 11.02.2011
Mikhail Sukhov Багу(-и) подтверждаю. Фикс будет в 3.0.2.
Кстати, если есть соображения, то готов обсудить. Суть проблемы как раз та, которую Вы писали - UpdateOrder приходит раньше OrderSucceeded. Из-за этого создается новый объект Order, не тот, который был зарегистрирован в Strategy. Соответственно, событие ITrader вызывается, но сама заявку в стратегию не попадает. Все было бы ничего, но в UpdateOrder нет параметра, который передается пользователем при регистрации (он есть только у OrderSucceeded).
|
|
Спасибо:
|
|
|
|
|
Greene-nsk
|
Дата: 11.02.2011
Mikhail Sukhov Mikhail Sukhov Багу(-и) подтверждаю. Фикс будет в 3.0.2.
Кстати, если есть соображения, то готов обсудить. Суть проблемы как раз та, которую Вы писали - UpdateOrder приходит раньше OrderSucceeded. Из-за этого создается новый объект Order, не тот, который был зарегистрирован в Strategy. Соответственно, событие ITrader вызывается, но сама заявку в стратегию не попадает. Все было бы ничего, но в UpdateOrder нет параметра, который передается пользователем при регистрации (он есть только у OrderSucceeded). Да, там коряво, конечно, получается. При UpdateOrder пусть создается новый объект с orderID, который приходит из SmartCOM, потом при OrderSucceeded можно проверить, есть уже такой orderID или нет. Если нет - значит Update еще не приходил. Если есть - скрещиваем ордер из стратегии с ордером из UpdateOrder. По-моему больше никак.
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 11.02.2011
Greene-nsk Да, там коряво, конечно, получается. При UpdateOrder пусть создается новый объект с orderID, который приходит из SmartCOM, потом при OrderSucceeded можно проверить, есть уже такой orderID или нет. Если нет - значит Update еще не приходил. Если есть - скрещиваем ордер из стратегии с ордером из UpdateOrder. По-моему больше никак.
Вот это в C# работать не будет. У вас ссылка в коде на один объект, а реально будет создан другой.
|
|
Спасибо:
|
|
|
|
|
Greene-nsk
|
Дата: 11.02.2011
Mikhail Sukhov Greene-nsk Да, там коряво, конечно, получается. При UpdateOrder пусть создается новый объект с orderID, который приходит из SmartCOM, потом при OrderSucceeded можно проверить, есть уже такой orderID или нет. Если нет - значит Update еще не приходил. Если есть - скрещиваем ордер из стратегии с ордером из UpdateOrder. По-моему больше никак.
Вот это в C# работать не будет. У вас ссылка в коде на один объект, а реально будет создан другой. Ну я же условно говоря.. В SmartServer_OrderSucceeded приходят cookie (т.е. вы знаете из какой этот ордер стратегии) и system_order_id (по нему вы знаете, приходил ли UpdateOrder, и если приходил, то какой). Т.е. вся нужная информация есть. В один из ордеров сливаем всю инфу, другой удаляем.
|
|
Спасибо:
|
|
|
|
|
Greene-nsk
|
Дата: 28.02.2011
|
|
|
|
Михаил, использую 3.0.3, где эта проблема должна быть исправлена. Но трейды до сих пор не всегда регистрируеются. Вот сегодня. Strategy.NewMyTrades НЕ пришел. Код 28.02.2011 14:34:49 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Pending StOrder_Action_Sell StOrder_Type_Market True 0 1 0 1 28.02.2011 10:34:46 562337947 0 1534632 28.02.2011 14:34:49 [OpenWealth.StockSharp.SmartCOM.<Init>b__0] Wrapper new order: 49696158 562337947 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Pending StOrder_Action_Sell StOrder_Type_Market True 0 1 0 1 28.02.2011 10:34:46 562337947 0 1534632 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Open StOrder_Action_Sell StOrder_Type_Market True 0 1 0 1 28.02.2011 10:34:46 562337947 3266781688 1534632 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__21] RTS-3.11 -1*0 Market 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Filled StOrder_Action_Sell StOrder_Type_Market True 185605 1 0 0 28.02.2011 10:34:46 562337947 3266781688 1534632 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Smart_OrdersChanged>b__25] RTS-3.11 -1*0 Market BP5758-RF-01 Done Done отстаток: 0 время снятия: 28.02.2011 10:34:46 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Smart_NewMyTrades>b__1f] 277321446 RTS-3.11 -1*193275 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Open StOrder_Action_Sell StOrder_Type_Market True 0 1 0 1 28.02.2011 10:34:46 562337947 3266781688 1534632 28.02.2011 14:34:51 [OpenWealth.StockSharp.SmartCOM.<Smart_OrdersChanged>b__25] RTS-3.11 -1*0 Market BP5758-RF-01 Active Done отстаток: 1 время снятия: 28.02.2011 10:34:46 28.02.2011 14:34:51 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Filled StOrder_Action_Sell StOrder_Type_Market True 185605 1 0 0 28.02.2011 10:34:46 562337947 3266781688 1534632 28.02.2011 14:34:51 [OpenWealth.StockSharp.SmartCOM.<Smart_OrdersChanged>b__25] RTS-3.11 -1*0 Market BPxxx-RF-01 Done Done отстаток: 0 время снятия: 28.02.2011 10:34:46
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 28.02.2011
|
|
|
|
Greene-nsk Михаил, использую 3.0.3, где эта проблема должна быть исправлена. Но трейды до сих пор не всегда регистрируеются. Вот сегодня. Strategy.NewMyTrades НЕ пришел. Код 28.02.2011 14:34:49 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Pending StOrder_Action_Sell StOrder_Type_Market True 0 1 0 1 28.02.2011 10:34:46 562337947 0 1534632 28.02.2011 14:34:49 [OpenWealth.StockSharp.SmartCOM.<Init>b__0] Wrapper new order: 49696158 562337947 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Pending StOrder_Action_Sell StOrder_Type_Market True 0 1 0 1 28.02.2011 10:34:46 562337947 0 1534632 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Open StOrder_Action_Sell StOrder_Type_Market True 0 1 0 1 28.02.2011 10:34:46 562337947 3266781688 1534632 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__21] RTS-3.11 -1*0 Market 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Filled StOrder_Action_Sell StOrder_Type_Market True 185605 1 0 0 28.02.2011 10:34:46 562337947 3266781688 1534632 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Smart_OrdersChanged>b__25] RTS-3.11 -1*0 Market BP5758-RF-01 Done Done отстаток: 0 время снятия: 28.02.2011 10:34:46 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Smart_NewMyTrades>b__1f] 277321446 RTS-3.11 -1*193275 28.02.2011 14:34:50 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Open StOrder_Action_Sell StOrder_Type_Market True 0 1 0 1 28.02.2011 10:34:46 562337947 3266781688 1534632 28.02.2011 14:34:51 [OpenWealth.StockSharp.SmartCOM.<Smart_OrdersChanged>b__25] RTS-3.11 -1*0 Market BP5758-RF-01 Active Done отстаток: 1 время снятия: 28.02.2011 10:34:46 28.02.2011 14:34:51 [OpenWealth.StockSharp.SmartCOM.<Init>b__1] Wrapper order changed: BPxxx-RF-01 RTS-3.11_FT StOrder_State_Filled StOrder_Action_Sell StOrder_Type_Market True 185605 1 0 0 28.02.2011 10:34:46 562337947 3266781688 1534632 28.02.2011 14:34:51 [OpenWealth.StockSharp.SmartCOM.<Smart_OrdersChanged>b__25] RTS-3.11 -1*0 Market BPxxx-RF-01 Done Done отстаток: 0 время снятия: 28.02.2011 10:34:46
Я глаза сломал, пока пытался понять, что к чему.[smile] А можно чуть нагляднее лог сделать? Что нужно. Номер заявки, номер транзакции, номер смарта у заявки (+ объяснить, что в каком порядке выводиться).
|
|
Спасибо:
|
|
|
|
|
Greene-nsk
|
Дата: 01.03.2011
|
|
|
|
Mikhail Sukhov Я глаза сломал, пока пытался понять, что к чему.[smile] А можно чуть нагляднее лог сделать? Что нужно. Номер заявки, номер транзакции, номер смарта у заявки (+ объяснить, что в каком порядке выводиться).
Вывод был с помощью этих функций, т.е. все по порядку как приходит, так и выводится: Код (this.Trader as SmartTrader).Wrapper.NewOrder += ((i, s) => { Log.Out("Wrapper new order: " + i + " " + s); });
(this.Trader as SmartTrader).Wrapper.OrderChanged += ((s1, s2, s3, s4, s5, s6, s7, s8, s9, s10, s11, s12, s13, s14) => { Log.Out("Wrapper order changed: " + s1 + " " + s2 + " " + s3 + " " + s4 + " " + s5 + " " + s6 + " " + s7 + " " + s8 + " " + s9 + " " + s10 + " " + s11 + " " + s12 + " " + s13 + " " + s14); });
SmartCOM_2_0_manual: void UpdateOrder(string portfolio, string symbol, StClientLib.StOrder_State state, StClientLib.StOrder_Action action, StClientLib.StOrder_Type type, StClientLib.StOrder_Validity validity, double price, double amount, double stop, double filled, System.DateTime datetime, string orderid, string orderno, int status_mask)
|
|
Спасибо:
|
|
|
|
|
Mikhail Sukhov
|
Дата: 01.03.2011
По логу увидел следующее. Почему то Смарт сначала присылает что заявка matched, а затем что она опять открыта. Видимо надо сделать проверку. Можете сказать, как часто так делает Смарт?
Еще, не понял, что такое <Smart_NewOrders>b__21. Это ITrader.NewOrders? А Вы делаете лог из Strategy событий? Плюс не плохо было бы в этих событиях так же выводить Order.Id
Не понятно, почему время снятие инициализировано. Вы его из Order.CancelTime берете?
|
|
Спасибо:
|
|
|
|
|
Greene-nsk
|
Дата: 02.03.2011
|
|
|
|
Mikhail Sukhov По логу увидел следующее. Почему то Смарт сначала присылает что заявка matched, а затем что она опять открыта. Видимо надо сделать проверку. Можете сказать, как часто так делает Смарт?
Не могу сказать. Mikhail Sukhov Еще, не понял, что такое <Smart_NewOrders>b__21. Это ITrader.NewOrders?
Да. Это оно. Mikhail Sukhov А Вы делаете лог из Strategy событий? Плюс не плохо было бы в этих событиях так же выводить Order.Id
Да, вывожу (уверен процентов на 80% - тот кусок кода уже переделал, лог удален). Лог стратегии в этом куске "не задет". Order.Id добавил. В следующий раз будет. Mikhail Sukhov Не понятно, почему время снятие инициализировано. Вы его из Order.CancelTime берете?
Да, это CancelTime. Тоже непонятно. Вывод ITrader.OrdersChanged: Код orders.ForEach(o => Log.Out(o.ToStringLong()));
static public string ToStringLong(this Order o) { string sign = (o.Direction == OrderDirections.Buy) ? "+" : "-"; return o.Security.Name + " " + sign + o.Volume + "*" + o.Price + " " + o.Type + " " + o.Portfolio.Name + " " + o.State + " " + o.Status + " остаток: " + o.Balance + " время снятия: " + o.CancelTime; }
|
|
Спасибо:
|
|
|
|