StopLossStrategy - как заставить ее работать как нужно мне?
Atom Ответить
16.08.2012


Здравствуйте. Помогите, пожалуйста, рассеять недоумение (документацию читал, ответа не нашел).

Есть сделка - фьючерс на Сбер, продажа по цене 9384. На этот трейд ставится StopLossStrategy с абсолютной ценой 9386. И садимся наблюдать за логами и графиками.

Код:

Код

MarketQuotingStrategy seller = new MarketQuotingStrategy(OrderDirections.Sell, Math.Min(base.Volume, m_depth.BestBid.Volume))
{
    PriceType = MarketPriceTypes.Opposite
};

seller.NewMyTrades += (IEnumerable<MyTrade> trades) =>
{
    foreach(MyTrade t in trades)
    {
        decimal stop = t.Trade.Price + 2;
        StopLossStrategy sl = new StopLossStrategy(t, new Unit(stop, UnitTypes.Limit)); // Указываем значение цены стопа, а не отступ
        base.ChildStrategies.Add(sl);
    }
};

base.ChildStrategies.Add(seller);


Трейдер - эмулятор Квика.

Код

m_trader = new RealTimeEmulationTrader<GuiTrader<QuikTrader>>(new QuikTrader().GuiSyncTrader());


1. Во время жизни позиции было несколько сделок по цене 9386. Стоп не сработал. Стратегия начала работу только после сделки по цене 9387. С моей точки зрения это неправильно - стоп должен срабатывать при сделке по заданной цене, а не по цене выше.

2. После срабатывания стопа, SL стратегия выставила ордер Buy по цене 9386. То есть по цене бида. Это уже совсем неправильно. Потому что дальше цена пошла вверх, и ордер висел до тех пор, пока цена не откатилась назад до 9386. А если бы не откатилась? SL стратегия должна была выставить приказ по аску, чтобы немедленно закрыть позицию, и в дальнейшем (если не все закрылось) - передвигать ордер по аскам выше, до закрытия позиции.

Вот лог:

Код
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.587 |            | Стратегия запущена.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.603 |            | Котирование на Sell объема 1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.618 |            | Приостановка правил. _rulesSuspendCount 1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.650 |            | Возобновление правил. _rulesSuspendCount 0.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.665 |            | Цена текущей NULL и лучшей 9384.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.665 |            | Лучший бид 9384 и лучший аск 9386.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.681 |            | Регистрация новой заявки на Sell с ценой 9384 и объемом 1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.712 |            | Заявка 76852280 на Sell отправлена с ценой 9384 объемом 1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.712 | Внимание   | Заявка 76852280 в процессе регистрации.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.728 |            | Заявка 76852280 принята биржей.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.759 |            | Новая Sell сделка 1 по цене 9384 на 1 заявки 76852280.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.774 |            | Прибыль 0
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.774 |            | Новая Sell сделка 1 по цене 9384 на 1 заявки 76852280.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.790 | Внимание   | Добавляем SL для сделки на ПРОДАЖУ по 9384 на уровне 9386
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.806 |            | Стратегия запущена.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.852 |            | Защита сделки 1 заявки 76852280.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.852 |            | Котирование на Buy объема 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.884 |            | Приостановка правил. _rulesSuspendCount 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.884 |            | Возобновление правил. _rulesSuspendCount 0.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.899 |            | Новая позиция -1.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.915 |            | Заявка 76852280 полностью исполнилась. Оставшийся объем 0.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.930 |            | Заканчиваем котирование.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.946 |            | Стратегия останавливается.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.962 |            | Ожидание снятия всех активных заявок.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.977 |            | Нет активных или ожидаемых заявок на вход.
MQS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:23:28.993 |            | Стратегия остановлена.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 |            | Защита активирована.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 |            | Цена текущей NULL и лучшей 9386.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 |            | Лучший бид 9386 и лучший аск 9387.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 |            | Регистрация новой заявки на Buy с ценой 9386 и объемом 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.701 |            | Заявка 76852281 на Buy отправлена с ценой 9386 объемом 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:30:05.748 |            | Заявка 76852281 принята биржей.
FS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 21:41:28.173 |            | Новая Buy сделка 2 по цене 9386 на 1 заявки 76852281.


Отсюда вопросы.

1. Как сделать, чтобы SL стратегия срабатывала именно тогда, когда происходит сделка по указанной цене. А не тогда, когда рынок уехал дальше.
2. Как сделать, чтобы SL стратегия выставляла заявки по правильным ценам - по аскам, если надо откупить, и по бидам, если надо продать. И при этом еще следила за стаканом, передвигая заявки до исполнения всего объема. В крайнем случае - как указать проскальзывание от цены стопа?

Фактически я хочу, чтобы все работало как в Квике, а, если возможно, то и лучше.

Спасибо.

Теги:


Спасибо:




2 Ответов
Oppositus

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


Попробовал UseQuoting = true. Получил в ответ что-то совсем непонятное:

Код

SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 22:27:06.919 |            | Защита активирована.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 22:27:06.919 |            | Регистрация защитного котирования.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 22:27:07.016 | Ошибка     | System.InvalidOperationException: Используется автоматическая генерация имени стратегии. Ручное изменение не допускается.
   в StockSharp.Algo.Strategies.StrategyNameGenerator.set_Value(String value)
   в StockSharp.Algo.Strategies.Strategy.set_Name(String value)
   в StockSharp.Algo.Strategies.ProtectiveStrategy.NeedQuoting(Decimal currentPrice, Decimal currentVolume, Decimal newPrice, Decimal newVolume)
   в StockSharp.Algo.Strategies.QuotingStrategy.ProcessQuoting()
   в StockSharp.Algo.Strategies.ProtectiveStrategy.ProcessQuoting()
   в StockSharp.Algo.MarketRule`1.#=qeWNllB1BHhtz2GInOxEycnTnSVmHp5ACvmB$w$DQUPY=.#=q1VXoBNSvSzvqt4_pb0ULMQ==(#=q1ycMI7lUw5hzlD3SGIhOYw== #=qh4TdGntpoONIZD2YD9AC0Q==)
   в StockSharp.Algo.MarketRule`1.#=qN4TsINan0AyUgxybdGMnecNkj_Rx103jZqKqgKdKco8=()
   в StockSharp.Algo.Strategies.Strategy.#=q70DdGRFZcnVyo09EzshnClL8oFZ02wn6FqA_9G9qJIsMxk1js7YvrAHdZYys628ghxk5QYTlqCVIVFhozmja1g==(IMarketRule #=q3kKagJxuF5YY6xElZPebYQ==, Func`1 #=q7B59AEzS7WJDiwLD2kMU9A==)
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 22:27:07.043 | Внимание   | Заканчиваем котирование с неисполненным объемом равный 1.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 22:27:07.102 |            | Стратегия останавливается.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 22:27:07.132 |            | Ожидание снятия всех активных заявок.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 22:27:07.156 |            | Нет активных или ожидаемых заявок на вход.
SLS_SRU2@RTS_SPBFUT00TE4 | 16.08.2012 22:27:07.189 |            | Стратегия остановлена.


Код такой:

Код

MarketQuotingStrategy seller = new MarketQuotingStrategy(OrderDirections.Sell, Math.Min(base.Volume, m_depth.BestBid.Volume))
{
    PriceType = MarketPriceTypes.Opposite
};

seller.NewMyTrades += (IEnumerable<MyTrade> trades) =>
{
    foreach(MyTrade t in trades)
    {
        try
        {
            decimal stop = t.Trade.Price + 2;
            this.AddWarningLog("Добавляем SL для сделки на ПРОДАЖУ по " + t.Trade.Price + " на уровне " + stop);
            StopLossStrategy sl = new StopLossStrategy(t, new Unit(stop, UnitTypes.Limit))
            {
                UseQuoting = true
            };
            base.ChildStrategies.Add(sl);
        }
        catch(Exception e)
        {
            this.AddErrorLog("Ошибка при добавлении SL стратегии " + e.GetType() + "\n" + e.Message);
        }
    }
};

base.ChildStrategies.Add(seller);


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

Mikhail Sukhov

Фотография
Автор статей Программист Трейдер
Дата: 16.08.2012
Ответить


Oppositus Перейти
Попробовал UseQuoting = true. Получил в ответ что-то совсем непонятное:


На кодеплексе лежит обновление.
Спасибо:


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

loading
clippy