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

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


Есть стратегия унаследованная от 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  > >>
Mikhail Sukhov

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


ITrader.Orders возвращает и обычные заявки, и стоп заявки. В отличие от Strategy.Orders, где только обычные заявки. Плюс СмартКом асинхронен. Тоесть заявки добавляются только тогда, когда они успешно регистрируются.

В свете этого проблема прояснилась?

Спасибо:

Greene-nsk

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


Немного прояснилась. Значит главная проблема в следующем: больше чем в половине случаев заявки регистрируются в реале но не регистрируются в SmartTrade.

Я думаю, это может происходить из-за того, что StartTrade регистрирует заявку только после OrderSucceeded и затем UpdateOrder. Если событие UpdateOrder приходит раньше, чем OrderSucceeded (в SmartCOM это происходит в половине случаев) - заявка не появляется в Startegy.StopOrders.

И еще такой вопрос ради любопытства. Зачем такая разница? Что в Trader.Orders одно, а в Startegy.Orders другое.

Спасибо:

Mikhail Sukhov

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


Greene-nsk: Немного прояснилась. Значит главная проблема в следующем: больше чем в половине случаев заявки регистрируются в реале но не регистрируются в SmartTrade.

Я думаю, это может происходить из-за того, что StartTrade регистрирует заявку только после OrderSucceeded и затем UpdateOrder. Если событие UpdateOrder приходит раньше, чем OrderSucceeded (в SmartCOM это происходит в половине случаев) - заявка не появляется в Startegy.StopOrders.

Это Вы проверили через SmartComWrapper? Вообще я уже сталкивался сам с подобным, поэтому такая ситуация должна разруливаться.

Greene-nsk: И еще такой вопрос ради любопытства. Зачем такая разница? Что в Trader.Orders одно, а в Startegy.Orders другое.

Исторически сложилось. Сейчас уже проблемно менять.

Спасибо:

Greene-nsk

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


сейчас проверю через врапер, но факт остается фактом. Приходит событие NewOrders и не приходят UpdateOrders - заявка регистрируется только в Trader.StopOrders, но не в Startegy.StopOrders. И это происходит часто.

Спасибо:

Mikhail Sukhov

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


Greene-nsk: сейчас проверю через врапер, но факт остается фактом. Приходит событие NewOrders и не приходят UpdateOrders - заявка регистрируется только в Trader.StopOrders, но не в Startegy.StopOrders. И это происходит часто.

ITrader.NewOrders? Тоесть заявка получает номер от Смарта? А ITrader.NewStopOrders?

Спасибо:

Greene-nsk

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


Выставлено 6 заявок. В ITrader.Orders и ITrader.StopOrders пришли все 6. В 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

Спасибо:

Greene-nsk

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


А. стоп. Вы про события? Я раньше думал, что Orders и StopOrders нигде не пересекаются, поэтому лил обе: this.Trader.NewOrders += Smart_NewOrders; this.Trader.NewStopOrders += Smart_NewOrders;

Приходит только одно из них. А должны приходить оба?

Спасибо:

Mikhail Sukhov

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


Greene-nsk: А. стоп. Вы про события? Я раньше думал, что Orders и StopOrders нигде не пересекаются, поэтому лил обе: this.Trader.NewOrders += Smart_NewOrders; this.Trader.NewStopOrders += Smart_NewOrders;

Приходит только одно из них. А должны приходить оба?

Вообще да. В первом приходит для всех заявок. Во втором, только для обычных... А как Вы создаете стоп заявку?

Спасибо:

Greene-nsk

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



base.RegisterOrder(a.ToOrder());

        static public Order ToOrder(this Alert a)
        {
            OrderDirections orderDirection;
            string comment = "";
            switch (a.AlertType)
            {
                case TradeType.Buy:
                    orderDirection = OrderDirections.Buy;
                    break;
                case TradeType.Cover:
                    orderDirection = OrderDirections.Buy;
                    comment = a.Position.PositionID.ToString();
                    break;
                case TradeType.Short:
                    orderDirection = OrderDirections.Sell;
                    break;
                case TradeType.Sell:
                    orderDirection = OrderDirections.Sell;
                    comment = a.Position.PositionID.ToString();
                    break;
                default:
                    Log.OutErrorFatal("Такое направление не поддерживается: " + a.AlertType);
                    return null;
            }

            OrderTypes orderType;
            double price = 0.0;
            StopCondition stopCond = null;

            switch (a.OrderType)
            {
                case OrderType.Limit:
                    orderType = OrderTypes.Limit;
                    price = a.Price;
                    break;
                case OrderType.Market:
                    orderType = OrderTypes.Market;
                    break;
                case OrderType.Stop:
                    orderType = OrderTypes.Conditional;
                    price = a.Bars.SymbolInfo.WorseOnTicks(
                        a.Price, 
                        (orderDirection == OrderDirections.Buy) ? PositionType.Long : PositionType.Short,
                        2);
                    stopCond = new SmartStopCondition
                    {
                        IsOneDay = false,
                        StopPrice = a.Price,
                    };
                    break;
                default:
                    Log.OutErrorFatal("Такой тип не поддерживается: " + a.OrderType);
                    return null;
            }

            return new Order
            {
                Type = orderType,
                Portfolio = Const.SmartInstance.Portfolio(Const.Params.PortfolioName),
                Volume = a.Shares,
                Price = price,
                Security = Const.SmartInstance.Security(a.Symbol),
                Direction = orderDirection,
                StopCondition = stopCond,
                Comment = comment,
            };

Спасибо:

Mikhail Sukhov

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


Так, код явно не тривиален. А вот когда приходят только ITrader.NewOrders Вы уверены, что это стоп заявки? Плюс, отключит SmartTrader.AutoSave.

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

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

loading
clippy