Ver no GitHub

Estratégia Exp T3 TRIX (ID 2946)

A estratégia Exp T3 TRIX replica o consultor especialista do MetaTrader 5 construído em torno do oscilador TRIX de tripla suavização. Ela aplica suavização Tillson T3 para gerar um fluxo TRIX rápido e lento e reage a reversões de momentum usando três modos selecionáveis. Cada modo controla como o histograma ou a posição relativa dos componentes rápido e lento devem se comportar antes que a estratégia entre ou saia de uma posição.

Lógica de trading

  • Cálculo Tillson T3 TRIX
    • Duas pilhas de seis médias móviles exponenciais com o mesmo comprimento produzem valores Tillson T3 para um fluxo rápido e um lento.
    • A derivada de cada valor T3 (atual menos anterior dividido por anterior) se torna o histograma TRIX usado para tomada de decisão.
  • Modo = Breakdown
    • Entrada comprada: TRIX rápida cruza de abaixo de zero para acima de zero enquanto entradas compradas estão habilitadas. Qualquer posição vendida aberta é fechada primeiro (se saídas vendidas forem permitidas).
    • Entrada vendida: TRIX rápida cruza de acima de zero para abaixo de zero enquanto entradas vendidas estão habilitadas. Qualquer posição comprada aberta é fechada primeiro (se saídas compradas forem permitidas).
    • Apenas saída: Quando um cruzamento ocorre mas a entrada correspondente está desabilitada, a estratégia ainda fecha a exposição oposta se a permissão de saída relevante estiver habilitada.
  • Modo = Twist
    • Entrada comprada: A inclinação da TRIX rápida muda de negativa para positiva (ou seja, a barra atual está subindo depois de cair). A estratégia replica as regras de fechamento e permissão do modo Breakdown.
    • Entrada vendida: A inclinação da TRIX rápida muda de positiva para negativa.
  • Modo = CloudTwist
    • Entrada comprada: A TRIX rápida se move acima da TRIX lenta depois de estar abaixo dela na barra completa anterior.
    • Entrada vendida: A TRIX rápida cai abaixo da TRIX lenta depois de estar acima dela na barra anterior.
  • Tratamento de ordens
    • A estratégia primeiro fecha a exposição oposta quando um sinal de reversão aparece e saídas são permitidas.
    • Novas ordens usam Volume + |Position| para que uma reversão possa ser executada em uma única operação quando permitido.
    • StartProtection() é ativado para reutilizar a camada de segurança integrada do StockSharp do template do projeto original.

Parâmetros

Parâmetro Valor padrão Descrição
Fast Length 10 Profundidade usada para a pilha Tillson T3 rápida (seis EMAs encadeadas).
Slow Length 18 Profundidade usada para a pilha Tillson T3 lenta.
Volume Factor 0.7 Coeficiente de suavização Tillson T3 (0 a 1).
Mode Twist Escolhe entre detecção de sinais Breakdown, Twist ou CloudTwist.
Allow Long Entry true Habilita a abertura de posições compradas.
Allow Short Entry true Habilita a abertura de posições vendidas.
Allow Long Exit true Habilita o fechamento de posições compradas.
Allow Short Exit true Habilita o fechamento de posições vendidas.
Candle Type Período de 4 horas Intervalo de agregação usado para solicitar candles e alimentar a cadeia de indicadores.

Todos os parâmetros são expostos através de StrategyParam<T>, tornando-os visíveis na UI do Designer e prontos para otimização.

Notas de uso

  1. A lógica funciona apenas com candles finalizados. Garanta que a fonte de dados entregue o período configurado em Candle Type.
  2. Como a derivada TRIX requer valores históricos, os dois primeiros candles completos são usados para inicialização e não produzem sinais.
  3. Para replicar o comportamento do MetaTrader, desabilite o flag Allow ... correspondente se desejar trading unidirecional ou supressão de saídas.
  4. Gerenciamento de risco como níveis de stop-loss ou take-profit não foi incluído no consultor especialista original e portanto não é implementado aqui. Combine a estratégia com os módulos de gerenciamento de dinheiro do StockSharp se necessário.

Detalhes de conversão

  • Fonte: MQL/2156/exp_t3_trix.mq5 mais o indicador t3_trix.mq5.
  • O port de API implementa os mesmos três modos de sinal usando assinaturas de candles de alto nível do StockSharp e classes de indicadores.
  • A suavização Tillson T3 é recriada usando seis médias móveis exponenciais encadeadas e o fator de volume canônico de 0.7, ajustável através de Volume Factor.
using System;
using System.Collections.Generic;

using StockSharp.Algo.Indicators;
using StockSharp.Algo.Strategies;
using StockSharp.BusinessEntities;
using StockSharp.Messages;

namespace StockSharp.Samples.Strategies;

/// <summary>
/// T3 TRIX strategy using TRIX indicator for momentum signals.
/// Trades on TRIX zero-line crossovers.
/// </summary>
public class ExpT3TrixStrategy : Strategy
{
	private readonly StrategyParam<DataType> _candleType;
	private readonly StrategyParam<int> _period;

	private decimal? _prevTrix;

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

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

	public ExpT3TrixStrategy()
	{
		_candleType = Param(nameof(CandleType), TimeSpan.FromHours(1).TimeFrame())
			.SetDisplay("Candle Type", "Timeframe", "General");

		_period = Param(nameof(Period), 14)
			.SetGreaterThanZero()
			.SetDisplay("Period", "TRIX period", "Indicators");
	}

	public override IEnumerable<(Security sec, DataType dt)> GetWorkingSecurities()
	{
		return [(Security, CandleType)];
	}

	/// <inheritdoc />
	protected override void OnReseted()
	{
		base.OnReseted();
		_prevTrix = null;
	}

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

		_prevTrix = null;

		var trix = new Trix { Length = Period };

		var subscription = SubscribeCandles(CandleType);
		subscription
			.Bind(trix, ProcessCandle)
			.Start();

		var area = CreateChartArea();
		if (area != null)
		{
			DrawCandles(area, subscription);
			DrawOwnTrades(area);
		}

		var indArea = CreateChartArea();
		if (indArea != null)
		{
			DrawIndicator(indArea, trix);
		}
	}

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

		if (!IsFormedAndOnlineAndAllowTrading())
		{
			_prevTrix = trixValue;
			return;
		}

		if (_prevTrix == null)
		{
			_prevTrix = trixValue;
			return;
		}

		// TRIX crosses above zero → buy
		if (_prevTrix.Value <= 0 && trixValue > 0)
		{
			if (Position < 0)
				BuyMarket();
			if (Position <= 0)
				BuyMarket();
		}
		// TRIX crosses below zero → sell
		else if (_prevTrix.Value >= 0 && trixValue < 0)
		{
			if (Position > 0)
				SellMarket();
			if (Position >= 0)
				SellMarket();
		}

		_prevTrix = trixValue;
	}
}