Estratégia de negociação MACD de cruzamento de média móvel

Autora:ChaoZhang, Data: 2024-02-22 16:25:13
Tags:

img

Resumo

A estratégia de negociação de cruzamento da média móvel MACD é uma estratégia quantitativa de negociação que rastreia as situações de cruzamento de médias móveis exponenciais (EMA) de curto e longo prazo e faz operações de compra e venda quando ocorrem cruz de ouro e cruz morta.

Estratégia lógica

Esta estratégia baseia-se principalmente na EMA de 12 dias, na EMA de 26 dias e no indicador MACD.

  1. Calcular a EMA de 12 dias e a EMA de 26 dias.
  2. Calcular o MACD (ou seja, a EMA de 12 dias menos a EMA de 26 dias).
  3. Calcule a EMA de 9 dias do MACD como linha de sinal.
  4. Quando o MACD ultrapassa a linha de sinal, um sinal de compra é gerado.
  5. Quando o MACD cai abaixo da linha de sinal, um sinal de venda é gerado.
  6. Faça a operação de compra ou venda correspondente no fechamento do segundo candelabro após o sinal ser gerado.

Além disso, esta estratégia estabelece também algumas condições de filtragem:

  1. A hora de negociação é a hora de não encerramento de cada dia de negociação.
  2. O valor absoluto da diferença entre o MACD e a linha de sinal deve ser superior a 0,08.
  3. Só é permitida uma direção de posição por vez.

Análise das vantagens

Esta estratégia combina o crossover da média móvel e o indicador MACD, que pode capturar eficazmente os pontos de inflexão das tendências de curto e médio prazo do mercado.

  1. As regras da estratégia são simples e claras, fáceis de compreender e de aplicar.
  2. Os parâmetros dos indicadores são otimizados para um desempenho relativamente estável.
  3. O valor da posição em risco deve ser calculado em função da posição em risco.
  4. A lógica de negociação é rigorosa para evitar negociações inválidas.

Análise de riscos

Esta estratégia tem também alguns riscos:

  1. Risco de sobreajuste dos dados de backtesting: a aplicação real pode exigir ajustes de parâmetros e limiares.
  2. Risco elevado de custos de deslizamento decorrente de negociações frequentes.
  3. Risco de perdas decorrentes da não saída atempada quando a tendência se inverter.
  4. Aumentar o risco de alavancagem inerente à própria negociação quantitativa.

Métodos de atenuação correspondentes:

  1. Otimizar dinamicamente os parâmetros e ajustar os limiares.
  2. Relaxar adequadamente as regras de negociação para reduzir as negociações desnecessárias.
  3. Combine mais indicadores para avaliar os sinais de reversão.
  4. Controle rigorosamente as posições e a alavancagem.

Orientações de otimização

Os principais aspectos para a otimização desta estratégia incluem:

  1. Teste combinações de médias móveis de ciclo mais longo para encontrar parâmetros ótimos.
  2. Adicione fundamentos como desempenho financeiro, eventos significativos, etc. como filtros.
  3. Incorporar mais indicadores para determinar o tempo de reversão da tendência, como Bandas de Bollinger, KDJ etc.
  4. Desenvolver mecanismos de stop loss. Cortar ativamente as perdas quando as perdas atingirem pontos de stop loss pré-estabelecidos.
  5. Adicionar a taxa de extracção para controlar a extracção máxima.

Resumo

A estratégia de negociação MACD gera sinais de negociação através de um simples rastreamento de tendências e controla efetivamente os riscos com condições de filtragem adequadas.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("EMMA", max_bars_back = 200)

var up1 = #26A69A
var up2 = #B2DFDB
var down1 = #FF5252
var down2 = #FFCDD2
var confirmationLength = 2

var earliest = timestamp("20 Jan 2024 00:00 +0000")

// Regn u
shortEMA = ta.ema(close, 12)
longEMA = ta.ema(close, 26)
macd = shortEMA - longEMA
signal = ta.ema(macd, 9)
delta = macd - signal
absDelta = math.abs(delta)
previousDelta = delta[1]

signalCrossover = ta.crossover(macd, signal)
signalCrossunder = ta.crossunder(macd, signal)

harskiftetdag = hour(time[confirmationLength]) > hour(time)

enterLongSignal = signalCrossover[confirmationLength] and (macd > signal) and (absDelta >= 0.08)
exitLongSignal = signalCrossunder[confirmationLength] and (macd < signal)

enterShortSignal = signalCrossunder[confirmationLength] and (macd < signal) and (absDelta >= 0.08)
exitShortSignal = signalCrossover[confirmationLength] and (macd > signal)

// Så er det tid til at købe noe
qty = math.floor(strategy.equity / close)

if time >= earliest and not harskiftetdag
    if exitLongSignal 
        strategy.close("long")
    else if enterLongSignal
        strategy.close("short")
        strategy.entry("long", strategy.long, qty = qty)

    if exitShortSignal
        strategy.close("short")
    else if enterShortSignal
        strategy.close("long")
        strategy.entry("short", strategy.short, qty = qty)

// Så er det tid til at vise noe

plot(macd, color=color.blue)
plot(signal, color=color.orange)

// bgcolor(color = delta > 0.1 ? color.new(color.green, 90) : color.new(color.green, 100))
// bgcolor(color = signalCrossover ? color.purple : signalCrossunder ? color.aqua : color.new(color.green, 100))

histogramColor = delta > 0 ? (previousDelta < delta ? up1 : up2) : (previousDelta > delta ? down1 : down2)

plot(
     delta,
     style=plot.style_columns,
     color=histogramColor
     )

Mais.