La stratégie de trading de rupture de momentum est une stratégie de suivi des tendances qui génère des signaux de trading en détectant les ruptures de prix au-delà des niveaux de support/résistance clés.
L'indicateur de base de cette stratégie est le canal de Donchian. Le canal de Donchian se compose du prix le plus élevé, du prix le plus bas et du prix de la ligne médiane sur une période déterminée. La bande supérieure et inférieure du canal relient les prix les plus élevés et les plus bas en conséquence sur la période de rétrospective. Un signal long est généré lorsque le prix dépasse la bande supérieure, tandis qu'un signal court est généré sur une rupture en dessous de la bande inférieure, reflétant les changements de dynamique du marché.
La moyenne mobile est utilisée pour mesurer la direction de la tendance. Seuls les signaux d'achat dont le prix est supérieur à la moyenne mobile sont pris pour éviter les consolidations.
Plus précisément, la condition d'entrée consiste à ce que le prix dépasse la bande supérieure du canal de Donchian ET se ferme au-dessus de la moyenne mobile.
Le stop loss suit la bande inférieure du canal de Donchian, assurant que le stop s'ajuste plus haut avec la tendance.
Cette stratégie combine efficacement deux indicateurs pour juger de la direction et de l'élan de la tendance, en évitant les transactions erronées de faux signaux de rupture.
Les avantages sont les suivants:
Le canal de Donchian détermine dynamiquement les principaux niveaux de support/résistance, en identifiant les points tournants de la tendance.
La moyenne mobile élimine les consolidations, évitant ainsi les détournements inutiles.
Suivre la bande inférieure du canal Donchian permet de maximiser les profits.
Des paramètres raisonnables offrent une flexibilité dans différents environnements de marché.
Les principaux risques rencontrés:
Risque d'échec de la rupture - Le prix ne parvient pas à maintenir la dynamique après la rupture au-dessus de la bande supérieure.
Risque d'inversion de tendance - Le prix s'inverse avant d'atteindre le stop loss.
Risque d'optimisation des paramètres - Les paramètres inefficaces entraînent une survente ou des signaux insuffisants.
Pour atténuer ce phénomène, des facteurs tels que la confirmation du volume, le réglage de la moyenne mobile et les distances raisonnables d'arrêt doivent être pris en compte.
D'autres optimisations:
Ajoutez un filtre de volume pour assurer une grande dynamique.
Optimiser les périodes de moyenne mobile pour les caractéristiques des instruments.
Mécanisme de stop loss adaptatif basé sur la dynamique de la volatilité des prix.
Mécanisme de rentrée après arrêt initial pour capturer les mouvements supplémentaires de reprise de tendance.
Des essais solides sur plusieurs marchés pour identifier les paramètres par nuances du produit.
La stratégie de trading de rupture de momentum combine des indicateurs pour évaluer efficacement la tendance et la force de la dynamique, évitant les problèmes courants rencontrés par les systèmes de tendance concernant les entrées aveugles.
/*backtest start: 2022-12-12 00:00:00 end: 2023-12-18 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 // Revision: 1 // Author: @millerrh // Strategy: // Entry: Buy when Donchian Channel breaks out // Exit: Trail a stop with the lower Donchian Channel band // Conditions/Variables: // 1. Can add a filter to only take setups that are above a user-defined moving average (helps avoid trading counter trend) // 2. Manually configure which dates to back test // 3. User-Configurable DC Channel length // === CALL STRATEGY/STUDY, PROGRAMATICALLY ENTER STRATEGY PARAMETERS HERE SO YOU DON'T HAVE TO CHANGE THEM EVERY TIME YOU RUN A TEST === // (STRATEGY ONLY) - Comment out srategy() when in a study() strategy("Donchian Breakout", overlay=true, initial_capital=10000, currency='USD', default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.1) // (STUDY ONLY) - Comment out study() when in a strategy() //study("Donchian Breakout", overlay=true) // === BACKTEST RANGE === From_Year = input(defval = 2019, title = "From Year") From_Month = input(defval = 1, title = "From Month", minval = 1, maxval = 12) From_Day = input(defval = 1, title = "From Day", minval = 1, maxval = 31) To_Year = input(defval = 9999, title = "To Year") To_Month = input(defval = 1, title = "To Month", minval = 1, maxval = 12) To_Day = input(defval = 1, title = "To Day", minval = 1, maxval = 31) Start = timestamp(From_Year, From_Month, From_Day, 00, 00) // backtest start window Finish = timestamp(To_Year, To_Month, To_Day, 23, 59) // backtest finish window // == INPUTS == trigInput = input(title = "Execute Trades On...", defval = "Wick", options=["Wick","Close"]) // Useful for comparing standing stop orders vs. waiting for candle closes prior to action stopTrail = input(title = "Trail Stops On...", defval = "ATR", options = ["ATR","Bottom of DC Channel","Midline of DC Channel","Tightest of ATR/Bot DC Channel"]) dcPeriod = input(title="DC period", type=input.integer, defval=20) // === PLOT THE DONCHIAN CHANNEL === // Logic dcUpper = highest(high, dcPeriod) dcLower = lowest(low, dcPeriod) dcMid = avg(dcUpper, dcLower) // Plotting dcUplot = plot(dcUpper, color=color.blue, linewidth=1, title="Upper Channel Line") dcLplot = plot(dcLower, color=color.blue, linewidth=1, title="Lower Channel Line") dcMidPlot = plot(dcMid, color=color.gray, linewidth=1, title="Mid-Line Average") fill(dcUplot, dcLplot, color=color.gray, transp=90) // == FILTERING == // Inputs useMaFilter = input(title = "Use MA for Filtering?", type = input.bool, defval = true) maType = input(defval="SMA", options=["EMA", "SMA"], title = "MA Type For Filtering") maLength = input(defval = 100, title = "MA Period for Filtering", minval = 1) // Declare function to be able to swap out EMA/SMA ma(maType, src, length) => maType == "EMA" ? ema(src, length) : sma(src, length) //Ternary Operator (if maType equals EMA, then do ema calc, else do sma calc) maFilter = ma(maType, close, maLength) plot(maFilter, title = "Trend Filter MA", color = color.green, linewidth = 3, style = plot.style_line, transp = 50) // Check to see if the useMaFilter check box is checked, this then inputs this conditional "maFilterCheck" variable into the strategy entry maFilterCheck = if useMaFilter == true maFilter else 0 // == ENTRY AND EXIT CRITERIA == // Trigger stop based on candle close or High/Low (i.e. Wick) - If doing daily timeframe, can do candle close. Intraday should use wick. trigResistance = trigInput == "Close" ? close : trigInput == "Wick" ? high : na trigSupport = trigInput == "Close" ? close : trigInput == "Wick" ? low : na buySignal = trigResistance >= dcUpper[1] // The [1] looks at the previous bar's value as it didn't seem to be triggering correctly without it (likely) DC moves with each bar sellSignal = trigSupport <= dcLower[1] buy = buySignal and dcUpper[1] > maFilterCheck // All these conditions need to be met to buy // (STRATEGY ONLY) Comment out for Study // This string of code enters and exits at the close if (trigInput == "Close") strategy.entry("Long", strategy.long, when = buy) strategy.close("Long", when = sellSignal) // This string of code enters and exits at the wick (i.e. with pre-set stops) if (trigInput == "Wick") strategy.entry("Long", strategy.long, stop = dcUpper[1], when = time > Start and time < Finish and dcUpper[1] > maFilterCheck) strategy.exit("Exit Long", from_entry = "Long", stop = dcLower[1])