Estratégia de rastreamento de tendências de Golden Cross e Dead Cross do MACD


Data de criação: 2023-12-22 11:45:54 última modificação: 2023-12-22 11:45:54
cópia: 1 Cliques: 1112
1
focar em
1623
Seguidores

Estratégia de rastreamento de tendências de Golden Cross e Dead Cross do MACD

Visão geral

A estratégia julga a direção da tendência através do forquilho do MACD, faz um stop loss em conjunto com o ATR, e permite o acompanhamento da tendência. O nome da estratégia destaca o uso do indicador MACD como um sinal de forquilho do forquilho do ouro.

Princípio da estratégia

Quando a linha MACD passa de baixo para cima através da linha de sinal e torna-se positivo, gera um sinal de compra, que é o sinal do garfo de ouro, que indica a formação de uma tendência ascendente. Quando a linha MACD passa de cima para baixo através da linha de sinal e torna-se negativo, gera um sinal de venda, que é o sinal de garfo de morte, que indica a formação de uma tendência descendente.

A estratégia é usar este princípio, fazer mais quando forcas douradas, fazer espaço quando forcas mortas, para realizar o acompanhamento da tendência. Ao mesmo tempo, a estratégia também introduziu o indicador ATR para calcular o stop loss stop, para concluir a construção do sistema de negociação.

Concretamente, a estratégia primeiro calcula os indicadores MACD padrão, como média móvel rápida, média móvel lenta, diferença de MACD e linha de sinal. Em seguida, de acordo com os cinco sinais selecionados (sinais de continuação, sinal de inversão, sinal de gráfico colunário, cruzamento de eixos zero do MACD, cruzamento de eixos zero do sinal) julgar a cruz de ouro.

Análise de vantagens

A estratégia tem as seguintes vantagens:

  1. O uso do indicador MACD para determinar a direção da tendência é preciso e confiável, e o indicador MACD tem se destacado em julgar tendências por muitos anos.

  2. A configuração de stop loss combinada com o indicador ATR permite controlar efetivamente o risco-retorno de uma única transação, reduzindo a probabilidade de perda.

  3. A oferta de cinco sinais opcionais permite a adoção de sinais mais adequados para diferentes mercados, melhorando a adaptabilidade da estratégia.

  4. Os melhores resultados de negociação podem ser obtidos através da otimização de parâmetros.

Riscos e soluções

A estratégia também apresenta alguns riscos:

  1. Os indicadores MACD são propensos a produzir sinais errados que podem causar perdas desnecessárias. Podem ser combinados com outros indicadores para filtrar os sinais.

  2. O indicador ATR modela apenas oscilações do período mais recente e não pode fazer um stop loss preciso para situações extremas. Pode ser resolvido com a introdução de stop loss dinâmico.

  3. O efeito do sinal selecionado pode ser instável e requer um grande número de testes de retorno para determinar os melhores parâmetros.

  4. Os parâmetros de sinalização e os parâmetros de gerenciamento de risco precisam ser otimizados simultaneamente, caso contrário, é difícil obter resultados ótimos. Recomenda-se o uso de uma abordagem de otimização em etapas.

Recomendações de otimização

A estratégia também pode ser melhorada em:

  1. Tente outras médias móveis, como TMA, hullMA, etc., filtrando os sinais MACD.

  2. A partir daí, os investidores podem testar mecanismos de stop-loss dinâmicos para lidar melhor com oscilações de tendências extremas.

  3. Otimizar a cada passo a combinação de parâmetros tradicionais do indicador MACD para encontrar o melhor parâmetro.

  4. O ATR é um método de aprendizagem de máquina para encontrar os melhores ATRs e gerenciar melhor o risco.

  5. Os cinco tipos de sinais foram testados separadamente para determinar o melhor sinal.

  6. Treinar a rede neural para julgar o efeito do tipo de sinal e procurar novos sinais baseados no MACD.

Resumir

A estratégia de acompanhamento de tendências MACD Gold Fork Dead Fork, que usa o indicador MACD para determinar a direção da tendência, em conjunto com o indicador ATR para fazer um stop loss, pode efetivamente obter oportunidades de negociação de tendências. A estratégia tem várias vantagens, como otimizável dos parâmetros do indicador, a integração do mecanismo de parada e o tipo de sinal opcional. O próximo trabalho será iniciado em melhorar a qualidade do sinal, aperfeiçoar o mecanismo de parada e a otimização da seleção de parâmetros, para obter melhores resultados de feedback e disco rígido.

Código-fonte da estratégia
/*backtest
start: 2023-11-21 00:00:00
end: 2023-12-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/
// © vuagnouxb

//@version=4
strategy("BV's MACD SIGNAL TESTER", overlay=true)

//------------------------------------------------------------------------
//----------            Confirmation Calculation              ------------ INPUT
//------------------------------------------------------------------------

// Getting inputs
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

// plot(hist, title="Histogram", style=plot.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)

// -- Trade entry signals

signalChoice = input(title = "Choose your signal", defval = "Continuation", options = ["Continuation", "Reversal", "Histogram", "MACD Line ZC", "Signal Line ZC"])

continuationSignalLong = signalChoice == "Continuation" ? crossover(macd, signal) and macd > 0 :
   signalChoice == "Reversal" ? crossover(macd, signal) and macd < 0 : 
   signalChoice == "Histogram" ? crossover(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossover(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossover(signal, 0) :
   false
   
continuationSignalShort = signalChoice == "Continuation" ? crossunder(macd, signal) and macd < 0 :
   signalChoice == "Reversal" ? crossover(signal, macd) and macd > 0 : 
   signalChoice == "Histogram" ? crossunder(hist, 0) : 
   signalChoice == "MACD Line ZC" ? crossunder(macd, 0) :
   signalChoice == "Signal Line ZC" ? crossunder(signal, 0) :
   false

longCondition = continuationSignalLong

shortCondition = continuationSignalShort

//------------------------------------------------------------------------
//----------             ATR MONEY MANAGEMENT                 ------------
//------------------------------------------------------------------------

SLmultiplier = 1.5
TPmultiplier = 1

JPYPair = input(type = input.bool, title = "JPY Pair ?", defval = false)
pipAdjuster = JPYPair ? 1000 : 100000


ATR = atr(14) * pipAdjuster // 1000 for jpy pairs : 100000
SL = ATR * SLmultiplier
TP = ATR * TPmultiplier

//------------------------------------------------------------------------
//----------                  TIME FILTER                     ------------
//------------------------------------------------------------------------

YearOfTesting = input(title = "How many years of testing ?" , type = input.integer, defval = 3)

_time = 2020 - YearOfTesting

timeFilter = (year > _time) 

//------------------------------------------------------------------------
//---------                 ENTRY FUNCTIONS                    ----------- INPUT
//------------------------------------------------------------------------

if (longCondition and timeFilter)  
    strategy.entry("Long", strategy.long)

if (shortCondition and timeFilter) 
    strategy.entry("Short", strategy.short)
    
//------------------------------------------------------------------------
//---------                 EXIT  FUNCTIONS                    -----------
//------------------------------------------------------------------------


strategy.exit("ATR", from_entry = "Long", profit = TP, loss = SL)  

strategy.exit("ATR", from_entry = "Short", profit = TP, loss = SL)