Table of Contents

Тейк-профит и стоп-лосс

С помощью подхода дочерних стратегий и использования BasketStrategy в S# реализован механизм автоматической защиты позиции через стратегии TakeProfitStrategy и StopLossStrategy. Данные стратегии имеют ряд преимуществ перед обычными стоп заявками:

  1. Защитные стратегии не выставляют заявки до тех пор, пока не наступит условие. Размер депозита под заявки при этом не блокируются брокером.
  2. Стратегии платформо-независимые, а значит будут работать через любого брокера вне зависимости от их технологии. Стоп-заявки же, условия которых задаются через Order.Condition, эмулируются платформами Quik, SmartCOM и т.д. самостоятельно, и их логика привязана к брокеру.
  3. Защитные стратегии могут работать при прямом подключении к биржам.
  4. Автоматическое отслеживание частичного или полного закрытия защищаемой позиции (с последующим снятием стопов). А также переворот позиции. Например, когда была длинная позиция, и она была перевернута в короткую. Стопы в этом случае нужно так же "перевернуть".

Предварительные условия

Дочерние стратегии

Событийная модель

Тейк-профит и Стоп-лосс

  1. В качестве примера разобрана регистрация заявки на покупку "по рынку" и последующая защита длинной позиции. Для этого создается правило, реагирующее на появление у заявки сделок (подробнее, в разделе Событийная модель):

    public class MyStrategy : Strategy
    {
     public void OpenPosition()
     {
     	// создаем заявку для открытия длинной позиции
     	var longPos = this.BuyAtMarket();
    
     	// регистрируем правило, отслеживающее появление новых сделок по заявке
     	longPos
     		.WhenNewTrade()
     		.Do(OnNewOrderTrade)
     		.Apply(this);
    
     	// отправляем заявку на регистрацию
     	RegisterOrder(longPos);
     }
    }
    
    
  2. Чтобы защитить позицию необходимо использовать стратегии TakeProfitStrategy или StopLossStrategy. Если требуется одновременная защита с двух сторон, то рекомендуется использовать TakeProfitStopLossStrategy. Данная стратегия автоматически изменяет объем одной из стратегий при частичной активации (например, при касании стоп-лосс уровня закрылась лишь часть позиции, а затем рынок снова вернулся в безубыточную зону):

    private void OnNewOrderTrade(MyTrade trade)
    {
        // для сделки добавляем защитную пару стратегии
        // выставляет тейк-профит в 40 пунктов
        var takeProfit = new TakeProfitStrategy(trade, 40);
        // выставляет стоп-лосс в 20 пунктов
        var stopLoss = new StopLossStrategy(trade, 20);
        var protectiveStrategies = new TakeProfitStopLossStrategy(takeProfit, stopLoss);
        ChildStrategies.AddRange(protectiveStrategies);
    }
    

Автоматическое закрытие и переворот позиции

Стратегии TakeProfitStrategy и StopLossStrategy не отслеживают частичное закрытие позиции или ее переворот (например, позиция была закрыта руками в терминале и была открыта в противоположную сторону). Для того, чтобы автоматически отслеживать в роботе подобные ситуации, необходимо использовать AutoProtectiveStrategy. Данная стратегия через поступающие в нее сделки (AutoProtectiveStrategy.ProcessNewMyTrade(StockSharp.BusinessEntities.MyTrade trade**)**) решает, что нужно сделать: защитить их (если идет открытие позиции или ее увеличение) или остановить защитные стратегии (если идет закрытие позиции или ее уменьшение). Также стратегия автоматически переворачивает защитные стратегии в случае переворота позиции (из длинной в короткую или из короткой в длинную).

Следующие шаги

Отчеты