Мульти-таймфрейм стратегия

Обзор

MultiTimeframeStrategy - это стратегия, использующая два временных интервала для принятия торговых решений. Часовые свечи определяют направление тренда через пересечение скользящих средних, а 5-минутные свечи с индикатором RelativeStrengthIndex используются для точного входа в позицию по направлению тренда.

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

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

public class MultiTimeframeStrategy : Strategy
{
	private readonly StrategyParam<int> _fastSmaLength;
	private readonly StrategyParam<int> _slowSmaLength;
	private readonly StrategyParam<int> _rsiLength;
	private readonly StrategyParam<decimal> _takeProfit;
	private readonly StrategyParam<decimal> _stopLoss;

	// Направление тренда на старшем таймфрейме
	private Sides? _hourlyTrend;
}

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

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

  • FastSmaLength - период быстрой скользящей средней для часового графика (по умолчанию 10)
  • SlowSmaLength - период медленной скользящей средней для часового графика (по умолчанию 30)
  • RsiLength - период RSI для 5-минутного графика (по умолчанию 14)
  • TakeProfit - размер тейк-профита в процентах (по умолчанию 2)
  • StopLoss - размер стоп-лосса в процентах (по умолчанию 1)

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

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

В методе OnStarted2 создаются индикаторы и настраиваются подписки на свечи двух таймфреймов:

protected override void OnStarted2(DateTime time)
{
	base.OnStarted2(time);

	var fastSma = new SimpleMovingAverage { Length = FastSmaLength };
	var slowSma = new SimpleMovingAverage { Length = SlowSmaLength };
	var rsi = new RelativeStrengthIndex { Length = RsiLength };

	_hourlyTrend = null;

	// Часовые свечи для определения тренда (пересечение SMA)
	SubscribeCandles(TimeSpan.FromHours(1))
		.Bind(fastSma, slowSma, ProcessHourlyCandle)
		.Start();

	// 5-минутные свечи для точного входа (RSI)
	SubscribeCandles(TimeSpan.FromMinutes(5))
		.Bind(rsi, ProcessEntryCandle)
		.Start();

	// Настройка защиты позиции (тейк-профит и стоп-лосс)
	StartProtection(
		new Unit(TakeProfit, UnitTypes.Percent),
		new Unit(StopLoss, UnitTypes.Percent)
	);

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

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

Метод ProcessHourlyCandle определяет направление тренда на старшем таймфрейме:

private void ProcessHourlyCandle(ICandleMessage candle, decimal fastValue, decimal slowValue)
{
	if (candle.State != CandleStates.Finished)
		return;

	// Определение тренда по пересечению скользящих средних
	_hourlyTrend = fastValue > slowValue ? Sides.Buy : Sides.Sell;
}

Обработка 5-минутных свечей

Метод ProcessEntryCandle реализует вход в позицию по сигналу RSI в направлении тренда:

private void ProcessEntryCandle(ICandleMessage candle, decimal rsiValue)
{
	if (candle.State != CandleStates.Finished)
		return;

	if (_hourlyTrend == null || !IsFormedAndOnlineAndAllowTrading())
		return;

	// Покупка: тренд вверх и RSI в зоне перепроданности
	if (_hourlyTrend == Sides.Buy && rsiValue < 30 && Position <= 0)
	{
		BuyMarket(Volume + Math.Abs(Position));
	}
	// Продажа: тренд вниз и RSI в зоне перекупленности
	else if (_hourlyTrend == Sides.Sell && rsiValue > 70 && Position >= 0)
	{
		SellMarket(Volume + Math.Abs(Position));
	}
}

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

  • Определение тренда: быстрая SMA выше медленной SMA на часовом графике означает восходящий тренд, ниже - нисходящий
  • Сигнал на покупку: восходящий тренд на часовом графике и RSI < 30 на 5-минутном графике при отсутствии длинной позиции
  • Сигнал на продажу: нисходящий тренд на часовом графике и RSI > 70 на 5-минутном графике при отсутствии короткой позиции
  • Защита позиции: автоматическая установка тейк-профита и стоп-лосса через StartProtection

Особенности

  • Стратегия использует два таймфрейма: часовой для тренда и 5-минутный для входа
  • Вход в позицию осуществляется только в направлении тренда старшего таймфрейма
  • RSI используется как фильтр для поиска оптимальных точек входа (перепроданность/перекупленность)
  • Позиция автоматически защищается стоп-лоссом и тейк-профитом
  • Стратегия работает только с завершенными свечами
  • Индикаторы и сделки визуализируются на графике при наличии графической области
  • Поддерживается оптимизация параметров для поиска оптимальных настроек стратегии