Estratégia de múltiplos períodos

Visão Geral

MultiTimeframeStrategy é uma estratégia que utiliza dois períodos para tomar decisões de negociação. Velas horárias determinam a direção da tendência através de cruzamentos de médias móveis, enquanto velas de 5 minutos com o indicador RelativeStrengthIndex são utilizadas para uma entrada precisa na direção da tendência.

Componentes Principais

A estratégia herda de Strategy e utiliza parâmetros para configuração:

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;

	// Direção da tendência no período superior
	private Sides? _hourlyTrend;
}

Parâmetros da Estratégia

A estratégia permite personalizar os seguintes parâmetros:

  • FastSmaLength - período da média móvel rápida para o gráfico horário (predefinição 10)
  • SlowSmaLength - período da média móvel lenta para o gráfico horário (predefinição 30)
  • RsiLength - período do RSI para o gráfico de 5 minutos (predefinição 14)
  • TakeProfit - tamanho do take-profit em percentagem (predefinição 2)
  • StopLoss - tamanho do stop-loss em percentagem (predefinição 1)

Todos os parâmetros estão disponíveis para otimização com intervalos de valores especificados.

Inicialização da Estratégia

No método OnStarted2, os indicadores são criados e as subscrições de velas são configuradas para dois períodos:

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;

	// Velas horárias para deteção de tendência (cruzamento de SMA)
	SubscribeCandles(TimeSpan.FromHours(1))
		.Bind(fastSma, slowSma, ProcessHourlyCandle)
		.Start();

	// Velas de 5 minutos para entrada precisa (RSI)
	SubscribeCandles(TimeSpan.FromMinutes(5))
		.Bind(rsi, ProcessEntryCandle)
		.Start();

	// Configurar proteção da posição (take-profit e stop-loss)
	StartProtection(
		new Unit(TakeProfit, UnitTypes.Percent),
		new Unit(StopLoss, UnitTypes.Percent)
	);

	// Configurar visualização no gráfico
	var area = CreateChartArea();
	if (area != null)
	{
		DrawIndicator(area, fastSma, System.Drawing.Color.Blue);
		DrawIndicator(area, slowSma, System.Drawing.Color.Red);
		DrawOwnTrades(area);
	}
}

Processamento de Velas Horárias

O método ProcessHourlyCandle determina a direção da tendência no período superior:

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

	// Determinar tendência pelo cruzamento de médias móveis
	_hourlyTrend = fastValue > slowValue ? Sides.Buy : Sides.Sell;
}

Processamento de Velas de 5 Minutos

O método ProcessEntryCandle implementa a entrada em posição com base no sinal RSI na direção da tendência:

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

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

	// Comprar: tendência de alta e RSI em zona de sobrevenda
	if (_hourlyTrend == Sides.Buy && rsiValue < 30 && Position <= 0)
	{
		BuyMarket(Volume + Math.Abs(Position));
	}
	// Vender: tendência de baixa e RSI em zona de sobrecompra
	else if (_hourlyTrend == Sides.Sell && rsiValue > 70 && Position >= 0)
	{
		SellMarket(Volume + Math.Abs(Position));
	}
}

Lógica de Negociação

  • Deteção de tendência: SMA rápida acima da SMA lenta no gráfico horário indica tendência de alta; abaixo indica tendência de baixa
  • Sinal de compra: tendência de alta no gráfico horário e RSI < 30 no gráfico de 5 minutos quando não existe posição longa
  • Sinal de venda: tendência de baixa no gráfico horário e RSI > 70 no gráfico de 5 minutos quando não existe posição curta
  • Proteção da posição: take-profit e stop-loss automáticos através de StartProtection

Funcionalidades

  • A estratégia utiliza dois períodos: horário para tendência e 5 minutos para entrada
  • A entrada em posição é executada apenas na direção da tendência do período superior
  • O RSI é utilizado como filtro para encontrar pontos de entrada ideais (sobrevenda/sobrecompra)
  • As posições são protegidas automaticamente com stop-loss e take-profit
  • A estratégia trabalha apenas com velas concluídas
  • Indicadores e transações são visualizados no gráfico quando existe uma área gráfica disponível
  • A otimização de parâmetros é suportada para encontrar definições ideais da estratégia