Estratégia de seguimento da tendência com 3 EMAs, DMI e MACD

Autora:ChaoZhang, Data: 2024-01-25 15:48:59
Tags:

img

Resumo

Esta é uma estratégia de tendência que combina 3 médias móveis exponenciais (EMA) com o índice de movimento direcional (DMI) e o indicador de convergência de divergência da média móvel (MACD) para determinar a direção da tendência e gerar sinais de compra / venda.

Estratégia lógica

A lógica básica baseia-se em três EMAs - 34, 89 e 200 - calculadas no quadro de tempo M5 para identificar a tendência geral.

Os sinais de compra são acionados quando:

  • Preço de fechamento ultrapassa 34 EMA
  • +DI (movimento de direção de alta) > 17
  • ADX (força da tendência) > -DI

Os sinais de venda são gerados quando:

  • Preço de fechamento cruza abaixo de 34 EMA
  • -DI (movimento de direcção de baixa) > 17
  • ADX > +DI

A confirmação adicional vem do indicador MACD antes das entradas.

Vantagens

Esta estratégia tem várias vantagens fundamentais:

  1. Captação precoce da direcção da tendência através do cruzamento da EMA de curto prazo
  2. Utiliza múltiplas EMAs para avaliar a força da tendência em diferentes prazos
  3. Os filtros DMI ajudam a evitar sinais falsos, verificando se há um forte movimento direcional
  4. O MACD fornece confirmação de impulso para configurações de maior probabilidade
  5. A combinação de indicadores melhora a precisão e o calendário das entradas

Riscos

Os principais riscos a considerar:

  1. Whipsaws e falsos sinais se utilizar apenas o crossover EMA
  2. Retardo potencial na geração de sinal resultante de confirmações múltiplas
  3. Vulnerável a inversões bruscas de tendência

Métodos de atenuação:

  • Usar o stop-loss e o dimensionamento da posição adequados
  • Otimizar os comprimentos da EMA para as condições actuais do mercado
  • Assista à ação do preço para confirmação visual

Oportunidades de melhoria

Outras melhorias da estratégia:

  1. Adicionar filtros adicionais como o RSI para níveis de sobrecompra/supervenda
  2. Incorporar análise de volume para sinais mais fortes
  3. Teste e otimize indicadores e configurações com base em ativos e prazos
  4. Empregar o aprendizado de máquina para aprender continuamente com novos dados de mercado

Conclusão

Em resumo, este é um sistema robusto de tendência seguindo combinando indicadores simples, mas poderosos para negociar na direção da tendência predominante. A configuração tripla EMA medem tendências de vários prazos, enquanto as verificações DMI e MACD melhoram o tempo e a probabilidade de entradas lucrativas. Com otimização e gerenciamento de risco adequados, pode ser uma adição eficaz para os traders de tendência.


/*backtest
start: 2023-01-18 00:00:00
end: 2024-01-24 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("2 EMA di+ Buy Sell, strategy ", overlay=true)

// Define the EMA calculation function
ema(src, length) =>
    ta.ema(src, length)

// Calculate and plot EMA on M5
ema34_M5 = ema(close, 34)
ema89_M5 = ema(close, 89)
ema200_M5 = ema(close, 200)

// Plot EMAs
plot(ema34_M5, color=color.green, title="EMA 34 M5", linewidth=2)
plot(ema89_M5, color=color.blue, title="EMA 89 M5", linewidth=2)
plot(ema200_M5, color=color.black, title="EMA 200 M5", linewidth=2)

// Define DMI parameters
len = input(14, title="DI Length")
up = ta.change(high)
down = -ta.change(low)
plusDM = na(up) ? na : (up > down and up > 0 ? up : 0)
minusDM = na(down) ? na : (down > up and down > 0 ? down : 0)
trur = ta.rma(ta.tr, len)
plusDI = 100 * ta.rma(plusDM, len) / trur
minusDI = 100 * ta.rma(minusDM, len) / trur

// Calculate ADX
adxValue = 100 * ta.rma(math.abs(plusDI - minusDI) / (plusDI + minusDI == 0 ? 1 : plusDI + minusDI), len)

// Define MACD parameters
fastLength = input(12, title="Fast Length")
slowLength = input(26, title="Slow Length")
signalLength = input(9, title="Signal Length")

// Calculate MACD
[macdLine, signalLine, _] = ta.macd(close, fastLength, slowLength, signalLength)

// Create buy/sell conditions
buyCondition = close > ema34_M5 and plusDI > 17 and adxValue > minusDI 
sellCondition = close < ema34_M5 and minusDI > 17 and adxValue > plusDI 

// Strategy logic
strategy.entry("Buy", strategy.long, when = buyCondition)
strategy.entry("Sell", strategy.short, when = sellCondition)

// Create alerts for buy/sell signals
alertcondition(buyCondition, title="Buy Signal", message="Buy Signal")
alertcondition(sellCondition, title="Sell Signal", message="Sell Signal")

// Plot buy/sell arrows on the price chart
bgcolor(buyCondition ? color.new(color.green, 90) : sellCondition ? color.new(color.red, 90) : na)

plotarrow(buyCondition ? 1 : sellCondition ? -1 : na, colorup=color.new(color.green, 0), colordown=color.new(color.red, 0), offset=-1)


Mais.