← Zurück

S# 4.1.18, не приходит OrderRegistered при тестировании в EmulationTrader

Добрый день! Прошу помощи. У меня здесь даже две проблемы.

**1.**Просто не приходит OrderRegistered в стратегию:

   
    protected override void OnStarted()
    {
      //  настраиваем получение данных,
      this.Trader.MarketDepthsChanged += (depths) =>
        {
          depths.ForEach(depth =>
          {
            if (depth.Security.Equals(this.Security))
              ProcessDepth(depth);
          });
        };

      this.OrderRegistered += (order) =>
      {
        Chart_DrawOrder(order);
      };
      this.OrderRegisterFailed += (o) =>
      {
        this._Log.Error(this.Name, "Order registering failed: " + o.Error.ToString());
      };
      this.NewMyTrades += (trades) =>
      {
        trades.ForEach((t) => Chart_DrawTrade(t.Trade));
      };

      //  workaround
      this.Trader.NewOrders += (orders) =>
        {
          orders.ForEach((o) => Chart_DrawOrder(o));
        };


      base.OnStarted();
    }

Здесь я получаю MarketDepthsChanged, где в обработчике ProcessDepth() делаю такую заявку:


      var order = this.CreateOrder(dir, depth.BestPair.MiddlePrice, 1); // (здесь я пробовал цену двигать и вверх, и вниз от MiddlePrice на много пунктов, но ничего не менялось)
      this.RegisterOrder(order);

После чего я получаю только событие NewMyTrades, а OrderRegistered или OrderRegisterFailed не идут. :-\

Вместе с тем исправно приходят и другие события, если на них подписаться:


      strategy.PnLChanged += () =>
      {
        this.GuiAsync(() => chartCurveItems.Add(new EquityData { Time = strategy.GetMarketTime(), Value = strategy.PnL, }));
      };
      strategy.PositionChanged += () =>
      {
        this.GuiAsync(() => chartPosItems.Add(new EquityData { Time = strategy.GetMarketTime(), Value = strategy.Position }));
      };

В логах видно, что позиция изменяется (все заявки Sell/Buy проходят одинаковый жизненный цикл):


...
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Регистрация новой Limit (0x24CBD2A) заявки на Buy с ценой 129650 и объемом 1. 
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Полное исполнение  64190751/0 (0x1934CBE)'. Подписалось на события.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Отмена заявки  64190751/0 (0x1CC1659)'. Подписалось на события.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Ошибка регистрации заявки  64190751/0 (0x270F9F2)'. Подписалось на события.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Новая Buy сделка 1 по цене 129560 на 1 заявки 64190751.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Новая позиция: test account-RIU3@FORTS=1.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Отмена заявки  64190751/0 (0x1CC1659) OR Полное исполнение  64190751/0 (0x1934CBE) OR Ошибка регистрации заявки  64190751/0 (0x270F9F2)'. Активация.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Заявка 64190751 больше не активна.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Отмена заявки  64190751/0 (0x1CC1659) OR Полное исполнение  64190751/0 (0x1934CBE) OR Ошибка регистрации заявки  64190751/0 (0x270F9F2)'. Удаляется.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Отмена заявки  64190751/0 (0x1CC1659)'. Освободило ресурсы.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Полное исполнение  64190751/0 (0x1934CBE)'. Освободило ресурсы.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Ошибка регистрации заявки  64190751/0 (0x270F9F2)'. Освободило ресурсы.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Отмена заявки  64190751/0 (0x1CC1659) OR Полное исполнение  64190751/0 (0x1934CBE) OR Ошибка регистрации заявки  64190751/0 (0x270F9F2)'. Освободило ресурсы.
2013.09.10 17:49:54 (Info) [PriceTimeAverage] 22.08.2013 10:00:28 Правило 'Отмена заявки  64190751/0 (0x1CC1659) OR Полное исполнение  64190751/0 (0x1934CBE) OR Ошибка регистрации заявки  64190751/0 (0x270F9F2)'. Удаление.
...

**2.**Если же заявки кидать из дочерней стратегии MarketQuotingStrategy, то постоянно приходит OrderRegisterFailed, где "Элемент с тем же ключом уже был добавлен.":


22.08.2013 10:00:28 Заявка 0 (0x2BFF0FC) не была принята по причине System.ArgumentException: Элемент с тем же ключом уже был добавлен.
   в System.ThrowHelper.ThrowArgumentException(ExceptionResource resource)
   в System.Collections.Generic.Dictionary`2.Insert(TKey key, TValue value, Boolean add)
   в System.Collections.Generic.Dictionary`2.Add(TKey key, TValue value)
   в Ecng.Collections.SynchronizedDictionary`2.Add(TKey key, TValue value)
   в StockSharp.Algo.Slippage.SlippageManager.ReRegistering(Order oldOrder, Order newOrder)
   в StockSharp.Algo.Strategies.Strategy.ReRegisterSlippage(Order oldOrder, Order newOrder)
   в StockSharp.Algo.Strategies.Strategy.#=qbIRUWiEU8CQqWDdjRkfgkvfps6OAx7vD2Kqx82Rxd2I=(Order #=qKmmNADXEA1y6G4xj6oHNDA==, Order #=qRatAMf_6Pq77ALgggiLSJg==)
   в StockSharp.Algo.Strategies.Strategy.#=qnMkTDK$vgFXAHD_jnQqUoemJ0xATFxaqCLg1EscWz7E=(Order #=qDdHQIfKqKsvs3l4L2CQFkw==, Order #=q93_Szosd58yZODoC0qE$DA==, Action`2 #=qILlzwmip4x798LunUOS2Uw==).

Дочернюю стратегию создаю так:


      var strategyChild = new MarketQuotingStrategy(dir, 1) { PriceOffset = 10 };
      strategyChild.LogLevel = LogLevels.Error;
      strategyChild.WaitAllTrades = true;
      strategyChild.OrderRegistered += (order) => { 
        Chart_DrawOrder(order); 
      };
      this.OrderRegisterFailed += (o) => {
        this._Log.Error(this.Name, "Order registering failed: " + o.Error.ToString());
      };
      strategyChild.NewMyTrades += (trades) =>
      {
        trades.ForEach((t) => Chart_DrawTrade(t.Trade));
      };

      this.ChildStrategies.Add(strategyChild);    

Здесь приходят сообщения NewMyTrades и OrderRegisterFailed, и у родительской стратегии приходят PnLChanged и PositionChanged. OrderRegistered не случается ни разу. На какой-то предыдущей версии S# этот код работал, но я не помню, на какой именно.

War dieses Thema hilfreich?

Thema teilen

Kommentare (1)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

pafnuty
pafnuty Autor

UPD. Сейчас прогнал на старых версиях: в версии S# 4.1.15 регистрация заявок в MarketQuotingStrategy работает нормально (выставление заявок через RegisterOrder не пробовал). Начиная с 4.1.16.1 не работает.