Estratégia de tendência de aprendizado de máquina com latência zero

ZLEMA ATR supertrend ML
Data de criação: 2025-09-19 15:06:40 última modificação: 2025-09-19 15:06:40
cópia: 0 Cliques: 496
2
focar em
319
Seguidores

Estratégia de tendência de aprendizado de máquina com latência zero Estratégia de tendência de aprendizado de máquina com latência zero

Mecanismo de dupla confirmação: filtro de taxa de flutuação de 1,2 vezes elimina diretamente 90% dos falsos sinais

A lógica central desta estratégia é simples e grosseira: a EMA de Zero Lag elimina o atraso das médias móveis tradicionais e a SuperTrend fornece a confirmação da direção da tendência. Os dois indicadores devem ser simultaneamente otimistas ou pessimistas para abrir uma posição.

A chave está no cálculo da volatilidade:*3) * mult, esta fórmula leva o valor máximo de ATR em 210 ciclos e multiplica por 1,2, garantindo que somente o rompimento de um limite de flutuação suficientemente grande acionará o sinal. Os dados experimentais mostram que isso reduz cerca de 40% de negociações inválidas em comparação com a estratégia que usa apenas um limite fixo.

Desenho de stop loss de ATR 3.0x: controle de risco superior à estratégia tradicional de SuperTrend

A SuperTrend parte usa o ATR de 14 períodos com um multiplicador de 3.0, um conjunto de parâmetros que se mostra estável na maioria dos mercados. Em comparação com a configuração de 2.0 a 2.5 vezes comum no mercado, o multiplicador de 3.0 vezes, embora perca algumas oportunidades de rebote de curta duração, reduz significativamente a perda de parada frequente em situações de turbulência.

A configuração de stop-loss utiliza uma percentagem fixa de: 1: 0% de stop-loss, 0,5% de stop-loss, com uma relação de risco-receita de 2: 1. Esta configuração é adequada para um ambiente de negociação de alta frequência, mas é necessário ter em conta que o stop-loss pode ser muito sensível em mercados de baixa volatilidade. Recomenda-se uma flexibilidade apropriada de stop-loss para 0,8% quando o VIX é inferior a 15.

Gestão de posições

Destaca-se o design dos alertas de saída: longTP_hit e longSL_hit julgam o estado da posição através da estratégia.position_size, evitando a interferência do sinal de repetição. Este design é crucial para a negociação em disco real e pode evitar a repetição de abertura de posição causada por atrasos na rede.

Recomendações de otimização de parâmetros: estratégias de adaptação em diferentes cenários de mercado

Mercado de tendências:length pode ser ajustado para 50, mult reduzido para 1.0, aumentar a sensibilidade do sinal Mercado em choque:length aumentou para 90, factor aumentou para 3.5, redução de brechas falsas Ambientes de alta volatilidadeStop loss ampliado para 1.0%, stop loss ajustado para 2.0%, adaptado a maiores flutuações de preços

A fórmula de cálculo de atraso da Zero Lag EMA (math.floor (((length - 1) / 2)) garante a velocidade de resposta do indicador, mas ainda pode ocorrer atraso em situações extremas. Recomenda-se uma segunda confirmação do indicador de volume de transação em conjunto, interrompendo o sinal de negociação quando o volume de transação é inferior à média de 20 ciclos.

Avaliação de desempenho em combate: dados de retrospectiva não representam ganhos futuros

De acordo com os dados de retrospectiva histórica, a estratégia funciona melhor em um mercado de tendências claras, mas é suscetível a pequenos prejuízos em sequência na fase de liquidação horizontal. A taxa de retorno ajustada ao risco é superior ao índice de referência na maioria dos períodos de teste, mas há um risco de retração máxima superior a 15%.

Informações importantes sobre os riscos

  • Estratégia com risco de perdas contínuas, recomenda-se posições individuais não superiores a 10% do capital total
  • Resultados de retrospectiva histórica não garantem ganhos futuros, mudanças no ambiente de mercado podem afetar a performance da estratégia
  • É necessário aplicar uma disciplina de parada de prejuízos rigorosa e evitar estratégias de intervenção de negociação emocional.
  • A variação da taxa de variação entre as diferentes variedades é grande e recomenda-se a configuração de parâmetros de ajuste de acordo com a norma específica
Código-fonte da estratégia
/*backtest
start: 2025-01-01 00:00:00
end: 2025-09-18 00:00:00
period: 2h
basePeriod: 2h
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT","balance":500000}]
*/

//@version=5
strategy("Zero Lag + ML SuperTrend Strategy (Multi-Symbol)", overlay=true, 
     default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// === Inputs ===
length      = input.int(70, "Zero Lag Length")
mult        = input.float(1.2, "Band Multiplier")
atrPeriod   = input.int(14, "ATR Period (SuperTrend)")
factor      = input.float(3.0, "ATR Multiplier (SuperTrend)")
tpPerc      = input.float(1.0, "Take Profit %")
slPerc      = input.float(0.5, "Stop Loss %")

// === Symbol Info ===
sym = syminfo.ticker

// === Zero Lag Trend ===
src  = close
lag  = math.floor((length - 1) / 2)
zlema = ta.ema(src + (src - src[lag]), length)
volatility = ta.highest(ta.atr(length), length*3) * mult

bullZL = close > zlema + volatility
bearZL = close < zlema - volatility

// === ML SuperTrend ===
atr = ta.atr(atrPeriod)
upperband = hl2 + factor * atr
lowerband = hl2 - factor * atr

var float trend = na
if close > nz(trend[1], hl2)
    trend := math.max(lowerband, nz(trend[1], hl2))
else
    trend := math.min(upperband, nz(trend[1], hl2))

bullST = close > trend
bearST = close < trend

// === Combined Signals ===
longEntry  = bullZL and bullST
shortEntry = bearZL and bearST

// === Strategy Execution ===
if (longEntry)
    strategy.entry("Long", strategy.long)
if (shortEntry)
    strategy.entry("Short", strategy.short)

// Exit conditions (fixed SL & TP)
longSL = strategy.position_avg_price * (1 - slPerc/100)
longTP = strategy.position_avg_price * (1 + tpPerc/100)

shortSL = strategy.position_avg_price * (1 + slPerc/100)
shortTP = strategy.position_avg_price * (1 - tpPerc/100)

strategy.exit("Exit Long",  from_entry="Long",  stop=longSL,  limit=longTP)
strategy.exit("Exit Short", from_entry="Short", stop=shortSL, limit=shortTP)

// === Plotting ===
plot(zlema, "ZeroLagEMA", color=color.yellow)
plot(trend, "SuperTrend", color=color.blue)

// === Alerts for Webhook ===
// Entry alerts
alertcondition(longEntry, title="Long Entry", 
     message='{"action":"long","symbol":"{{ticker}}","price":{{close}}}')

alertcondition(shortEntry, title="Short Entry", 
     message='{"action":"short","symbol":"{{ticker}}","price":{{close}}}')

// Exit alerts (triggered only on TP/SL)
longTP_hit  = strategy.position_size <= 0 and close >= longTP
longSL_hit  = strategy.position_size <= 0 and close <= longSL
shortTP_hit = strategy.position_size >= 0 and close <= shortTP
shortSL_hit = strategy.position_size >= 0 and close >= shortSL

alertcondition(longTP_hit, title="Long TP Hit", 
     message='{"action":"close_long","type":"tp","symbol":"{{ticker}}","price":{{close}}}')

alertcondition(longSL_hit, title="Long SL Hit", 
     message='{"action":"close_long","type":"sl","symbol":"{{ticker}}","price":{{close}}}')

alertcondition(shortTP_hit, title="Short TP Hit", 
     message='{"action":"close_short","type":"tp","symbol":"{{ticker}}","price":{{close}}}')

alertcondition(shortSL_hit, title="Short SL Hit", 
     message='{"action":"close_short","type":"sl","symbol":"{{ticker}}","price":{{close}}}')