O recurso está a ser carregado... Carregamento...

Estratégia de acompanhamento de tendências de vários prazos baseada no Impulse MACD e no crossover de médias móveis duplas

Autora:ChaoZhang, Data: 2024-05-17 15:33:02
Tags:MACDSMMASMAZLEMAEMAMA

img

Resumo

Esta estratégia utiliza vários indicadores de média móvel, incluindo SMMA, SMA, ZLEMA e EMA, e constrói um indicador MACD melhorado (Impulse MACD) com base neles.

Princípio da estratégia

  1. Calcule o SMMA e o ZLEMA dos preços altos, baixos e de fechamento com um comprimento de 34 para obter o Impulse MACD (MD).
  2. Calcular a SMA de 9 períodos do Impulse MACD como linha de sinal (SB).
  3. Calcular a diferença entre o Impulse MACD e a linha de sinal (SH) para refletir a força da tendência.
  4. Gerar um sinal de compra quando o Impulse MACD cruzar acima da linha de sinal e fechar a posição quando cruzar abaixo.
  5. Trace o histograma Impulse MACD com cores diferentes com base na relação entre o preço, Impulse MACD e o preço alto/baixo SMMA para refletir visualmente a força da tendência.

Vantagens da estratégia

  1. A utilização de vários tipos de médias móveis permite uma reflexão mais abrangente das tendências do mercado.
  2. O indicador MACD melhorado (Impulse MACD) tem em conta a posição relativa dos preços e das médias móveis, refletindo melhor a força da tendência.
  3. A introdução da linha de sinal ajuda a filtrar alguns sinais falsos e a melhorar a qualidade do sinal.
  4. Traçar o Impulse MACD com cores diferentes com base na força da tendência facilita o julgamento intuitivo dos movimentos do mercado.

Riscos estratégicos

  1. A seleção inadequada dos parâmetros pode conduzir a sinais frequentes ou com atraso, exigindo otimização com base em diferentes mercados e prazos.
  2. A estratégia pode gerar mais sinais falsos e causar perdas em mercados agitados.
  3. A estratégia não possui um mecanismo de stop-loss e pode enfrentar atrasos significativos em mercados voláteis.

Orientações para a otimização da estratégia

  1. Introduzir indicadores de identificação de tendências, como o ADX, para negociar apenas quando a tendência for clara, reduzindo as perdas em mercados instáveis.
  2. Confirmar os sinais de negociação gerados com outros indicadores, como o RSI e o ATR, para melhorar a qualidade do sinal.
  3. Estabelecer níveis razoáveis de stop-loss e take-profit para controlar o risco de negociação única.
  4. Otimizar parâmetros utilizando métodos como algoritmos genéticos para encontrar a combinação ideal de parâmetros.

Resumo

Esta estratégia constrói um indicador MACD melhorado com base em vários tipos de médias móveis e gera sinais de negociação através de seu cruzamento com a linha de sinal, enquanto exibe intuitivamente a força da tendência. A idéia geral é clara e as vantagens são óbvias. No entanto, a estratégia também tem certas limitações, como baixa adaptabilidade a mercados instáveis e falta de medidas de controle de risco.


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

//@version=5
strategy("Impulse MACD Strategy [LazyBear]", shorttitle="IMACD_Strategy", overlay=false)

// Function to calculate SMMA
calc_smma(src, len) =>
    var float smma = na
    smma := na(smma[1]) ? ta.sma(src, len) : (smma[1] * (len - 1) + src) / len
    smma

// Function to calculate SMA
	ta.sma(src, len)
    sum = 0.0
    for i = 0 to len - 1
        sum := sum + src[i]
    sum / len

// Function to calculate ZLEMA
calc_zlema(src, length) =>
    var float ema1 = na
    var float ema2 = na
    var float d = na
    ema1 := ta.ema(src, length)
    ema2 := ta.ema(ema1, length)
    d := ema1 - ema2
    ema1 + d

// Function to calculate EMA
calc_ema(src, len) =>
    ema = 0.0
    ema := ta.ema(src, len)
    ema

// Inputs
lengthMA = input(34, title="Length of Moving Average")
lengthSignal = input(9, title="Length of Signal Line")

// Calculations
src = hlc3
hi = calc_smma(high, lengthMA)
lo = calc_smma(low, lengthMA)
mi = calc_zlema(src, lengthMA) 

md = mi > hi ? (mi - hi) : mi < lo ? (mi - lo) : 0
sb = ta.sma(md, lengthSignal)
sh = md - sb
mdc = src > mi ? src > hi ? color.lime : color.green : src < lo ? color.red : color.orange

// Plotting
plot(0, color=color.gray, linewidth=1, title="MidLine")
plot(md, color=mdc, linewidth=2, title="ImpulseMACD", style=plot.style_histogram)
plot(sh, color=color.blue, linewidth=2, title="ImpulseHisto", style=plot.style_histogram)
plot(sb, color=color.maroon, linewidth=2, title="ImpulseMACDCDSignal")

// Execute trades based on signals
if (ta.crossover(md, sb))
    strategy.entry("Buy", strategy.long)
if (ta.crossunder(md, sb))
    strategy.close("Buy")


Relacionados

Mais.