Estratégia quantitativa MACD de cruzamento de média móvel dupla

Autora:ChaoZhang, Data: 2024-02-22 15:32:42
Tags:

img

Resumo

Esta estratégia gera o indicador MACD calculando a diferença entre as linhas médias móveis rápidas e lentas, e julga a tendência e as áreas de sobrecompra / sobrevenda dos mercados financeiros juntamente com a linha de sinal.

Estratégia lógica

A lógica básica é usar o indicador MACD gerado a partir da diferença de MA rápida e lenta para determinar a direção da tendência do mercado e a linha de sinal para julgar os níveis de sobrecompra / sobrevenda. Quando o MACD e a linha de sinal formam uma cruz de ouro, é um sinal longo para ir longo. Quando forma uma cruz morta, é um sinal curto para ir curto. Enquanto isso, ele usa a relação do preço com o MA de 200 dias para filtrar os sinais, tomando apenas sinais longos quando o preço está acima do MA de 200 dias e sinais curtos quando o preço está abaixo do MA de 200 dias, a fim de evitar deslizamentos durante tendências fortes.

O método específico de cálculo é o seguinte:

  1. Média móvel rápida (EMA de 12 dias) menos Média móvel lenta (EMA de 26 dias) para obter o MACD
  2. A EMA de 9 dias do MACD para obter a linha de sinal
  3. MACD menos linha de sinal para obter o histograma MACD

Quando o MACD cruza acima da linha de sinal enquanto ambos estão abaixo de 0, é um sinal longo de cruz de ouro. Quando o MACD cruza abaixo da linha de sinal enquanto ambos estão acima de 0, é um sinal curto de cruz morta. Enquanto isso, só leva muito tempo quando o preço está acima de MA de 200 dias e curto quando o preço está abaixo de MA de 200 dias.

Vantagens

  1. O uso de um sistema de indicadores duplos evita as limitações de um único indicador e melhora a precisão
  2. A combinação de filtros duplos de ação de preços e MA evita problemas durante tendências fortes
  3. Grande espaço de otimização de parâmetros para se adaptar a diferentes ambientes de mercado
  4. A definição conservadora dos parâmetros leva a um número menor de sinais, mas de melhor qualidade
  5. Lógica estratégica simples e fácil de implementar

Riscos

  1. A volatilidade do mercado pode causar erros no julgamento dos indicadores
  2. A natureza atrasada dos AC afecta a oportunização da estratégia
  3. Menos sinais podem perder oportunidades de tendência
  4. Riscos de otimização excessiva na otimização de parâmetros
  5. Falta de controlo da utilização e de mecanismos de suspensão das perdas

O valor da posição em risco deve ser calculado de acordo com o método de classificação da posição em risco.

Orientações de otimização

1.Testado em diferentes prazos de tempo, de 15m até 1D, resultados ótimos em 4H em rendimentos ajustados ao risco

2.Optimize MA rápido e lento para que o MACD capte ciclos, 7-21 bom para 15m

3.A MA de Hull para o MACD deu bons resultados

4.A suspensão de perdas de atraso melhora a gestão dos riscos

Conclusão

Esta é, em geral, uma estratégia muito simples e prática, gerando sinais de negociação de alta probabilidade através de sistema de indicadores duplos e filtragem de preços. Tem uma margem de lucro relativamente alta, usa a combinação clássica de parâmetros MACD para evitar a otimização excessiva. Ainda há grande espaço para otimização ajustando os parâmetros MA, adicionando outros indicadores e mecanismos de stop loss para melhorar ainda mais o desempenho.


/*backtest
start: 2024-02-14 00:00:00
end: 2024-02-21 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © Hurmun

//@version=4
strategy("Simple MACD strategy ", overlay=true, margin_long=100, margin_short=100)


fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA (Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA (Signal Line)", type=input.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


movinga2 = input(title="movinga 2", type=input.integer, defval=200)

movinga200 = sma(close, movinga2)

plot(movinga200, "MA", color.orange)
longCondition = crossover(macd, signal) and macd < 0 and signal < 0 and close > movinga200
if (longCondition)
    strategy.entry("My Long Entry Id", strategy.long)

shortCondition = crossunder(macd, signal) and macd > 0 and signal > 0 and close < movinga200
if (shortCondition)
    strategy.entry("My Short Entry Id", strategy.short)
    
shortProfitPerc = input(title="Short Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
longProfitPerc = input(title="Long Take Profit (%)", minval=0.0, step=0.1, defval=2) / 100
    
stoploss = input(title="stoploss in %", minval = 0.0, step=1, defval=2) /100

longStoploss = strategy.position_avg_price * (1 - stoploss)
longExitPrice  = strategy.position_avg_price * (1 + longProfitPerc)

shortExitPrice = strategy.position_avg_price * (1 - shortProfitPerc)
shortStoploss = strategy.position_avg_price * (1 + stoploss)
    
if (strategy.position_size > 0 )
    strategy.exit(id="XL TP", limit=longExitPrice, stop=longStoploss)






if (strategy.position_size < 0 )
    strategy.exit(id="XS TP", limit=shortExitPrice, stop=shortStoploss)

Mais.