Cette stratégie utilise la croix dorée et la croix de la mort de l'indicateur MACD pour déterminer la direction de la tendance, et utilise l'indicateur ATR pour le stop loss et le take profit pour mettre en œuvre la tendance après la négociation.
Lorsque la ligne MACD traverse au-dessus de la ligne de signal d'en bas et devient positive, un signal d'achat est généré, qui est appelé le signal de croix dorée, indiquant une tendance à la hausse du prix de l'action.
La stratégie va simplement long sur les croix dorées et court sur les croix mortes pour suivre les tendances.
Plus précisément, la stratégie calcule d'abord la moyenne mobile rapide, la moyenne mobile lente, la différence MACD, la ligne de signal et d'autres indicateurs MACD standard. Ensuite, sur la base de l'un des cinq types de signal choisis (signal de continuation, signal de renversement, signal d'histogramme, MACD zero cross, signal de ligne zéro cross), des croix dorées et des croix de mort sont déterminées. Enfin, le stop loss et le take profit sont définis sur la base de l'indicateur ATR pour compléter la logique d'entrée et de sortie.
La stratégie présente les avantages suivants:
L'utilisation de l'indicateur MACD pour déterminer la direction de la tendance est précise et fiable.
Les paramètres stop loss et take profit basés sur l'indicateur ATR permettent de contrôler efficacement le ratio risque/rendement des transactions individuelles et de réduire la probabilité de pertes.
La fourniture de cinq types de signaux facultatifs permet d'utiliser le signal le plus approprié pour différents marchés, ce qui améliore l'adaptabilité de la stratégie.
Il existe de nombreux paramètres d'entrée réglables qui peuvent être optimisés pour de meilleures performances commerciales.
Cette stratégie comporte également certains risques:
L'indicateur MACD peut facilement générer de faux signaux et causer des pertes inutiles.
L'indicateur ATR ne modélise que les fluctuations de la période récente et ne peut pas arrêter avec précision les pertes dans des conditions de marché extrêmes.
Les performances des signaux choisis peuvent ne pas être stables. Un backtesting approfondi est nécessaire pour déterminer les paramètres optimaux.
Les paramètres de signal et les paramètres de gestion des risques doivent être optimisés conjointement, faute de quoi il est difficile de trouver les résultats globalement optimaux.
La stratégie peut également être optimisée dans les aspects suivants:
Essayez d'autres moyennes mobiles comme TMA, Hull MA etc pour filtrer les signaux MACD.
Essayez des mécanismes d'arrêt dynamiques qui peuvent mieux gérer les fluctuations dans des conditions de marché extrêmes.
Optimiser de manière exhaustive les paramètres MACD traditionnels pour trouver de meilleures combinaisons.
Utiliser des méthodes d'apprentissage automatique pour trouver des multiples ATR optimaux pour une meilleure gestion des risques.
Test de retour de chacun des cinq types de signaux séparément pour déterminer le signal optimal.
Former les réseaux neuronaux pour juger de la qualité du signal et découvrir de nouveaux signaux basés sur le MACD.
La stratégie de suivi de la tendance MACD utilise l'indicateur MACD pour déterminer la direction de la tendance et définit un stop loss et un profit avec l'indicateur ATR, ce qui peut capturer efficacement les opportunités de trading de tendance. La stratégie présente de multiples avantages tels que des paramètres réglables, des mécanismes de stop complets et des types de signaux optionnels.
/*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)