MACD Golden Cross Death Cross Tendência Seguindo a Estratégia

Autora:ChaoZhang, Data: 22-12-2023 11:45:54
Tags:

img

Resumo

Esta estratégia usa a cruz de ouro e a cruz da morte do indicador MACD para determinar a direção da tendência, e usa o indicador ATR para stop loss e take profit para implementar a tendência após a negociação.

Estratégia lógica

Quando a linha MACD cruza acima da linha de sinal de baixo e se torna positiva, um sinal de compra é gerado, que é chamado de sinal de cruz de ouro, indicando uma tendência de alta no preço da ação.

A estratégia simplesmente vai longo em cruzes de ouro e vai curto em cruzes de morte para seguir as tendências.

Especificamente, a estratégia primeiro calcula a média móvel rápida, a média móvel lenta, a diferença MACD, a linha de sinal e outros indicadores MACD padrão. Em seguida, com base no um dos cinco tipos de sinal escolhidos (sinal de continuação, sinal de reversão, sinal de histograma, cruz zero MACD, cruz zero da linha de sinal), cruzes de ouro e cruzes de morte são determinadas. Finalmente, o stop loss e take profit são definidos com base no indicador ATR para completar a lógica de entrada e saída.

Análise das vantagens

A estratégia apresenta as seguintes vantagens:

  1. Usar o indicador MACD para determinar a direção da tendência é preciso e confiável.

  2. As configurações de stop loss e take profit baseadas no indicador ATR podem controlar eficazmente a relação risco-recompensa de operações individuais e reduzir a probabilidade de perdas.

  3. O fornecimento de cinco tipos de sinais opcionais permite utilizar o sinal mais adequado para diferentes mercados, melhorando a adaptabilidade da estratégia.

  4. Existem muitos parâmetros de entrada ajustáveis que podem ser otimizados para um melhor desempenho comercial.

Riscos e soluções

Há também alguns riscos com esta estratégia:

  1. O indicador MACD pode facilmente gerar sinais falsos e causar perdas desnecessárias. Outros indicadores podem ser usados para filtrar os sinais.

  2. O indicador ATR só modela as flutuações do período recente e não pode parar com precisão as perdas em condições extremas de mercado.

  3. O desempenho dos sinais escolhidos pode não ser estável. É necessário um extenso backtesting para determinar os parâmetros ideais.

  4. Os parâmetros de sinalização e os parâmetros de gestão de riscos devem ser otimizados em conjunto, caso contrário é difícil encontrar os resultados globais ótimos.

Sugestões de otimização

A estratégia pode também ser otimizada nos seguintes aspectos:

  1. Tente outras médias móveis como TMA, Hull MA etc para filtrar sinais MACD.

  2. Tente mecanismos de parada dinâmicos que possam lidar melhor com flutuações em condições extremas de mercado.

  3. Otimizar exaustivamente os parâmetros MACD tradicionais para encontrar melhores combinações.

  4. Usar métodos de aprendizagem automática para encontrar múltiplos ATR ideais para uma melhor gestão dos riscos.

  5. Testar cada um dos cinco tipos de sinal separadamente para determinar o sinal ideal.

  6. Treinar redes neurais para julgar a qualidade do sinal e descobrir novos sinais baseados no MACD.

Conclusão

A estratégia de seguimento de tendência do MACD utiliza o indicador MACD para determinar a direção da tendência e define stop loss e take profit com o indicador ATR, que pode efetivamente capturar oportunidades de negociação de tendência. A estratégia tem múltiplas vantagens, como parâmetros ajustáveis, mecanismos completos de parada e tipos de sinal opcionais. O próximo passo é melhorar a qualidade do sinal, mecanismos de stop loss e otimização de seleção de parâmetros, a fim de obter melhores resultados de backtest e ao vivo.


/*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)  

Mais.