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

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


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

[code]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(IEnumerable1 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(IEnumerable1 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 Стратегия остановлена.[/code]

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

[code]private void OnNewMyTrades(IEnumerable 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;

}[/code]

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


Теги:


Спасибо:


<< < 5 6 7 
Евгений

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


[quote=Alexander;11683]Да, доступ по [] не поддерживается, уже обсуждалось.

По поводу кросс-заявок - поискал в гугле, наткнулся [url=http://stocksharp.com/forum/1490/Kross-zaiavki/]на наш же топик [/url] ну и как обычно [url=http://www.quik.ru/forum/quik/76339/76339/]на форуме квика[/url]. в общем проблема не со стороны S#.[/quote]

Я читал на форуме, но там реально ставится вопрос, когда есть заявка и выставляется еще одна. А у меня не было никаких противоположных, вообще никаких не было. Ну раз разработчики говорят что проблема не со стороны S#, значит тому и быть [smile]

А вот про защитные стратегии запутался.

Мне нужно было их удалять или останавливать. Выяснилось, что удалить не получится, нужно использовать метод Stop(). Я его использовал, но защитная стратегии создавала две заявки на продажу. Вы посоветовали:

Alexander;10250 написал: Евгений;10248 написал: Публиковал код и видимо случайно удалил собственно строчку - base.ChildStrategies[i].Stop(); Распечатайте ProcessState до и после этой строчки.

Я пытаюсь распечатать, но возникает ошибка System.NotSupportedException: Указанный метод не поддерживается.

А как тогда проверить, остановились ли стратегии?

Спасибо:

Serg

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


по поводу кроссзаявок может проблема быть на стороне брокера. у некоторых реализован механизм исполнения кросссделок между субсчетами, у некоторых нет(в основном у мелких)

Спасибо:

Alexander

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


[quote=Serg;11691]по поводу кроссзаявок может проблема быть на стороне брокера. у некоторых реализован механизм исполнения кросссделок между субсчетами, у некоторых нет(в основном у мелких)[/quote]

У того же Открытия 100% запрещены кросс-сделки по разным субсчетам. Сам с этим сталкивался пару раз. Лучше этот вопрос уточнить непосредственно у брокера - почему не прошла сделка.

Спасибо:

Евгений

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


[quote=Alexander;11692][quote=Serg;11691]по поводу кроссзаявок может проблема быть на стороне брокера. у некоторых реализован механизм исполнения кросссделок между субсчетами, у некоторых нет(в основном у мелких)[/quote]

У того же Открытия 100% запрещены кросс-сделки по разным субсчетам. Сам с этим сталкивался пару раз. Лучше этот вопрос уточнить непосредственно у брокера - почему не прошла сделка.[/quote]

Это демо-счет, но думаю есть смысл все-равно спросить.

Так, а как все-таки проверить останавливается стратегия или нет?

Спасибо:
<< < 5 6 7 

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

loading
clippy