Ошибка защитных стратегий - коллекция котировок пуста
Atom Ответить
19.04.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). Что я неправильно делаю?
Спасибо

Теги:


Спасибо:




64 Ответов
< 1 2 3 
Alexander

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


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


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


Не будет эксепшена во время клиринга на тему пустой коллекции.
Вам же ничего не надо делать, никаких проверок.
Спасибо:

Евгений

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


Получаю такой лог

Цитата:
IS 01.09.2011 10:43:20.104 Стратегия запущена.
IS 01.09.2011 15:30:00.125 Регистрация заявки - цена 167580, направление Buy, объем 5
IS 01.09.2011 15:30:00.447 Новая Limit заявка 38614866 на Buy с номером 1.
IS 01.09.2011 15:30:00.457 Новая Buy сделка 1 на 5 заявки 38614866.
IS 01.09.2011 15:30:00.471 Прошла сделка по цене 166745, объём 5, направление Buy.
IS 01.09.2011 15:30:00.525 Регистрация тейк-профит по цене 168194,99500
IS 01.09.2011 15:30:00.527 [BS] Стратегия запущена.
IS 01.09.2011 15:30:00.528 [BS] [BS] Стратегия запущена.
IS 01.09.2011 15:30:00.528 [BS] [BS] [TPS] Стратегия запущена.
IS 01.09.2011 15:34:50.512 [BS] [BS] [TPS] Стакан пустой.
IS 01.09.2011 16:11:56.261 [BS] [BS] [TPS] Регистрация новой заявки на Sell с ценой 167245 и объемом 5.
IS 01.09.2011 16:11:56.262 [BS] [BS] [TPS] Заявка 38614867 на Sell отправлена с ценой 167245 объемом 5.
IS 01.09.2011 16:11:57.264 [BS] [BS] [TPS] Новая Limit заявка 38614867 на Sell с номером 2.
IS 01.09.2011 16:11:57.264 [BS] [BS] Новая Limit заявка 38614867 на Sell с номером 2.
IS 01.09.2011 16:11:57.264 [BS] Новая Limit заявка 38614867 на Sell с номером 2.
IS 01.09.2011 16:11:57.264 Новая Limit заявка 38614867 на Sell с номером 2.
IS 01.09.2011 16:11:57.266 Новая Sell сделка 2 на 2 заявки 38614867.
IS 01.09.2011 16:11:57.267 Прошла сделка по цене 167250, объём 2, направление Sell.
IS 01.09.2011 16:11:57.267 [BS] Новая Sell сделка 2 на 2 заявки 38614867.
IS 01.09.2011 16:11:57.267 [BS] [BS] Новая Sell сделка 2 на 2 заявки 38614867.
IS 01.09.2011 16:11:57.267 [BS] [BS] [TPS] Новая Sell сделка 2 на 2 заявки 38614867.
IS 01.09.2011 16:11:57.269 [BS] [BS] [TPS] Позиция изменилась на -2.
IS 01.09.2011 16:11:58.264 Новая Sell сделка 3 на 1 заявки 38614867.
IS 01.09.2011 16:11:58.264 Прошла сделка по цене 167250, объём 1, направление Sell.
IS 01.09.2011 16:11:58.264 [BS] Новая Sell сделка 3 на 1 заявки 38614867.
IS 01.09.2011 16:11:58.264 [BS] [BS] Новая Sell сделка 3 на 1 заявки 38614867.
IS 01.09.2011 16:11:58.265 [BS] [BS] [TPS] Новая Sell сделка 3 на 1 заявки 38614867.
IS 01.09.2011 16:11:58.265 [BS] [BS] [TPS] Позиция изменилась на -3.
IS 01.09.2011 16:11:59.263 Новая Sell сделка 4 на 2 заявки 38614867.
IS 01.09.2011 16:11:59.263 Прошла сделка по цене 167255, объём 2, направление Sell.
IS 01.09.2011 16:11:59.263 Стратегия-1 остановлена
IS 01.09.2011 16:12:01.261 [BS] [BS] [TPS] Котируемая заявка 38614867 исполнилась.
IS 01.09.2011 16:12:01.262 [BS] [BS] [TPS] Регистрация новой заявки на Sell с ценой 167245 и объемом 5.
IS 01.09.2011 16:12:01.264 [BS] [BS] [TPS] Заявка 38614868 на Sell отправлена с ценой 167245 объемом 5.
IS 01.09.2011 16:12:02.264 [BS] [BS] [TPS] Новая Limit заявка 38614868 на Sell с номером 3.
IS 01.09.2011 16:12:02.264 [BS] [BS] Новая Limit заявка 38614868 на Sell с номером 3.
IS 01.09.2011 16:12:02.264 [BS] Новая Limit заявка 38614868 на Sell с номером 3.
IS 01.09.2011 16:12:02.264 Новая Limit заявка 38614868 на Sell с номером 3.


Я останавливаю защитную стратегию через метод Stop(), а она все равно продолжает выставлять заявку... Почему?
Автор топика
Спасибо:

Alexander

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


Евгений Перейти
Получаю такой лог

Цитата:
IS 01.09.2011 10:43:20.104 Стратегия запущена.
IS 01.09.2011 15:30:00.125 Регистрация заявки - цена 167580, направление Buy, объем 5
IS 01.09.2011 15:30:00.447 Новая Limit заявка 38614866 на Buy с номером 1.
IS 01.09.2011 15:30:00.457 Новая Buy сделка 1 на 5 заявки 38614866.
IS 01.09.2011 15:30:00.471 Прошла сделка по цене 166745, объём 5, направление Buy.
IS 01.09.2011 15:30:00.525 Регистрация тейк-профит по цене 168194,99500
IS 01.09.2011 15:30:00.527 [BS] Стратегия запущена.
IS 01.09.2011 15:30:00.528 [BS] [BS] Стратегия запущена.
IS 01.09.2011 15:30:00.528 [BS] [BS] [TPS] Стратегия запущена.
IS 01.09.2011 15:34:50.512 [BS] [BS] [TPS] Стакан пустой.
IS 01.09.2011 16:11:56.261 [BS] [BS] [TPS] Регистрация новой заявки на Sell с ценой 167245 и объемом 5.
IS 01.09.2011 16:11:56.262 [BS] [BS] [TPS] Заявка 38614867 на Sell отправлена с ценой 167245 объемом 5.
IS 01.09.2011 16:11:57.264 [BS] [BS] [TPS] Новая Limit заявка 38614867 на Sell с номером 2.
IS 01.09.2011 16:11:57.264 [BS] [BS] Новая Limit заявка 38614867 на Sell с номером 2.
IS 01.09.2011 16:11:57.264 [BS] Новая Limit заявка 38614867 на Sell с номером 2.
IS 01.09.2011 16:11:57.264 Новая Limit заявка 38614867 на Sell с номером 2.
IS 01.09.2011 16:11:57.266 Новая Sell сделка 2 на 2 заявки 38614867.
IS 01.09.2011 16:11:57.267 Прошла сделка по цене 167250, объём 2, направление Sell.
IS 01.09.2011 16:11:57.267 [BS] Новая Sell сделка 2 на 2 заявки 38614867.
IS 01.09.2011 16:11:57.267 [BS] [BS] Новая Sell сделка 2 на 2 заявки 38614867.
IS 01.09.2011 16:11:57.267 [BS] [BS] [TPS] Новая Sell сделка 2 на 2 заявки 38614867.
IS 01.09.2011 16:11:57.269 [BS] [BS] [TPS] Позиция изменилась на -2.
IS 01.09.2011 16:11:58.264 Новая Sell сделка 3 на 1 заявки 38614867.
IS 01.09.2011 16:11:58.264 Прошла сделка по цене 167250, объём 1, направление Sell.
IS 01.09.2011 16:11:58.264 [BS] Новая Sell сделка 3 на 1 заявки 38614867.
IS 01.09.2011 16:11:58.264 [BS] [BS] Новая Sell сделка 3 на 1 заявки 38614867.
IS 01.09.2011 16:11:58.265 [BS] [BS] [TPS] Новая Sell сделка 3 на 1 заявки 38614867.
IS 01.09.2011 16:11:58.265 [BS] [BS] [TPS] Позиция изменилась на -3.
IS 01.09.2011 16:11:59.263 Новая Sell сделка 4 на 2 заявки 38614867.
IS 01.09.2011 16:11:59.263 Прошла сделка по цене 167255, объём 2, направление Sell.
IS 01.09.2011 16:11:59.263 Стратегия-1 остановлена
IS 01.09.2011 16:12:01.261 [BS] [BS] [TPS] Котируемая заявка 38614867 исполнилась.
IS 01.09.2011 16:12:01.262 [BS] [BS] [TPS] Регистрация новой заявки на Sell с ценой 167245 и объемом 5.
IS 01.09.2011 16:12:01.264 [BS] [BS] [TPS] Заявка 38614868 на Sell отправлена с ценой 167245 объемом 5.
IS 01.09.2011 16:12:02.264 [BS] [BS] [TPS] Новая Limit заявка 38614868 на Sell с номером 3.
IS 01.09.2011 16:12:02.264 [BS] [BS] Новая Limit заявка 38614868 на Sell с номером 3.
IS 01.09.2011 16:12:02.264 [BS] Новая Limit заявка 38614868 на Sell с номером 3.
IS 01.09.2011 16:12:02.264 Новая Limit заявка 38614868 на Sell с номером 3.


Я останавливаю защитную стратегию через метод Stop(), а она все равно продолжает выставлять заявку... Почему?


А что за Стратегия-1?
Покажите где и как останавливаете.
Какая версия S#?
Спасибо:

Евгений

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


Версия 3.2.10

Код
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);
            }

            // смотрим последнюю сделку, следующая должна быть противоположная
            if (trades.Last().Order.IsMatched() && trades.Last().Order.Direction == OrderDirections.Buy)
            {
                CurrentDirection = OrderDirections.Sell;

            }
            else if (trades.Last().Order.IsMatched() && trades.Last().Order.Direction == OrderDirections.Sell)
            {
                CurrentDirection = OrderDirections.Buy;

                for (int i = 0; i < base.ChildStrategies.Count; i++)
                {
                    AddLog(StrategyErrorStates.None, "Стратегия-{0} остановлена", i+1); 
                    base.ChildStrategies[i].Stop();
                }
                return;
            }
...
Автор топика
Спасибо:

Евгений

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


Публиковал код и видимо случайно удалил собственно строчку - base.ChildStrategies[i].Stop();
Автор топика
Спасибо:

Alexander

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


Евгений Перейти
Публиковал код и видимо случайно удалил собственно строчку - base.ChildStrategies[i].Stop();


Распечатайте ProcessState до и после этой строчки.
Спасибо:

Евгений

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


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


Распечатайте ProcessState до и после этой строчки.


Чего то, так и не получилось отловить это место. Но вот при отработке тейк-профита один раз, он потом отрабатывает еще раз. Может я что-то не так делаю(

Вот лог:

Цитата:
IS 26.09.2011 09:36:16.750 Стратегия запущена.
IS 26.09.2011 13:30:01.062 Регистрация заявки - цена 130140, направление Buy, объем 1
IS 26.09.2011 13:30:02.312 Новая Limit заявка 35415266 на Buy с номером 910341082.
IS 26.09.2011 13:30:07.921 Новая Buy сделка 33476407 на 1 заявки 35415266.
IS 26.09.2011 13:30:08.296 Прошла сделка по цене 128595, объём 1, направление Buy.
IS 26.09.2011 13:30:08.296 Смена направления на Sell
IS 26.09.2011 13:30:08.484 Регистрация тейк-профит по цене 133433,64000
IS 26.09.2011 13:30:08.500 [BS] Стратегия запущена.
IS 26.09.2011 13:30:08.500 [BS] [BS] Стратегия запущена.
IS 26.09.2011 13:30:08.500 [BS] [BS] [TPS] Стратегия запущена.
IS 26.09.2011 13:32:19.218 [BS] [BS] [TPS] Регистрация новой заявки на Sell с ценой 130095 и объемом 1.
IS 26.09.2011 13:32:19.828 [BS] [BS] [TPS] Заявка 35415267 на Sell отправлена с ценой 130095 объемом 1.
IS 26.09.2011 13:32:19.828 [BS] [BS] [TPS] Новая Limit заявка 35415267 на Sell с номером 910360134.
IS 26.09.2011 13:32:19.828 [BS] [BS] Новая Limit заявка 35415267 на Sell с номером 910360134.
IS 26.09.2011 13:32:19.828 [BS] Новая Limit заявка 35415267 на Sell с номером 910360134.
IS 26.09.2011 13:32:19.828 Новая Limit заявка 35415267 на Sell с номером 910360134.
IS 26.09.2011 13:45:29.765 [BS] [BS] [TPS] Котируемая заявка 35415267 исполнилась.
IS 26.09.2011 13:45:29.765 [BS] [BS] [TPS] Регистрация новой заявки на Sell с ценой 130095 и объемом 1.
IS 26.09.2011 13:45:31.578 [BS] [BS] [TPS] Заявка 35415268 на Sell отправлена с ценой 130095 объемом 1.
IS 26.09.2011 13:45:31.578 [BS] [BS] [TPS] Заканчиваем котирование с неисполненным объемом равный 0.
IS 26.09.2011 13:45:31.578 [BS] Стратегия останавливается.
IS 26.09.2011 13:45:31.593 [BS] [BS] Стратегия останавливается.
IS 26.09.2011 13:45:31.593 [BS] [BS] [TPS] Позиция изменилась на -1.
IS 26.09.2011 13:45:31.593 [BS] [BS] [TPS] Заканчиваем котирование с неисполненным объемом равный 0.
IS 26.09.2011 13:45:31.593 [BS] [BS] [TPS] Заканчиваем котирование с неисполненным объемом равный 0.
IS 26.09.2011 13:45:31.593 Новая Sell сделка 33484400 на 1 заявки 35415267.
IS 26.09.2011 13:45:31.593 Прошла сделка по цене 130095, объём 1, направление Sell.
IS 26.09.2011 13:45:31.593 Смена направления на Buy
IS 26.09.2011 13:45:31.625 [BS] [BS] [TPS] Стратегия останавливается.
IS 26.09.2011 13:45:31.625 [BS] [BS] [TPS] Заканчиваем котирование с неисполненным объемом равный 0.
IS 26.09.2011 13:45:31.640 [BS] Стратегия остановлена.


А вот код:
Код
 foreach (var trade in trades)
            {
                AddLog(StrategyErrorStates.None, "Прошла сделка по цене {0}, объём {1}, направление {2}.",
                       trade.Trade.Price, trade.Trade.Volume, trade.Order.Direction);
            }

            // смотрим последнюю сделку, следующая должна быть противоположная
            if (trades.Last().Order.IsMatched() && trades.Last().Order.Direction == OrderDirections.Buy)
            {
                CurrentDirection = OrderDirections.Sell;
                AddLog(StrategyErrorStates.None, "Смена направления на {0}",  OrderDirections.Sell);

            }
            else if (trades.Last().Order.IsMatched() && trades.Last().Order.Direction == OrderDirections.Sell)
            {
                CurrentDirection = OrderDirections.Buy;
                 AddLog(StrategyErrorStates.None, "Смена направления на {0}",  OrderDirections.Buy);

                for (int i = 0; i < base.ChildStrategies.Count; i++)
                {
                    AddLog(StrategyErrorStates.None, "Состояние алгоритма: {0}", ChildStrategies[i].ProcessState);
                    base.ChildStrategies[i].Stop();
                    AddLog(StrategyErrorStates.None, "Состояние алгоритма: {0}", ChildStrategies[i].ProcessState);
                    AddLog(StrategyErrorStates.None, "Стратегия - {0} остановлена", i);
                }
                return;
            }

            // фильтруем сделки, чтобы найти те, которые произошли для заявки TargetOrder// сделать проверку не на последнюю                    заявку а на все заявки которые
            trades = trades.Where(t => t.Order == _order);

            // если не найдена ни одна сделка для заявки TargetOrder
            if (trades.Count() == 0)
                return;

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

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

                var s = new BatchStrategy(BatchFinishModes.First);

                // выставляет тейк-профит в N пунктов
                var takeProfit = new TakeProfitStrategy(t, _takeDelta);

                takeProfit.PriceOffset =  _priceDelta;

                s.ChildStrategies.Add(takeProfit);
               

               
AddLog(StrategyErrorStates.None, "Регистрация тейк-профит по цене {0}", t.Trade.Price + ((decimal)takeProfit.ProtectiveDelta).Points(Security));

                return s;

            }).Cast<Strategy>());



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


Автор топика
Спасибо:

Alexander

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


Какая версия? Если не 4.0.0 - попробуйте её.
Спасибо:

Евгений

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


Alexander Перейти
Какая версия? Если не 4.0.0 - попробуйте её.


Попробовал 4.0.0

Получил такой лог:

Цитата:

12:40:01.540 | | IS | Регистрация заявки - цена 137550, направление Buy, объем 1
12:40:02.118 | | QuikTrader | RegisterOrder: TransactionId=42266635, Id=0, Price=137550, Balance=1, Security=RIZ1@RTS, State=None
12:40:09.947 | Error | IS | Заявка 42266635 не была принята по причине StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Обработка кросс-заявок блокирована..
14:00:57.306 | Error | QuikTrader | StockSharp.Quik.ApiException: Код ошибки QuikDisconnected Сообщение Timeout has expired. Connection with server was lost.: Can't get data from net
14:30:00.556 | | IS | Регистрация заявки - цена 136405, направление Buy, объем 1
14:30:00.556 | | QuikTrader | RegisterOrder: TransactionId=42266636, Id=0, Price=136405, Balance=1, Security=RIZ1@RTS, State=None
14:30:02.447 | | QuikTrader | New order: TransactionId=42266636, Id=921107262, Price=136405, Balance=1, Security=RIZ1@RTS, State=Active
14:30:02.462 | | IS | Обработка Limit заявки 42266636 на Buy с номером 921107262.
14:30:05.150 | | IS | Новая Buy сделка 34183750 на 1 заявки 42266636.
14:30:06.322 | | IS | Прошла сделка по цене 134890, объём 1, направление Buy.
14:30:06.322 | | IS | Смена направления на Sell
14:30:06.853 | | IS | Регистрация тейк-профит по цене 139662,14500
14:30:06.884 | | BS | Стратегия запущена.
14:30:06.884 | | BS | Стратегия запущена.
14:30:06.900 | | TPS | Стратегия запущена.
14:39:15.962 | | TPS | Регистрация новой заявки на Sell с ценой 136390 и объемом 1.
14:39:15.962 | | QuikTrader | RegisterOrder: TransactionId=42266637, Id=0, Price=136390, Balance=1, Security=RIZ1@RTS, State=None
14:39:15.978 | | TPS | Заявка 42266637 на Sell отправлена с ценой 136390 объемом 1.
14:39:28.525 | | QuikTrader | New order: TransactionId=42266637, Id=921193929, Price=136390, Balance=1, Security=RIZ1@RTS, State=Active
14:39:28.525 | | IS | Обработка Limit заявки 42266637 на Sell с номером 921193929.
14:39:28.525 | | BS | Обработка Limit заявки 42266637 на Sell с номером 921193929.
14:39:28.525 | | BS | Обработка Limit заявки 42266637 на Sell с номером 921193929.
14:39:28.525 | | TPS | Обработка Limit заявки 42266637 на Sell с номером 921193929.
14:40:00.540 | | IS | Регистрация заявки - цена 134470, направление Sell, объем 1
14:40:00.540 | | QuikTrader | RegisterOrder: TransactionId=42266638, Id=0, Price=134470, Balance=1, Security=RIZ1@RTS, State=None
14:40:00.790 | | QuikTrader | New order: TransactionId=42266638, Id=921198299, Price=134470, Balance=1, Security=RIZ1@RTS, State=Active
14:40:00.790 | | IS | Обработка Limit заявки 42266638 на Sell с номером 921198299.
14:40:00.790 | | BS | Обработка Limit заявки 42266638 на Sell с номером 921198299.
14:40:00.790 | | BS | Обработка Limit заявки 42266638 на Sell с номером 921198299.
14:40:00.790 | | TPS | Обработка Limit заявки 42266638 на Sell с номером 921198299.
14:40:01.243 | | IS | Новая Sell сделка 34189748 на 1 заявки 42266638.
14:40:01.243 | | IS | Прошла сделка по цене 136025, объём 1, направление Sell.
14:40:01.243 | | IS | Смена направления на Buy
14:40:02.134 | Error | QuikTrader | System.NotSupportedException: Указанный метод не поддерживается.
в Ecng.Collections.SynchronizedSet`1.System.Collections.Generic.IList<T>.get_Item(Int32 index)
в Ecng.Collections.BaseCollection`1.get_Item(Int32 index)
в TradeRobot.IchimokuStrategy.OnNewMyTrades(IEnumerable`1 trades) в H:\TradeRobotSolution 4.0\TradeRobot\MyStrategy.cs:строка 209
в System.Action`1.Invoke(T obj)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
в StockSharp.Algo.Strategies.Strategy.#=q4aYKIR_shp5NHqgzui2yjSiMQj6OnWcsqXpCqw$0TSs=.#=qUN4dTy0D$yWzMqXMYOyIzOGb0NO2m0JoC0mxtYcsqq4=()
в StockSharp.Algo.Strategies.Strategy.#=qMZYPf9u7uP2NRMimEzapIQsbp7gI6K74kRwappSKbFM=.#=qPOx$JNNJztWOnRSqeoIpvLLRyOiLkvdOqxlU5DAolyM=()
в StockSharp.Algo.Strategies.Strategy.#=qzJ7m9KFjZ1WqVms6QEq6_6T$Gaq8aw80RBw_WGhTPEU=.#=q47bR6lcS4ei5X2OKex$vnQ==(Action #=qM3Fd0SMPkkLJWAsGEgeygw==)
в StockSharp.Algo.Strategies.Strategy.#=qZfkIqus2dTp7a$POMInw9A==(Action #=qzUkVfdoXgIXxwFMdCxJ5sA==)
в StockSharp.Algo.Strategies.Strategy.#=qkgZFPxGi$ECujYjIxJexEA==(IEnumerable`1 #=qXiyWeOs_EO9eZL6ijCw2qA==)
в StockSharp.Algo.Strategies.Strategy.#=qR49GOF64tx2pb9GEYZHDCg==(IEnumerable`1 #=q$juWwa3sx8fN96bb69hLiA==)
в System.Action`1.Invoke(T obj)
в Ecng.Common.DelegateHelper.SafeInvoke[T](Action`1 handler, T arg)
в StockSharp.Algo.BaseTrader.#=qdkcJ1z_5G_9v8kyPHSiXH2QUl6vo_RX4HfOmcsOgXGs=.#=qYoX9dfq6NfczbKi_skOY4w==(IEnumerable`1 #=qLjzF$t5RARnMfwEZijwylw==)
14:54:08.009 | | IS | Новая Sell сделка 34196852 на 1 заявки 42266637.
14:54:08.009 | | IS | Прошла сделка по цене 136390, объём 1, направление Sell.
14:54:08.009 | | BS | Новая Sell сделка 34196852 на 1 заявки 42266637.
14:54:08.009 | | BS | Новая Sell сделка 34196852 на 1 заявки 42266637.
14:54:08.009 | | TPS | Новая Sell сделка 34196852 на 1 заявки 42266637.
14:54:08.087 | | TPS | Позиция изменилась на -1.
14:54:08.087 | | TPS | Заканчиваем котирование с неисполненным объемом равный 0.
14:54:08.118 | | BS | Стратегия останавливается.
14:54:08.134 | | BS | Стратегия останавливается.
14:54:08.134 | | TPS | Стратегия останавливается.
14:54:08.134 | | TPS | Заканчиваем котирование с неисполненным объемом равный 0.
14:54:08.150 | | TPS | Заканчиваем котирование с неисполненным объемом равный 0.
14:54:08.165 | | BS | Стратегия остановлена.


Не понятно происхождение ошибки связанной с кросс-заявкой, на момент выставления заявки 12:40:02.118 никаких других заявок не было в квике, почему так происходит?

Вторая ошибка возникла в этом участке кода:

Код
 // смотрим последнюю сделку, следующая должна быть противоположная
            if (trades.Last().Order.IsMatched() && trades.Last().Order.Direction == OrderDirections.Buy)
            {
                CurrentDirection = OrderDirections.Sell;
                AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None,  "Смена направления на {0}",  OrderDirections.Sell));

            }
            else if (trades.Last().Order.IsMatched() && trades.Last().Order.Direction == OrderDirections.Sell)
            {
                CurrentDirection = OrderDirections.Buy;
                 AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None, "Смена направления на {0}",  OrderDirections.Buy));

                for (int i = 0; i < base.ChildStrategies.Count; i++)
                {
                    AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None,  "Состояние алгоритма: {0}", ChildStrategies[i].ProcessState));
                    base.ChildStrategies[i].Stop();
                    AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None,  "Состояние алгоритма: {0}", ChildStrategies[i].ProcessState));
                    AddLog(new LogMessage(this, DateTime.Now, ErrorTypes.None,  "Стратегия - {0} остановлена", i));
                }
                return;
            }


Получается ошибка возникла либо в ChildStrategies[i].ProcessState, либо base.ChildStrategies[i].Stop();

Собственно может из-за того, что вы писали "Да, нет доступа по [] и GetItem не поддерживается..."
Автор топика
Спасибо:

Alexander

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


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

По поводу кросс-заявок - поискал в гугле, наткнулся на наш же топик ну и как обычно на форуме квика.
в общем проблема не со стороны S#.
Спасибо:

Евгений

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


Alexander Перейти
Да, доступ по [] не поддерживается, уже обсуждалось.

По поводу кросс-заявок - поискал в гугле, наткнулся на наш же топик ну и как обычно на форуме квика.
в общем проблема не со стороны S#.


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

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

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

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

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

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


Автор топика
Спасибо:

Serg

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


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

Alexander

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


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


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

Евгений

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


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


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


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

Так, а как все-таки проверить останавливается стратегия или нет?
Автор топика
Спасибо:
< 1 2 3 

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

loading
clippy