Estratégia de negociação quantitativa do MACD

Autora:ChaoZhang, Data: 2023-12-19 15:11:57
Tags:

img

Resumo

Esta estratégia utiliza o indicador MACD para criar sinais de negociação de posições longas quando o MACD está abaixo de um determinado nível para aproveitar oportunidades de reversão média.

Estratégia lógica

Um sinal longo é gerado quando a linha MACD está abaixo da linha SIGNAL e o valor absoluto da MACD está abaixo de -0.00025. Depois de tomar uma posição longa, se a linha MACD cruzar acima da linha SIGNAL novamente, a posição será fechada.

De acordo com a teoria das médias móveis, há uma probabilidade de reversão média no curto prazo, e um sinal longo é estabelecido com base nessa probabilidade.

Vantagens

  1. Utiliza o indicador MACD para julgar os níveis de sobrevenda, que tem uma certa confiabilidade.
  2. Sinais de negociação simples e regras fáceis de implementar.
  3. Os períodos de detenção mais longos significam uma menor frequência de negociação, reduzindo os custos de transacção e o deslizamento.

Riscos

  1. O risco de uma reversão fracassada significa perdas se não houver reversão.
  2. Sinais inválidos da má selecção dos parâmetros MACD.

Este risco pode ser reduzido através da otimização de parâmetros.

Melhorias

  1. Otimizar os parâmetros do MACD para encontrar as melhores combinações.
  2. Teste diferentes períodos de espera para encontrar a duração ideal.
  3. Adicionar mecanismos de stop loss.

Resumo

Esta estratégia utiliza a probabilidade de reversões médias dos níveis de sobrevenda identificados pelo indicador MACD para gerar sinais longos e lucros através de longos períodos de retenção.


//@version=3
strategy(title="MACD - EURUSD", shorttitle="MACD EURUSD")

// Getting inputs
fast_length = input(title="Fast Length",  defval=12)
slow_length = input(title="Slow Length",  defval=26)
src = input(title="Source", defval=close)
signal_length = input(title="Signal Smoothing",  minval = 1, maxval = 50, defval =9)
sma_source = input(title="Simple MA(Oscillator)", type=bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=bool, defval=false)

// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00

// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal

plot(hist, title="Histogram", style=columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)

longCond = crossover(macd, signal) and macd < -0.00025
exitLong = crossover(macd, hist)


strategy.entry("long", strategy.long,  when=longCond==true)
strategy.close("long", when=exitLong==true)

Mais.