Table of Contents

Стратегия Боллинджера с фокусом на нижней полосе

Обзор

BollingerStrategyLowBandStrategy - это стратегия, основанная на индикаторе BollingerBands. Она открывает короткую позицию при достижении ценой нижней границы полос Боллинджера и закрывает ее при достижении средней линии.

Основные компоненты

Стратегия наследуется от Strategy и использует параметры для настройки:

public class BollingerStrategyLowBandStrategy : Strategy
{
    private readonly StrategyParam<int> _bollingerLength;
    private readonly StrategyParam<decimal> _bollingerDeviation;
    private readonly StrategyParam<DataType> _candleType;

    private BollingerBands _bollingerBands;
}

Параметры стратегии

Стратегия позволяет настраивать следующие параметры:

  • BollingerLength - период индикатора Bollinger Bands (по умолчанию 20)
  • BollingerDeviation - множитель стандартного отклонения (по умолчанию 2.0)
  • CandleType - тип свечей для работы (по умолчанию 5-минутные)

Все параметры доступны для оптимизации с указанными диапазонами значений.

Инициализация стратегии

В методе OnStarted создается индикатор Bollinger Bands, настраивается подписка на свечи и готовится визуализация на графике:

protected override void OnStarted(DateTimeOffset time)
{
    base.OnStarted(time);

    // Создание индикатора
    _bollingerBands = new BollingerBands
    {
        Length = BollingerLength,
        Width = BollingerDeviation
    };

    // Создание подписки и привязка индикатора
    var subscription = SubscribeCandles(CandleType);
    subscription
        .Bind(_bollingerBands, ProcessCandle)
        .Start();

    // Настройка визуализации на графике
    var area = CreateChartArea();
    if (area != null)
    {
        DrawCandles(area, subscription);
        DrawIndicator(area, _bollingerBands, System.Drawing.Color.Purple);
        DrawOwnTrades(area);
    }
}

Обработка свечей

Метод ProcessCandle вызывается для каждой завершенной свечи и реализует торговую логику:

private void ProcessCandle(ICandleMessage candle, decimal middleBand, decimal upperBand, decimal lowerBand)
{
    // Пропускаем незавершенные свечи
    if (candle.State != CandleStates.Finished)
        return;

    // Проверяем готовность стратегии к торговле
    if (!IsFormedAndOnlineAndAllowTrading())
        return;

    // Торговая логика:
    // Продажа, когда цена касается нижней полосы (только при отсутствии позиции)
    if (candle.ClosePrice <= lowerBand && Position == 0)
    {
        SellMarket(Volume);
    }
    // Покупка для закрытия позиции, когда цена достигает средней линии (только при наличии короткой позиции)
    else if (candle.ClosePrice >= middleBand && Position < 0)
    {
        BuyMarket(Math.Abs(Position));
    }
}

Логика торговли

  • Сигнал на продажу: цена закрытия свечи достигает или опускается ниже нижней полосы Боллинджера при отсутствии открытой позиции
  • Сигнал на покупку (закрытие короткой позиции): цена закрытия свечи достигает или превышает среднюю линию Боллинджера при наличии короткой позиции
  • Объем позиции фиксированный при открытии и равен всей текущей позиции при закрытии

Особенности

  • Стратегия автоматически определяет инструменты для работы через метод GetWorkingSecurities()
  • Стратегия работает только с завершенными свечами
  • Стратегия использует только нижнюю полосу и среднюю линию индикатора Bollinger Bands
  • Открываются только короткие позиции
  • Индикатор и сделки визуализируются на графике при наличии графической области
  • Поддерживается оптимизация параметров для поиска оптимальных настроек стратегии