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.
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.
A estratégia apresenta as seguintes vantagens:
Usar o indicador MACD para determinar a direção da tendência é preciso e confiável.
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.
O fornecimento de cinco tipos de sinais opcionais permite utilizar o sinal mais adequado para diferentes mercados, melhorando a adaptabilidade da estratégia.
Existem muitos parâmetros de entrada ajustáveis que podem ser otimizados para um melhor desempenho comercial.
Há também alguns riscos com esta estratégia:
O indicador MACD pode facilmente gerar sinais falsos e causar perdas desnecessárias. Outros indicadores podem ser usados para filtrar os sinais.
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.
O desempenho dos sinais escolhidos pode não ser estável. É necessário um extenso backtesting para determinar os parâmetros ideais.
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.
A estratégia pode também ser otimizada nos seguintes aspectos:
Tente outras médias móveis como TMA, Hull MA etc para filtrar sinais MACD.
Tente mecanismos de parada dinâmicos que possam lidar melhor com flutuações em condições extremas de mercado.
Otimizar exaustivamente os parâmetros MACD tradicionais para encontrar melhores combinações.
Usar métodos de aprendizagem automática para encontrar múltiplos ATR ideais para uma melhor gestão dos riscos.
Testar cada um dos cinco tipos de sinal separadamente para determinar o sinal ideal.
Treinar redes neurais para julgar a qualidade do sinal e descobrir novos sinais baseados no MACD.
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)