[BLOCKER] [S#3.0beta] трейды не регистрируются под статегией


[BLOCKER] [S#3.0beta] трейды не регистрируются под статегией
Atom
09.02.2011


Есть стратегия унаследованная от TimeFrameStrategy.

Для каждой новой свечки делается следующее:
Код

OpenWealth.Log.Out("ДО отмены приказов");
OpenWealth.Log.Out("Strategy.Orders " + base.Orders.Count);
OpenWealth.Log.Out("Strategy.StopOrders " + base.StopOrders.Count);
OpenWealth.Log.Out("Strategy.Orders active " + base.Orders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Strategy.StopOrders active " + base.StopOrders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Trader.Orders " + Const.SmartInstance.Trader.Orders.Count());
OpenWealth.Log.Out("Trader.StopOrders " + Const.SmartInstance.Trader.StopOrders.Count());

// отменяем активные заявки
base.CancelActiveOrders();

OpenWealth.Log.Out("ПОСЛЕ отмены приказов");
OpenWealth.Log.Out("Strategy.Orders " + base.Orders.Count);
OpenWealth.Log.Out("Strategy.StopOrders " + base.StopOrders.Count);
OpenWealth.Log.Out("Strategy.Orders active " + base.Orders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Strategy.StopOrders active " + base.StopOrders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Trader.Orders " + Const.SmartInstance.Trader.Orders.Count());
OpenWealth.Log.Out("Trader.StopOrders " + Const.SmartInstance.Trader.StopOrders.Count());

// регистрируем заявки (обычным способом, без котирования)
StrategyInstance.Alerts.ForEach(a => base.RegisterOrder(Translations.AlertToOrder(a)));

System.Threading.Thread.Sleep(10000);
OpenWealth.Log.Out("ПОСЛЕ регистрации новых приказов");
OpenWealth.Log.Out("Strategy.Orders " + base.Orders.Count);
OpenWealth.Log.Out("Strategy.StopOrders " + base.StopOrders.Count);
OpenWealth.Log.Out("Strategy.Orders active " + base.Orders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Strategy.StopOrders active " + base.StopOrders.Count(o => o.State == OrderStates.Active));
OpenWealth.Log.Out("Trader.Orders " + Const.SmartInstance.Trader.Orders.Count());
OpenWealth.Log.Out("Trader.StopOrders " + Const.SmartInstance.Trader.StopOrders.Count());


Для каждой свечки (для одной итерации) создаются два ордера.
Вывод на второй свечке (на первой аналогично добавились только в общий список):
Код

09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ДО отмены приказов
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 2
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 2
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ отмены приказов
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 2
09.02.2011 19:41:35 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 2
09.02.2011 19:41:35 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 -1 Conditional
09.02.2011 19:41:35 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 +1 Conditional
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ регистрации новых приказов
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 4
09.02.2011 19:41:45 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 4


На третьей свечке добавляются наконец в список стратегии, но только в стоп ордера:
Код

09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ДО отмены приказов
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 4
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 4
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ отмены приказов
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 0
09.02.2011 19:51:36 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:51:37 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 0
09.02.2011 19:51:37 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 4
09.02.2011 19:51:37 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 4
09.02.2011 19:51:37 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 -1 Conditional
09.02.2011 19:51:37 [OpenWealth.HeadRealTradeStockSharp.OnOrderChanged] Ордер изменен. Состояние: Active статус: ReceiveByServer время снятия: бумага: RTS-3.11 b/s: Sell средняя цена: 0 тип: Conditional
09.02.2011 19:51:37 [OpenWealth.StockSharp.SmartCOM.<Smart_NewOrders>b__18] RTS-3.11 +1 Conditional
09.02.2011 19:51:37 [OpenWealth.HeadRealTradeStockSharp.OnOrderChanged] Ордер изменен. Состояние: Active статус: ReceiveByServer время снятия: бумага: RTS-3.11 b/s: Buy средняя цена: 0 тип: Conditional
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] ПОСЛЕ регистрации новых приказов
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders 0
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders 2
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.Orders active 0
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Strategy.StopOrders active 2
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.Orders 6
09.02.2011 19:51:47 [OpenWealth.StockSharp.StrategyAdapter.OnProcess] Trader.StopOrders 6


Т.е. 2е ошибки:
1. ордера не всегда добавляются в список ордеров стратегии (чаще не добавляются)
2. в одном случае стоп ордер добавляется в Orders и StopOrders, в другом только в StopOrders

Что я делаю не так?

Теги:


Спасибо:


< 1 2 3 4  >
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;
}

Спасибо:
< 1 2 3 4  >

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

loading
clippy