Ошибка защитных стратегий - коллекция котировок пуста

Ошибка защитных стратегий - коллекция котировок пуста
Atom
4/19/2011
Евгений


Выводится в логи следующая ошибка (правильно я понял, что логируется только то, что описывается через AddLog()) :

IS_01:00:10 10:12:00.1564059 Стратегия запущена.
IS_01:00:10 16:00:01.3877441 Регистрация заявки - цена 193245, направление Buy, объем 5
IS_01:00:10 16:00:02.9208318 Прошла сделка по цене 192375, объём 5, направление Buy.
IS_01:00:10 16:00:02.9618341 Регистрация стоп-лосс по цене 190550
IS_01:00:10 16:00:02.9618341 Регистрация тейк-профит по цене 192640
BS 16:00:02.9628342 Стратегия запущена.
BS 16:00:02.9628342 Стратегия запущена.
TPS 16:00:02.9628342 Стратегия запущена.
SLS 16:00:02.9628342 Стратегия запущена.
TPS 18:45:25.8543911 [h]System.ArgumentException: Коллекция котировок пуста.
Имя параметра: quotes
   в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(IEnumerable`1 quotes, Order currentOrder)
   в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(MarketDepth depth, OrderDirections orderDirection, Order currentOrder)
   в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(Security security, OrderDirections orderDirection, Order currentOrder)
   в Ecng.Trading.Algo.Strategies.ProtectiveStrategy.GetNewPrice()
   в Ecng.Trading.Algo.Strategies.TakeProfitStrategy.CanRegister()
   в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
   в Ecng.Trading.Algo.Strategies.Strategy.#=qnMN_PMdUfHysEK$_tfQ8grn_QTjzOIMGPiv$tYCH2Bw=.#=q3rD2zIrUx4ViUbhRH66B2w==()[/h]
TPS 18:45:25.8543911 Стратегия останавливается.
SLS 18:45:25.8543911 System.ArgumentException: Коллекция котировок пуста.
Имя параметра: quotes
   в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(IEnumerable`1 quotes, Order currentOrder)
   в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(MarketDepth depth, OrderDirections orderDirection, Order currentOrder)
   в Ecng.Trading.Algo.TraderHelper.GetFilteredQuotes(Security security, OrderDirections orderDirection, Order currentOrder)
   в Ecng.Trading.Algo.Strategies.ProtectiveStrategy.GetNewPrice()
   в Ecng.Trading.Algo.Strategies.StopLossStrategy.CanRegister()
   в Ecng.Trading.Algo.Strategies.QuotingStrategy.OnProcess()
   в Ecng.Trading.Algo.Strategies.Strategy.#=qnMN_PMdUfHysEK$_tfQ8grn_QTjzOIMGPiv$tYCH2Bw=.#=q3rD2zIrUx4ViUbhRH66B2w==()
SLS 18:45:25.8543911 Стратегия останавливается.
TPS 18:45:26.8554483 Котирование закончилось.
TPS 18:45:26.8564484 Стратегия остановлена.
SLS 18:45:26.8574485 Котирование закончилось.
SLS 18:45:26.8574485 Стратегия остановлена.
BS 18:45:26.8794497 Стратегия останавливается.
BS 18:45:27.8795069 Стратегия остановлена.
BS 18:45:27.8795069 Стратегия останавливается.
BS 18:45:28.8795641 Стратегия остановлена.

Стратегии регистрирую как в примере:

private void OnNewMyTrades(IEnumerable<MyTrade> trades)
        {
             foreach (var trade in trades)
            {
                AddLog(StrategyErrorStates.None, "Прошла сделка по цене {0}, объём {1}, направление {2}.",
                    trade.Trade.Price, trade.Trade.Volume, trade.Order.Direction);
            }
// фильтруем сделки, чтобы найти те, которые произошли для заявки TargetOrder// сделать проверку не на последнюю заявку а на все заявки которые
            trades = trades.Where(t => t.Order == TargetOrder);
           
            // если не найдена ни одна сделка для заявки TargetOrder
            if (trades.Count() == 0)
                return;

            // сама пакетная стратегия так же является параллельной, чтобы она не блокирована основной код робота
            var batch = new BatchStrategy(BatchFinishModes.All) { IsParallel = true };

            // для каждой сделки добавляем для защиты по пакетной стратегии
            batch.ChildStrategies.AddRange(trades.Select(t =>
            {

                var s = new BatchStrategy(BatchFinishModes.First) { IsParallel = true };

                // выставляет тейк-профит в N пунктов
                var takeProfit = new TakeProfitStrategy(t,new Unit((decimal)Fractal.Up) + _takeDelta.Pips(Security));
                
                // выставляет стоп-лосс в M пунктов
                var stopLoss = new StopLossStrategy(t, new Unit((decimal)Fractal.Down) - _stopDelta.Pips(Security));

                takeProfit.PriceDelta=stopLoss.PriceDelta = _priceDelta;
               
                // делаем стратегии параллельными, чтобы они не блокировали работу контролирующей BatchStrategy
                takeProfit.IsParallel = stopLoss.IsParallel = true;

                s.ChildStrategies.Add(takeProfit);
                s.ChildStrategies.Add(stopLoss);

                AddLog(StrategyErrorStates.None, "Регистрация стоп-лосс по цене {0}", stopLoss.ProtectiveDelta);
                AddLog(StrategyErrorStates.None, "Регистрация тейк-профит по цене {0}", takeProfit.ProtectiveDelta);

                return s;
            }).Cast<Strategy>());

            if (batch.ChildStrategies.Count > 0)
            {
                base.ChildStrategies.Add(batch);
            }
            TargetOrder = null;
}

Заявки выставляю лимитированные через base.RegisterOrder(order).Процесс получения стакана происходит - _trader.RegisterQuotes(_strategy.Security). Что я неправильно делаю? Спасибо


Tags:


Thanks:


<< < 3 4 5 6 7  >
Евгений

Avatar
Date: 8/18/2011
Reply


Alexander:

Евгений:

Alexander: Да, нет доступа по [] и GetItem не поддерживается. А сильно надо?

Собственно задача в том, чтобы защитные стратегии выставленные при покупке удалить после сделки продажи на основе сигнала. Может как-то это можно сделать по другому?

Так они автоматом удаляются :)

Ситуация. Сигнал на покупку. Покупка. Создание защитной стратегии. Сигнал на продажу (защитная стратегия не начала свою работу). Продажа. В такой ситуации защитная стратегия автоматически удаляется?

А еще я получил такой лог, но может он уже не актуальный (в.3.2.7). Тут защитная стратегия продолжает свою работу несколько раз.

IS 16.08.2011 10:34:37.134 Стратегия запущена. IS 16.08.2011 17:30:01.313 Регистрация заявки - цена 162565, направление Buy, объем 3 IS 16.08.2011 17:30:02.234 Новая Limit заявка 38070639 на Buy с номером 1. IS 16.08.2011 17:30:02.468 Новая Buy сделка 1 на 3 заявки 38070639. IS 16.08.2011 17:30:02.903 Прошла сделка по цене 161715, объём 3, направление Buy. IS 16.08.2011 17:30:03.094 Регистрация стоп-лосс по цене 160277,87500 IS 16.08.2011 17:30:03.094 Регистрация тейк-профит по цене 163152,12500 IS 16.08.2011 17:30:03.122 [BS] Стратегия запущена. IS 16.08.2011 17:30:03.132 [BS] [BS] Стратегия запущена. IS 16.08.2011 17:30:03.132 [BS] [BS] [MTPS] Стратегия запущена. IS 16.08.2011 17:30:03.141 [BS] [BS] [MSLS] Стратегия запущена. IS 16.08.2011 17:36:01.087 [BS] [BS] [MTPS] Регистрация новой заявки на Sell с ценой 162215 и объемом 3. IS 16.08.2011 17:36:01.089 [BS] [BS] [MTPS] Заявка 38070640 на Sell отправлена с ценой 162215 объемом 3. IS 16.08.2011 17:36:02.097 [BS] [BS] [MTPS] Новая Limit заявка 38070640 на Sell с номером 2. IS 16.08.2011 17:36:02.097 [BS] [BS] Новая Limit заявка 38070640 на Sell с номером 2. IS 16.08.2011 17:36:02.097 [BS] Новая Limit заявка 38070640 на Sell с номером 2. IS 16.08.2011 17:36:02.098 Новая Limit заявка 38070640 на Sell с номером 2. IS 16.08.2011 17:36:02.098 Новая Sell сделка 2 на 3 заявки 38070640. IS 16.08.2011 17:36:02.099 Прошла сделка по цене 162270, объём 3, направление Sell. IS 16.08.2011 17:40:37.909 [BS] [BS] [MTPS] Котируемая заявка 38070640 исполнилась. IS 16.08.2011 17:40:37.910 [BS] [BS] [MTPS] Регистрация новой заявки на Sell с ценой 162215 и объемом 3. IS 16.08.2011 17:40:37.911 [BS] [BS] [MTPS] Заявка 38070641 на Sell отправлена с ценой 162215 объемом 3. IS 16.08.2011 17:40:38.924 [BS] [BS] [MTPS] Новая Limit заявка 38070641 на Sell с номером 3. IS 16.08.2011 17:40:38.924 [BS] [BS] Новая Limit заявка 38070641 на Sell с номером 3. IS 16.08.2011 17:40:38.924 [BS] Новая Limit заявка 38070641 на Sell с номером 3. IS 16.08.2011 17:40:38.924 Новая Limit заявка 38070641 на Sell с номером 3. IS 16.08.2011 17:49:33.358 [BS] [BS] [MSLS] Регистрация новой заявки на Sell с ценой 161215 и объемом 3. IS 16.08.2011 17:49:33.358 [BS] [BS] [MSLS] Заявка 38070642 на Sell отправлена с ценой 161215 объемом 3. IS 16.08.2011 17:49:34.370 [BS] [BS] [MSLS] Новая Limit заявка 38070642 на Sell с номером 4. IS 16.08.2011 17:49:34.370 [BS] [BS] Новая Limit заявка 38070642 на Sell с номером 4. IS 16.08.2011 17:49:34.370 [BS] Новая Limit заявка 38070642 на Sell с номером 4. IS 16.08.2011 17:49:34.370 Новая Limit заявка 38070642 на Sell с номером 4. IS 16.08.2011 17:49:43.497 Новая Sell сделка 3 на 3 заявки 38070642. IS 16.08.2011 17:49:43.500 Прошла сделка по цене 161215, объём 3, направление Sell. IS 16.08.2011 17:51:16.790 [BS] [BS] [MSLS] Котируемая заявка 38070642 исполнилась. IS 16.08.2011 17:51:16.790 [BS] [BS] [MSLS] Регистрация новой заявки на Sell с ценой 161215 и объемом 3. IS 16.08.2011 17:51:16.792 [BS] [BS] [MSLS] Заявка 38070643 на Sell отправлена с ценой 161215 объемом 3. IS 16.08.2011 17:51:17.802 [BS] [BS] [MSLS] Новая Limit заявка 38070643 на Sell с номером 5. IS 16.08.2011 17:51:17.802 [BS] [BS] Новая Limit заявка 38070643 на Sell с номером 5. IS 16.08.2011 17:51:17.802 [BS] Новая Limit заявка 38070643 на Sell с номером 5. IS 16.08.2011 17:51:17.802 Новая Limit заявка 38070643 на Sell с номером 5.

Thanks:

Евгений

Avatar
Date: 8/19/2011
Reply


Так защитная стратегия автоматически удаляется после сделки на продажу, даже если не сработала?

Thanks:

Mikhail Sukhov

Avatar
Date: 8/20/2011
Reply


Евгений: Так защитная стратегия автоматически удаляется после сделки на продажу, даже если не сработала?

Защитная стратегия (пара СЛ + ТП) удаляется тогда, когда одна из них закончила свою работу (выставила заявку и по ней была совершена сделка).

Thanks:

Евгений

Avatar
Date: 8/20/2011
Reply


Mikhail Sukhov:

Евгений: Так защитная стратегия автоматически удаляется после сделки на продажу, даже если не сработала?

Защитная стратегия (пара СЛ + ТП) удаляется тогда, когда одна из них закончила свою работу (выставила заявку и по ней была совершена сделка).

Ну значит я все правильно понял. Так а ак тогда удалить стратегию если она не закончила свою работу?

Thanks:

Mikhail Sukhov

Avatar
Date: 8/20/2011
Reply


Евгений: Ну значит я все правильно понял. Так а ак тогда удалить стратегию если она не закончила свою работу?

Остановить ее через метод Stop.

Thanks:

Евгений

Avatar
Date: 8/21/2011
Reply


Mikhail Sukhov:

Евгений: Ну значит я все правильно понял. Так а ак тогда удалить стратегию если она не закончила свою работу?

Остановить ее через метод Stop.

Ну она же в коллекции останется?

У меня идет проверка для защитных стратегий, чтобы они в не торговое время отключались, а в торговое включались. Получается включатся все стратегии в коллекции, когда нужны только последние.

Thanks:

Alexander

Avatar
Date: 8/21/2011
Reply


Евгений:

Mikhail Sukhov:

Евгений: Ну значит я все правильно понял. Так а ак тогда удалить стратегию если она не закончила свою работу?

Остановить ее через метод Stop.

Ну она же в коллекции останется?

У меня идет проверка для защитных стратегий, чтобы они в не торговое время отключались, а в торговое включались. Получается включатся все стратегии в коллекции, когда нужны только последние.

Запомните какие стратегии надо включать, какие - нет. Зачем отключать стратегии в не торговое время?

Thanks:

Евгений

Avatar
Date: 8/21/2011
Reply


Alexander: Запомните какие стратегии надо включать, какие - нет. Зачем отключать стратегии в не торговое время?

Ну как я понял защитные стратегии продолжают работать во время клиринга, собственно, когда стакан пуст. И возникает ошибка, о чем я писал выше.

TPS 14:11:52.7958984 System.ArgumentException: Коллекция котировок пуста. Имя параметра: quotes.....

Защитные стратегии могут работать без использования стакана?

Thanks:

Alexander

Avatar
Date: 8/22/2011
Reply


Исправил, такой ошибки больше не будет. Спасибо за фидбэк

Thanks:

Евгений

Avatar
Date: 8/22/2011
Reply


Alexander: Исправил, такой ошибки больше не будет. Спасибо за фидбэк

Пожалуйста [smile] Так, а как мне быть с проверкой? Что конкретно вы исправили?

Thanks:
<< < 3 4 5 6 7  >

Attach files by dragging & dropping, , or pasting from the clipboard.

loading
clippy