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


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


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# этот код работал, но я не помню, на какой именно.



Спасибо:




1 Ответов
pafnuty

Фотография
Программист
Дата: 10.09.2013
Ответить


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


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

loading
clippy