Ver no GitHub

Alligator Estratégia Cruzada de Velas

Esta estratégia transporta os MetaTrader especialistas cruz de vela de crocodilo para cima/para baixo para o StockSharp API de alto nível. Ele monitora o indicador Bill Williams Alligator construído a partir de médias móveis suavizadas do preço médio e reage sempre que um corpo de vela completo viaja de um lado da boca Alligator para o outro. As entradas podem ser restritas a alta, baixa ou ambas as direções por meio de um parâmetro, enquanto paradas e metas fixas baseadas em pip cuidam do gerenciamento de risco.

Lógica de negociação

Preparação de indicadores

  • Calcule os Alligator Mandíbula, Dentes e Lábios usando médias móveis suavizadas com os comprimentos clássicos 13/8/5.
  • Aplique os tradicionais deslocamentos para frente (8/5/3 barras por padrão) para que cada linha seja comparada com a vela que se forma na frente dela.
  • Todos os preços são amostrados a partir da mediana da vela (High + Low) / 2 para corresponder à implementação de MetaTrader.

Configuração longa ("vela cruzada")

  1. A vela finalizada anterior deve fechar na linha Alligator inferior ou abaixo dela (após aplicar o deslocamento).
  2. O corpo da vela atual abre no valor Alligator deslocado mais alto ou abaixo dele e fecha acima desse mesmo valor, provando que o corpo cruzou a boca Alligator na direção ascendente.
  3. Nenhuma posição está aberta no momento e a negociação é permitida.
  4. Quando todas as condições se alinham, a estratégia envia uma Compra de mercado para o volume configurado.

Configuração curta ("vela cruzada para baixo")

  1. O fechamento anterior deve estar igual ou acima da linha Alligator deslocada mais alta.
  2. O corpo da vela atual abre no valor deslocado Alligator ou acima dele e termina abaixo dele, confirmando uma linha de baixa através do Alligator.
  3. Nenhuma posição está aberta e a negociação está habilitada.
  4. Uma ordem de Venda a mercado é enviada para o volume configurado.

Gestão de posição

  • Quando uma nova posição é aberta, a estratégia converte as distâncias de stop-loss e take-profit de pips em preços absolutos usando a etapa de preço do símbolo.
  • As posições longas saem quando a vela toca o stop loss, atinge o alvo ou fecha abaixo do mínimo das linhas deslocadas de Teeth e Lips.
  • As posições curtas saem no stop-loss, no alvo ou em um fechamento acima do máximo dos valores deslocados de Teeth e Lips.
  • A chamada integrada StartProtection é ativada na inicialização para garantir que preenchimentos anormais sejam fechados com segurança.

Parâmetros

Nome Tipo Padrão Descrição
OrderVolume decimal 0.1 Tamanho comercial em lotes ou contratos.
StopLossPips int 50 Distância do preço de entrada até o stop de proteção em pips. Zero desativa a parada.
TakeProfitPips int 50 Distância da entrada até a meta de lucro fixo em pips. Zero desativa o alvo.
JawPeriod int 13 Comprimento médio móvel suavizado para a linha da mandíbula Alligator (azul).
JawShift int 8 Deslocamento para frente aplicado à linha da mandíbula antes de avaliar os sinais.
TeethPeriod int 8 Comprimento médio móvel suavizado para a linha Alligator dentes (vermelha).
TeethShift int 5 Deslocamento para frente da linha dos dentes.
LipsPeriod int 5 Comprimento médio móvel suavizado para a linha dos lábios Alligator (verde).
LipsShift int 3 Deslocamento para frente da linha dos lábios.
CandleType DataType TimeSpan.FromHours(1).TimeFrame() Série de velas usadas para cálculos.
EntryMode AlligatorCrossMode Both Escolhe se a estratégia negocia configurações longas, configurações curtas ou ambas.

Notas de uso

  • Funciona em qualquer instrumento suportado por StockSharp; certifique-se de que CandleType corresponda ao período usado no modelo MetaTrader original.
  • Os pips são inferidos a partir da etapa de preço do instrumento: para 3 ou 5 cotações decimais (por exemplo, EURUSD), o pip equivale a dez etapas de preço.
  • A lógica atua apenas em velas concluídas e não depende de dados de ticks, o que a mantém alinhada com backtests MetaTrader.
namespace StockSharp.Samples.Strategies;

using System;
using Ecng.Common;
using StockSharp.Algo.Indicators;
using StockSharp.Algo.Strategies;
using StockSharp.Messages;

/// <summary>
/// Alligator Candle Cross strategy: DEMA trend crossover.
/// Buys when close crosses above DEMA, sells when close crosses below.
/// </summary>
public class AlligatorCandleCrossStrategy : Strategy
{
	private readonly StrategyParam<DataType> _candleType;
	private readonly StrategyParam<int> _period;

	private decimal _prevClose;
	private decimal _prevDema;
	private bool _hasPrev;

	public DataType CandleType { get => _candleType.Value; set => _candleType.Value = value; }
	public int Period { get => _period.Value; set => _period.Value = value; }

	public AlligatorCandleCrossStrategy()
	{
		_candleType = Param(nameof(CandleType), TimeSpan.FromMinutes(60).TimeFrame())
			.SetDisplay("Candle Type", "Candle timeframe", "General");
		_period = Param(nameof(Period), 50)
			.SetGreaterThanZero()
			.SetDisplay("Period", "DEMA period", "Indicators");
	}

	/// <inheritdoc />
	protected override void OnReseted()
	{
		base.OnReseted();
		_prevClose = 0;
		_prevDema = 0;
		_hasPrev = false;
	}

	/// <inheritdoc />
	protected override void OnStarted2(DateTime time)
	{
		base.OnStarted2(time);
		_prevClose = 0;
		_prevDema = 0;
		_hasPrev = false;
		var dema = new ExponentialMovingAverage { Length = Period };
		var subscription = SubscribeCandles(CandleType);
		subscription.Bind(dema, ProcessCandle).Start();
	}

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

		if (_hasPrev)
		{
			if (_prevClose <= _prevDema && candle.ClosePrice > demaValue && Position <= 0)
				BuyMarket();
			else if (_prevClose >= _prevDema && candle.ClosePrice < demaValue && Position >= 0)
				SellMarket();
		}

		_prevClose = candle.ClosePrice;
		_prevDema = demaValue;
		_hasPrev = true;
	}
}