Estratégia quantitativa MACD - estratégia de rompimento da média móvel dupla cruzada


Data de criação: 2024-02-22 15:32:42 última modificação: 2024-02-22 15:32:42
cópia: 0 Cliques: 679
1
focar em
1617
Seguidores

Estratégia quantitativa MACD - estratégia de rompimento da média móvel dupla cruzada

Visão geral

A estratégia de formar o MACD através do cálculo do diferencial entre a média móvel rápida e a média móvel lenta, em combinação com a linha de sinal para determinar a tendência do mercado financeiro e a zona de sobrevenda e sobrevenda, fazendo mais quando a MACD e a linha de sinal formam um multi-cabeça e o preço está acima da média de 200 dias, formando um forquilho de cabeça vazia e o preço está abaixo da média de 200 dias, fazendo parte da típica estratégia de ruptura da linha de média dupla.

Princípio da estratégia

O princípio básico é calcular o diferencial entre a média móvel rápida e a média móvel lenta para formar o indicador MACD e determinar a direção da tendência do mercado. Em seguida, use a linha de sinal para determinar a região de sobrevenda e sobrevenda. Quando o MACD e a linha de sinal formam um garfo de ouro, o sinal de mais de um cara é feito.

O método de cálculo é o seguinte:

  1. A média móvel rápida (EMA de 12 dias) menos a média móvel lenta (EMA de 26 dias) obtém o MACD
  2. EMA de 9o dia do MACD recebe uma linha de sinalização
  3. MACD menos a linha de sinalização para obter o MACD retângulo

Quando o MACD atravessa a linha de sinalização e o MACD e a linha de sinalização estão simultaneamente abaixo de 0, faça um sinal de mais para a forca dourada. Quando o MACD atravessa a linha de sinalização e o MACD e a linha de sinalização estão simultaneamente acima de 0, faça um sinal de vazio para a forca morta. Ao mesmo tempo, faça mais para a forca dourada apenas quando o preço estiver acima da linha média de 200 dias e faça vazio para a forca morta quando o preço estiver abaixo da linha média de 200 dias.

Vantagens estratégicas

  1. O uso de julgamento de duplo indicador evita as limitações de julgamento de um único indicador e aumenta a precisão do sinal
  2. Combinação de filtragem dupla de preço e correlação de linha de equilíbrio para evitar sinais de confusão em tendências fortes
  3. Parâmetros de otimização de espaço grande, pode ser adaptado a diferentes condições de mercado por meio do ajuste de parâmetros de linha média
  4. A configuração de parâmetros conservadores faz com que o sinal seja menor, mas mais preciso
  5. Estratégias fáceis de entender e de implementar

Risco estratégico

  1. Quando os mercados estão em alta, os indicadores podem ser influenciados para produzir sinais errados.
  2. O atraso do próprio sistema de equilíbrio afeta a oportunidade da estratégia
  3. Os sinais são menores e as oportunidades de tendência são mais fáceis de perder.
  4. PARAMETERS Optimização com risco de otimização excessiva
  5. Mecanismos de controle de retirada e de retirada de prejuízos ainda não foram aperfeiçoados

Pode-se reduzir o risco através de uma redução apropriada do ciclo de média, da adição de outros critérios de avaliação e da adição de medidas de suspensão.

Direção de otimização da estratégia

1.tested on different timeframes from 15m upto 1D, where optimal results where on 4H timeframe in terms of risk adjusted returns

2.optimize fast ma and slow ma so that macd represents cycle, I found 7-21 performs good for 15m chart

3.also tested hull moving average for MACD which gave good results

4.stoploss can also be trailed for better risk management

Resumir

Esta estratégia é muito simples e prática, gerando um sinal de negociação de alta probabilidade por meio de julgamento duplo de indicadores e filtragem de preços. A margem de lucro é alta e o conjunto de parâmetros clássicos do MACD não é otimizado em excesso.

Código-fonte da estratégia
/*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)