← Zurück

Стоп заявка

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


        private void OnNewOrderTrades(IEnumerable<MyTrade> trades)
        {
            var protectiveStrategy = trades.Select(trade =>
            {
                //Определяем величину уровня стоп-лоса
                var level = trade.Order.Price - 100;

                // выставляет стоп-лосс
                var stopLossLevelUnit = new Unit(level, UnitTypes.Limit, Security);

                return new StopLossStrategy(trade, stopLossLevelUnit);
            });

            ChildStrategies.AddRange(protectiveStrategy);
        }

Однако стоп-лосс при достижении цены не срабатывает. Пробовал все свойства UnitTypes, но результат - или срабатывание стопа после совершения трейда или несрабатывание вообще.

Подскажите, как правильно выставить стоп для сделки к примеру на 100 пунктов ниже (для фьюча РТС)?

War dieses Thema hilfreich?

Thema teilen

Kommentare (4)

Anmelden oder Konto erstellen, Melden Sie sich an oder registrieren Sie sich, um einen Kommentar zu hinterlassen

Mirovan
Mirovan

Попробуйте пример из семплов:


            foreach (MyTrade t in trades)
            {
                Console.WriteLine("trade !!!");

                var takeProfit = new TakeProfitStrategy(t, 20);

                var stopLoss = new StopLossStrategy(t, 10);
                var str = new TakeProfitStopLossStrategy(takeProfit, stopLoss);

                ChildStrategies.Add(str);

            }

Кстати проверьте метод OnNewOrderTrades - он вызывается или нет? Если нет, то нужно установить значение поля WaitAllTrades у стратегии стоп-лоса и котирования в true.

intint
intint Autor

Не пойму в чем ошибка - стратегия работает, заявка исполняется, защитная стратегия судя по логам работает, а потом падает.

В чем может быть баг ???

2012.12.12 21:54:18.122| |TPS_SiZ2@RTS_SPBFUT00281|Защита сделки 79765218 заявки 78847884. ... 2012.12.12 21:54:18.158| |MQS_SiZ2@RTS_SPBFUT00281|Заявка 78847884 больше не активна.


2012.12.12 21:54:12.751|       |QuikTrader|New order: 140521/1933130026 Продажа Цена=30683 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:12.766|       |QuikTrader|New order: 140531/1933168180 Покупка Цена=30721 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:12.767|       |QuikTrader|New order: 142022/1933170880 Покупка Цена=30726 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:12.767|       |QuikTrader|New order: 142031/1933215627 Продажа Цена=30687 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:12.767|       |QuikTrader|New order: 151507/1933292705 Покупка Цена=30713 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:12.767|       |QuikTrader|New order: 151517/1933418642 Продажа Цена=30670 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:12.767|       |QuikTrader|New order: 160525/1933419313 Продажа Цена=30670 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:12.768|       |QuikTrader|New order: 73309866/1934015231 Продажа Цена=30582 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:12.768|       |QuikTrader|New order: 74078073/1934026394 Продажа Цена=30577 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:12.768|       |QuikTrader|New order: 74961825/1934036819 Продажа Цена=30581 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:12.768|       |QuikTrader|New order: 75382429/1934045999 Покупка Цена=30606 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:12.768|       |QuikTrader|New order: 78058736/1934103299 Продажа Цена=30572 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:13.026|       |QuikTrader|New order: 140531/1907797 Покупка Цена=30721 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:13.027|       |QuikTrader|New order: 142031/1907845 Продажа Цена=30687 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:13.027|       |QuikTrader|New order: 151517/1907970 Продажа Цена=30670 Объем=5 Сост=Done Бал=0 
2012.12.12 21:54:13.028|       |QuikTrader|New order: 160536/1907994 Покупка Цена=30708 Объем=5 Сост=Done Бал=5 
2012.12.12 21:54:13.167|       |QuikTrader|Экспорт запущен.
2012.12.12 21:54:13.306|Error  |QuikTrader|System.InvalidOperationException: Инструмент с кодом LKOH для бумажной позиции не найден.
   в StockSharp.Quik.QuikTrader.#=qKP5xkryv_BLBz9FH4VGI78AeILidAh6yriKbRUDGBd4=.#=qgHe_P3MDYJK8z$lRLodPZg==(IList`1 #=qErgxR5R8ijueue$803aA6Q==, Func`2 #=qkttsqiru7i9M42meVzyJpQ==)
   в #=qIXhYlq42gusmJ2A32NsN5Ax0Y_OK1WFfG67P8GpTU_InVvHHSFyAS2$fvcqFg9r6.#=qFiCHjYnRW3CmWb8MGaUV7Q==(DdeTable #=q5RZiucAH3l7rrDcQWUh1uw==, IList`1 #=qAu$zucNoQid3dCEGQAu2vQ==, Action`2 #=qaqP1AhN8E2BNJZJ$2uwTvA==, Action`1 #=qfKbbOFcCam6jnNKRIEFGnQ==, Boolean #=qRt4iW7c1yIaKnzuW1VSpMA==)
2012.12.12 21:54:14.557|       |RS_SiZ2@RTS_SPBFUT00281|Стратегия запущена. [0,-1]. Позиция при старте 0.
2012.12.12 21:54:17.517|       |MQS_SiZ2@RTS_SPBFUT00281|Стратегия запущена. [0,1]. Позиция при старте 0.
2012.12.12 21:54:17.518|       |MQS_SiZ2@RTS_SPBFUT00281|Котирование на Sell объема 1.
2012.12.12 21:54:17.519|       |MQS_SiZ2@RTS_SPBFUT00281|Приостановка правил. _rulesSuspendCount 1.
2012.12.12 21:54:17.544|       |MQS_SiZ2@RTS_SPBFUT00281|Возобновление правил. _rulesSuspendCount 0.
2012.12.12 21:54:17.570|       |MQS_SiZ2@RTS_SPBFUT00281|Цена текущей NULL и лучшей 30541.
2012.12.12 21:54:17.570|       |MQS_SiZ2@RTS_SPBFUT00281|Лучший бид 30542 и лучший аск 30551.
2012.12.12 21:54:17.582|       |MQS_SiZ2@RTS_SPBFUT00281|Регистрация новой заявки на Sell с ценой 30541 и объемом 1. MQS_SiZ2@RTS_SPBFUT00281
2012.12.12 21:54:17.596|       |QuikTrader|RegisterOrder: 78847884/0 Продажа Цена=30541 Объем=1 Сост=None Бал=1 
2012.12.12 21:54:18.044|       |QuikTrader|New order: 78847884/1934123313 Продажа Цена=30541 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:18.070|       |RS_SiZ2@RTS_SPBFUT00281|Новая позиция: SPBFUT00281-SiZ2@RTS=-1.
2012.12.12 21:54:18.075|       |MQS_SiZ2@RTS_SPBFUT00281|Новая позиция: SPBFUT00281-SiZ2@RTS=-1.
2012.12.12 21:54:18.077|       |MQS_SiZ2@RTS_SPBFUT00281|Позиция изменилась на -1. Оставшийся объем 0.
2012.12.12 21:54:18.077|       |MQS_SiZ2@RTS_SPBFUT00281|Заканчиваем котирование.
2012.12.12 21:54:18.078|       |MQS_SiZ2@RTS_SPBFUT00281|Стратегия останавливается. [0,1]. Позиция при старте -1.
2012.12.12 21:54:18.080|       |MQS_SiZ2@RTS_SPBFUT00281|Правило 'Изменение стакана инструмента SiZ2@RTS (0x2B9109E)'. Приостановлено.
2012.12.12 21:54:18.084|       |MQS_SiZ2@RTS_SPBFUT00281|Ожидание снятия всех активных заявок.
2012.12.12 21:54:18.098|       |MQS_SiZ2@RTS_SPBFUT00281|Отмена заявки 78847884.
2012.12.12 21:54:18.099|       |QuikTrader|CancelOrder: 78847884/1934123313 Продажа Цена=30541 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:18.122|       |TPS_SiZ2@RTS_SPBFUT00281|Стратегия запущена. [0,2]. Позиция при старте 0.
2012.12.12 21:54:18.122|       |TPS_SiZ2@RTS_SPBFUT00281|Защита сделки 79765218 заявки 78847884.
2012.12.12 21:54:18.123|       |TPS_SiZ2@RTS_SPBFUT00281|Котирование на Buy объема 1.
2012.12.12 21:54:18.123|       |TPS_SiZ2@RTS_SPBFUT00281|Приостановка правил. _rulesSuspendCount 1.
2012.12.12 21:54:18.123|       |TPS_SiZ2@RTS_SPBFUT00281|Возобновление правил. _rulesSuspendCount 0.
2012.12.12 21:54:18.127|       |SLS_SiZ2@RTS_SPBFUT00281|Стратегия запущена. [0,2]. Позиция при старте 0.
2012.12.12 21:54:18.127|       |SLS_SiZ2@RTS_SPBFUT00281|Защита сделки 79765218 заявки 78847884.
2012.12.12 21:54:18.127|       |SLS_SiZ2@RTS_SPBFUT00281|Котирование на Buy объема 1.
2012.12.12 21:54:18.127|       |SLS_SiZ2@RTS_SPBFUT00281|Приостановка правил. _rulesSuspendCount 1.
2012.12.12 21:54:18.128|       |SLS_SiZ2@RTS_SPBFUT00281|Возобновление правил. _rulesSuspendCount 0.
2012.12.12 21:54:18.130|       |TPSLS_SiZ2@RTS_SPBFUT00281|Стратегия запущена. [2,2]. Позиция при старте 0.
2012.12.12 21:54:18.130|       |RS_SiZ2@RTS_SPBFUT00281|Новая Sell сделка 79765218 по цене 30542 на 1 заявки 78847884.
2012.12.12 21:54:18.155|       |MQS_SiZ2@RTS_SPBFUT00281|Новая Sell сделка 79765218 по цене 30542 на 1 заявки 78847884.
2012.12.12 21:54:18.158|       |MQS_SiZ2@RTS_SPBFUT00281|Заявка 78847884 больше не активна.
2012.12.12 21:54:18.160|       |MQS_SiZ2@RTS_SPBFUT00281|Стратегия остановлена. [0,2]. Позиция при старте -1.
2012.12.12 21:54:18.180|       |QuikTrader|Order changed: 78847884/1934123313 Продажа Цена=30541 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:18.181|       |QuikTrader|Order changed: 78847884/1934123313 Продажа Цена=30541 Объем=1 Сост=Done Бал=0 
2012.12.12 21:54:18.313|       |QuikTrader|OrderCancelFailed: 78847884/1934123313 Продажа Цена=30541 Объем=1 Сост=Done Бал=0 
StockSharp.Quik.ApiException: Код ошибки Failed Сообщение Вы не можете снять данную заявку
2012.12.12 21:54:20.495|Error  |SLS_SiZ2@RTS_SPBFUT00281|System.ArgumentException: У инструмента SiZ2@RTS отсутствует информация о планках.
Имя параметра: security
   в StockSharp.Algo.TraderHelper.GetMarketPrice(Security security, OrderDirections direction)
   в StockSharp.Algo.Strategies.ProtectiveStrategy.get_ClosePositionPrice()
   в StockSharp.Algo.Strategies.StopLossStrategy.get_ActivationPrice()
   в StockSharp.Algo.Strategies.ProtectiveStrategy.NeedQuoting(Decimal currentPrice, Decimal currentVolume, Range`1 acceptablePriceRange, Decimal newVolume)
   в StockSharp.Algo.Strategies.QuotingStrategy.ProcessQuoting()
   в StockSharp.Algo.Strategies.ProtectiveStrategy.ProcessQuoting()
   в StockSharp.Algo.MarketRule`2.#=qi3hqyTgOI5dZEARZP28nH2SBD88D1qTQGuFjf6P9ZQY=.#=q_eZ4IJWGrJ3v1keuWlSFRQ==(#=qm$heEiUsNAmzGxlfWjBtkw== #=qc_B2bNjcbdhaI6Rt9ZvIuQ==)
   в StockSharp.Algo.MarketRule`2.#=qlMrJ9mLC5voOVghPH$xgB2VlcP21OlBVjwvlGB5rqGo=()
   в StockSharp.Algo.MarketRuleHelper.#=qKZ8ZzaOt_ebb8gNH4O3CiA==(IMarketRuleContainer #=qKMbkiCgz1LKcPaiHd8UC2Q==, IMarketRule #=qt$E4_YmYi0PnpJ6nE15pAQ==, Func`1 #=qiQggEF1d4UbmJo4W4r4IdQ==)
   в StockSharp.Algo.Strategies.Strategy.#=q3udKpCOalDAG9i_Fiaji7Bk5TvmGRtdO0kyciLcHtxNVF6_Th1OBDyPaB$aQwscwQcZFlwCZUfo3TiM$JKmUmQ==(IMarketRule #=qXKycGTf2ej0HKdDUPJVrlQ==, Func`1 #=qojSXZRoaHUuA_th_PKD0eQ==)
2012.12.12 21:54:20.496|       |SLS_SiZ2@RTS_SPBFUT00281|Стратегия останавливается. [0,2]. Позиция при старте 0.
2012.12.12 21:54:20.496|       |SLS_SiZ2@RTS_SPBFUT00281|Правило 'Изменение стакана инструмента SiZ2@RTS (0x3B05601)'. Приостановлено.
2012.12.12 21:54:20.497|Warning|SLS_SiZ2@RTS_SPBFUT00281|Заканчиваем котирование с неисполненным объемом равный 1.
2012.12.12 21:54:20.497|       |SLS_SiZ2@RTS_SPBFUT00281|Ожидание снятия всех активных заявок.
2012.12.12 21:54:20.497|       |SLS_SiZ2@RTS_SPBFUT00281|Стратегия остановлена. [0,2]. Позиция при старте 0.
2012.12.12 21:54:20.498|       |TPS_SiZ2@RTS_SPBFUT00281|Стратегия останавливается. [0,2]. Позиция при старте 0.
2012.12.12 21:54:20.498|       |TPS_SiZ2@RTS_SPBFUT00281|Правило 'Изменение стакана инструмента SiZ2@RTS (0xD5F67D)'. Приостановлено.
2012.12.12 21:54:20.498|Warning|TPS_SiZ2@RTS_SPBFUT00281|Заканчиваем котирование с неисполненным объемом равный 1.
2012.12.12 21:54:20.498|       |TPS_SiZ2@RTS_SPBFUT00281|Ожидание снятия всех активных заявок.
2012.12.12 21:54:20.498|       |TPS_SiZ2@RTS_SPBFUT00281|Стратегия остановлена. [0,2]. Позиция при старте 0.
2012.12.12 21:54:20.498|       |TPSLS_SiZ2@RTS_SPBFUT00281|Стратегия останавливается. [1,1]. Позиция при старте 0.
2012.12.12 21:54:20.498|       |TPSLS_SiZ2@RTS_SPBFUT00281|Ожидание снятия всех активных заявок.
2012.12.12 21:54:20.499|       |TPSLS_SiZ2@RTS_SPBFUT00281|Стратегия остановлена. [1,1]. Позиция при старте 0.


Mirovan
Mirovan

Судя по логам - стратегия не может определить цену для исполнения стоп заявки, если используется котирование. Соответственно нужно установить вручную свойства у бумаги MinPrice и MaxPrice.

reraise
reraise

Подскужите плз в чем проблема У меня тэйк и стоп срабатывают сразу же после исполнения ордера. Стоп исполняется, а тейк отменяется

var _order = this.CreateOrder(orderDirections, price, Volume);
_order.WhenNewTrades().Do(trades => trades.ForEach(t =>
                {
                   var tps = new TakeProfitStrategy(t, new Unit(takeProfit, UnitTypes.Limit));
                   var sls = new StopLossStrategy(t, new Unit(stopLoss, UnitTypes.Limit));
                   var tpsls = new TakeProfitStopLossStrategy(tps, sls);
                   ChildStrategies.Add(tpsls);
                })).Apply(this);