Crossover MACD com estratégia de sinal

Autora:ChaoZhang, Data: 2023-12-13 16:58:15
Tags:

img

Resumo

A estratégia MACD Crossover with Signal gera sinais de negociação quando o MACD cruza acima ou abaixo da linha de sinal.

Princípio da estratégia

A estratégia primeiro calcula a linha média móvel rápida fastMA e a linha média móvel lenta slowMA. O parâmetro média móvel rápida é de 12 dias, e o parâmetro média móvel lenta é de 26 dias. Em seguida, calcule a diferença entre as duas linhas médias móveis para formar o MACD. Em seguida, calcule a média móvel de 9 dias do MACD para obter a linha de sinal. Os sinais de negociação são gerados quando o MACD cruza acima ou abaixo da linha de sinal.

A vantagem da estratégia é capturar o ponto de virada da tendência de médio prazo dos preços das ações. A combinação de médias móveis rápidas e lentas filtra flutuações de preços e ruído de curto prazo e pode capturar tendências de preços de médio prazo. Quando o preço das ações sofre uma reversão de médio prazo, o MACD atravessa a linha de sinal e gera sinais de negociação relativamente claros.

Análise das vantagens

A estratégia MACD Crossover with Signal combina a ideia de médias móveis duplas para filtrar o ruído de curto prazo e apenas capturar os pontos de virada das tendências de longo e médio prazo.

O MACD em si é mais sensível e pode responder de forma sensível às mudanças da tendência de preços. A adição da linha de sinal pode filtrar mais falsos sinais de curto prazo. Somente quando a tendência de médio prazo muda significativamente, o MACD quebra a linha de sinal para cima e para baixo, um sinal será gerado.

Em uma tendência de alta sustentável, o MACD mantém-se acima da linha de sinal a maior parte do tempo, o que pode capturar várias oportunidades ao longo do caminho.

Análise de riscos

Uma vez que os sinais de compra e venda da estratégia dependem inteiramente do cruzamento das médias móveis, se o mercado flutuar muito, mais sinais falsos serão gerados, resultando em freqüentes stop loss.

A ruptura da linha de sinal não garante necessariamente que a tendência de médio prazo tenha mudado.

No mercado em constante evolução, utilizar o cruzamento das médias móveis duplas como limiar pode perder mais oportunidades de negociação.

Orientações de otimização

  1. Adicionar indicadores de filtragem de liquidez e volatilidade para reduzir a frequência de abertura e evitar negociações ineficazes, como adicionar volume de negociação, ajustar dinamicamente os parâmetros da média móvel, etc.

  2. Combinar vários outros indicadores técnicos para formar uma carteira de indicadores para melhorar a qualidade do sinal.

  3. Adicionar algoritmos de aprendizagem de máquina para treinar parâmetros e limiares de atenção que sejam mais adequados para o ambiente atual do mercado, reduzindo a intervenção humana.

  4. Combinar o VIX e outros índices de medo para prever as tendências e a volatilidade do mercado e ajustar dinamicamente os parâmetros para aproveitar melhor as oportunidades do MACD.

Conclusão

A estratégia de cruzamento do MACD com sinal usa o princípio do cruzamento duplo da média móvel para gerar sinais de negociação. Desenhando o gráfico de preços pela diferença entre as médias móveis rápidas e lentas, as mudanças de tendência de preço de médio prazo terão características óbvias. A adição da linha de sinal também filtra efetivamente alguns sinais ruidosos. A estratégia tem algumas vantagens em capturar inversões de tendência de médio prazo relativamente claras. No entanto, o cruzamento do MACD e da linha de sinal não pode determinar completamente a mudança fundamental na estrutura do mercado, e os sinais de negociação precisam ser tratados com cautela.


/*backtest
start: 2022-12-06 00:00:00
end: 2023-12-12 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@author : SudeepBisht
//@version=2
strategy(title="MACD with Signal", shorttitle="MACD_with_Signal")
source = close
useCurrentRes = input(true, title="Use Current Chart Resolution?")
resCustom = input(title="Use Different Timeframe? Uncheck Box Above", defval="60")
smd = input(true, title="Show MacD & Signal Line? Also Turn Off Dots Below")
sd = input(true, title="Show Dots When MacD Crosses Signal Line?")
sh = input(true, title="Show Histogram?")
macd_colorChange = input(true,title="Change MacD Line Color-Signal Line Cross?")
hist_colorChange = input(true,title="MacD Histogram 4 Colors?")

res = useCurrentRes ? timeframe.period : resCustom

fastLength = input(12, minval=1), slowLength=input(26,minval=1)
signalLength=input(9,minval=1)

fastMA = ema(source, fastLength)
slowMA = ema(source, slowLength)

macd = fastMA - slowMA
signal = sma(macd, signalLength)
hist = macd - signal

outMacD = request.security(syminfo.tickerid, res, macd)
outSignal = request.security(syminfo.tickerid, res, signal)
outHist = request.security(syminfo.tickerid, res, hist)

histA_IsUp = outHist > outHist[1] and outHist > 0
histA_IsDown = outHist < outHist[1] and outHist > 0
histB_IsDown = outHist < outHist[1] and outHist <= 0
histB_IsUp = outHist > outHist[1] and outHist <= 0

//MacD Color Definitions
macd_IsAbove = outMacD >= outSignal
macd_IsBelow = outMacD < outSignal

plot_color = hist_colorChange ? histA_IsUp ? green : histA_IsDown ? lime : histB_IsDown ? red : histB_IsUp ? maroon :yellow :gray
macd_color = macd_colorChange ? macd_IsAbove ? green : red : red
signal_color = macd_colorChange ? macd_IsAbove ? yellow : yellow : lime

circleYPosition = outSignal
 
plot(smd and outMacD ? outMacD : na, title="MACD", color=macd_color, linewidth=3)
plot(smd and outSignal ? outSignal : na, title="Signal", color=blue, style=line ,linewidth=1)
plot(sh and outHist ? outHist : na, title="", color=plot_color, style=columns, linewidth=4)
//plot(sd and cross(outMacD, outSignal) ? circleYPosition : na, title="Cross", style=circles, linewidth=4, color=macd_color)
hline(0, '0 Line',  linewidth=2, color=white)

macd_chk=smd and outMacD ? outMacD : na
checker=smd and outSignal ? outSignal : na
if (crossover(macd_chk,checker))
    strategy.entry("BBandLE", strategy.long)

if (crossunder(macd_chk, checker))
    strategy.entry("BBandSE", strategy.short)


Mais.