
La stratégie est un système de suivi de tendance avancée qui combine un filtre EMA bi-indicateur avec un intervalle intelligent et un mécanisme de détection du bruit pour fournir des signaux de négociation clairs et exploitables. Son concept de conception central est d’éviter les marchés instables, d’améliorer la précision des transactions et de pouvoir s’adapter à différentes conditions de marché. La stratégie juge la direction de la tendance par le croisement de la ligne EMA haute et la ligne EMA basse, tout en utilisant des filtres d’intervalle et des filtres de taux d’oscillation pour éviter de négocier dans des environnements transversaux ou à faible volatilité, ce qui améliore considérablement le taux de réussite des transactions.
Le mécanisme central de la stratégie repose sur les éléments clés suivants:
Système de filtrage à double EMALa stratégie utilise deux moyennes mobiles indicielles (EMA à prix élevé et EMA à prix bas) pour déterminer la tendance du marché. Un signal de multiplication est généré lorsque le prix est simultanément au-dessus des deux lignes EMA; un signal de rupture est généré lorsque le prix est simultanément au-dessous des deux lignes EMA. Ce mécanisme de double confirmation réduit efficacement l’apparition de fausses ruptures.
Mécanisme de détection par intervalles: La stratégie utilise un algorithme de reconnaissance de la fourchette basé sur le pourcentage de la fourchette de prix, qui suspend automatiquement la négociation lorsque le marché entre dans la phase de rassemblement horizontal (c’est-à-dire que la fourchette de prix est inférieure à la valeur limite définie). Le système surveille en permanence le nombre de barres de fourchette consécutives et active le filtre de fourchette uniquement lorsqu’il est confirmé que le marché est dans un véritable état de fourchette, afin de ne pas manquer une opportunité de percée initiale.
Filtre de fluctuationEn calculant l’ATR (Average True Volatility Ratio) en pourcentage du prix actuel, la stratégie est capable d’identifier les environnements à faible volatilité et d’éviter de négocier dans ces conditions. Ce mécanisme assure la négociation uniquement lorsque le marché est suffisamment dynamique.
Principe de la transaction une fois par tendance: La stratégie implémente un mécanisme d’état de tendance qui assure qu’une seule transaction est exécutée dans la même direction de tendance jusqu’à ce que la direction de la tendance change. Cela évite les transactions excessives et la répétition du signal dans la même tendance.
Visualisation de la zone non briséeLes stratégies permettent de détecter et d’afficher les zones d’intégration susceptibles d’entraîner des ruptures, aidant les traders à identifier des opportunités de trading potentielles à forte probabilité.
Gestion dynamique des risquesLa stratégie offre des stop-loss basés sur l’ATR ou des stop-loss à pourcentage fixe, ainsi qu’un stop-loss de suivi parallèle SAR, ce qui rend la gestion des risques plus flexible et plus adaptée aux changements du marché.
Haute capacité d’adaptationLa capacité de la stratégie à s’adapter automatiquement aux différentes conditions du marché, à capturer les tendances dans les marchés tendances, tout en restant vigilante dans les marchés turbulents, lui a permis de rester robuste dans divers environnements de marché.
Mécanisme de filtrage multipleEn combinant le filtrage triple de la tendance, de la fourchette et de la volatilité, la stratégie a considérablement amélioré la qualité des signaux de négociation, réduisant les faux signaux et les faux-sauts.
Adaptation à la fluctuation de l’intelligenceStratégie: Ajuster la taille de la position en fonction de la dynamique de la volatilité du marché, réduire l’ouverture de risque dans un environnement à forte volatilité et maximiser le potentiel de rendement dans un environnement à volatilité modérée.
Un outil de visualisation completLes stratégies offrent une multitude d’aides visuelles, y compris les marqueurs de tranches, les boîtes de tranches intactes, les lignes EMA et les points SAR, qui permettent aux traders de comprendre de manière intuitive l’état du marché et la logique de la stratégie.
Des contrôles de risque flexibles: Prise en charge d’une variété de stratégies d’arrêt des pertes (pourcentages fixes, multiplicateurs ATR, suivi SAR), permettant aux traders de choisir la méthode de gestion des risques la plus appropriée en fonction de leurs préférences personnelles en matière de risque et des caractéristiques du marché.
Principe d’une seule transaction: Le mécanisme d’état de tendance garantit qu’une seule transaction est exécutée dans chaque direction de tendance, évitant ainsi les risques de surtransaction et d’exposition excessive des fonds à une seule direction.
Un retour en arrière retardé: En raison de l’utilisation de l’EMA comme principal indicateur de tendance, la stratégie peut être plus lente à réagir lors d’un revirement de tendance rapide, ce qui entraîne un certain recul au début du revirement. La solution consiste à ajuster le paramètre de longueur de l’EMA, une longueur d’EMA plus courte peut être utilisée dans les marchés plus volatiles.
Les marchés horizontaux sont inefficaces: Bien que la stratégie conçue avec un filtre de zone, elle peut entraîner une période prolongée de non-opportunités de négociation dans les marchés horizontaux à long terme, ce qui affecte l’efficacité de l’utilisation des fonds. La solution est de combiner l’analyse de plusieurs périodes ou d’utiliser la stratégie de manière rotative entre les différents marchés.
Paramètres d’optimisation des dépendances: La performance de la stratégie dépend fortement des paramètres tels que la longueur EMA, les seuils d’intervalles et les multiples ATR. Différents marchés et périodes de temps peuvent nécessiter des combinaisons de paramètres différentes. Il est recommandé d’optimiser les paramètres en testant le retour sur un marché et une période de temps spécifiques.
Risque de forte volatilité soudaine: dans le cas d’un saut de prix causé par un événement soudain du marché (comme un communiqué de presse majeur), le stop-loss peut ne pas être exécuté au prix prévu, ce qui entraîne des pertes réelles supérieures à celles prévues. Il est recommandé d’utiliser des règles de gestion de fonds supplémentaires pour limiter l’ouverture de risque d’une seule transaction.
Une dépendance excessive à l’égard des indicateurs techniques: la stratégie est entièrement basée sur les indicateurs techniques et ignore les facteurs fondamentaux. L’analyse purement technique peut être inefficace en cas de changements fondamentaux majeurs. Il est recommandé de réduire les positions ou de suspendre les transactions avant la publication de données économiques importantes, en combinaison avec une analyse fondamentale ou un calendrier d’événements à risque.
Système de confirmation à plusieurs périodes: l’introduction d’une analyse multi-temporelle peut améliorer considérablement l’exactitude de la stratégie. Il est recommandé d’ajouter des conditions de confirmation de tendance pour les périodes plus élevées, en exécutant des transactions uniquement lorsque la direction de la tendance des périodes plus élevées est en accord avec la direction des transactions actuelles, ce qui peut réduire les transactions contre-courant et améliorer les chances de victoire.
Les paramètres dynamiques s’adaptent: la stratégie peut intégrer un mécanisme d’ajustement des paramètres d’adaptation qui ajuste automatiquement la longueur de l’EMA, la marge de la fourchette et le multiplicateur ATR en fonction de la volatilité du marché et de l’intensité de la tendance. Cela permettra à la stratégie de mieux s’adapter aux différentes phases du marché.
Intégrer des modèles d’apprentissage automatiqueL’introduction d’un modèle d’apprentissage automatique pour optimiser le timing de l’entrée et la direction de la rupture de la fourchette peut considérablement améliorer la performance de la stratégie. Par exemple, le fait de prédire une rupture de la fourchette à l’aide d’algorithmes de classification ou le fait de prédire un objectif de prix après la rupture à l’aide d’un modèle de régression.
Amélioration des filtres de fluctuation: Le filtre de taux d’oscillation actuel est basé sur une simple valeur de seuil ATR pourcentage, qui peut être mis à niveau vers un indicateur de taux d’oscillation relatif, comparant le taux d’oscillation actuel à la distribution du taux d’oscillation historique, pour identifier plus précisément les environnements de véritable basse oscillation.
Augmentation du nombre de confirmations: Augmentation des conditions de confirmation de volume lors de la génération du signal de transaction et exécution des transactions uniquement lorsque la rupture de prix est accompagnée d’une augmentation du volume de transaction, ce qui réduit le risque de fausse rupture. Cette amélioration s’applique en particulier aux marchés boursiers et des marchandises.
Optimisation des algorithmes de gestion des fondsL’intégration de la méthode Kelly ou d’autres algorithmes de gestion de fonds avancés dans la stratégie, en ajustant dynamiquement la taille de la position en fonction des gains et des pertes historiques, permet de maximiser les gains à long terme et de minimiser les risques.
La stratégie de suivi de tendance de la courbe régulière et de filtrage intelligent de la volatilité est un système de négociation complet et robuste qui améliore efficacement la qualité du signal de négociation et le taux de réussite des transactions en combinant le suivi de la tendance, la détection des intervalles et la technologie de filtrage de la volatilité. Son principe de négociation unique par tendance et son mécanisme de gestion dynamique des risques lui permettent de maintenir une bonne rentabilité tout en contrôlant les risques.
Bien que les stratégies présentent également des risques tels que le retard de renversement de tendance et la dépendance aux paramètres, ces risques peuvent être gérés efficacement par les orientations d’optimisation proposées, telles que la confirmation de plusieurs périodes, l’auto-adaptation des paramètres dynamiques et l’intégration de modèles d’apprentissage automatique. Avec une optimisation appropriée des paramètres et une gestion des risques, la stratégie peut maintenir une performance stable dans diverses conditions de marché et constitue un système de négociation qui mérite une utilisation à long terme et une amélioration continue.
/*backtest
start: 2024-08-01 00:00:00
end: 2025-07-30 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"ETH_USDT"}]
*/
//@version=5
strategy("Dubic EMA Strategy", overlay=true,
default_qty_type=strategy.percent_of_equity,
default_qty_value=100,
initial_capital=10000,
currency=currency.USD,
commission_value=0.1,
pyramiding=0,
calc_on_every_tick=true)
// Inputs
ema_length = input.int(40, "EMA Length")
tp_percent = input.float(2.0, "Take Profit %", step=0.1, minval=0.1) / 100
sl_offset = input.float(0.5, "Stop Loss Offset %", step=0.1, minval=0.1) / 100
// Toggles for SL/TP
use_take_profit = input.bool(true, "Use Take Profit")
use_stop_loss = input.bool(true, "Use Stop Loss")
// Range Detection
range_length = input.int(20, "Range Detection Length", minval=5)
range_threshold = input.float(2.0, "Range Threshold %", step=0.1) / 100
min_range_bars = input.int(3, "Min Range Bars", minval=1)
// Parabolic SAR
use_parabolic_sar = input.bool(true, "Use Parabolic SAR Trailing Stop")
sar_start = input.float(0.02, "SAR Start", step=0.01)
sar_increment = input.float(0.02, "SAR Increment", step=0.01)
sar_max = input.float(0.2, "SAR Maximum", step=0.01)
// ATR Stop Configuration
use_atr_stop = input.bool(true, "Use ATR Stop Instead of Fixed %")
atr_length = input.int(14, "ATR Length")
atr_mult = input.float(1.5, "ATR Multiplier", minval=0.5)
// Volatility Filter
min_atr = input.float(0.5, "Min ATR % for Trading", step=0.1) / 100
use_volatility_filter = input.bool(true, "Enable Volatility Filter")
// Unbroken Range Visualization
show_unbroken_range = input.bool(true, "Show Unbroken Range Visualization", group="Unbroken Range")
unbroken_length = input.int(20, 'Minimum Range Length', minval=2, group="Unbroken Range")
unbroken_mult = input.float(1., 'Range Width', minval=0, step=0.1, group="Unbroken Range")
unbroken_atrLen = input.int(500, 'ATR Length', minval=1, group="Unbroken Range")
upCss = input.color(#089981, 'Broken Upward', group="Unbroken Range")
dnCss = input.color(#f23645, 'Broken Downward', group="Unbroken Range")
unbrokenCss = input.color(#2157f3, 'Unbroken', group="Unbroken Range")
// Calculate Indicators
ema_high = ta.ema(high, ema_length)
ema_low = ta.ema(low, ema_length)
ema_200 = ta.ema(close, 200)
sar = ta.sar(sar_start, sar_increment, sar_max)
atr = ta.atr(atr_length)
// Volatility Filter
atr_percentage = (atr / close) * 100
sufficient_volatility = not use_volatility_filter or (atr_percentage >= min_atr * 100)
// Range Detection Logic
range_high = ta.highest(high, range_length)
range_low = ta.lowest(low, range_length)
range_size = range_high - range_low
range_percentage = (range_size / close) * 100
range_condition = range_percentage <= (range_threshold * 100)
// Consecutive range bars counter
var int range_bars_count = 0
range_bars_count := range_condition ? range_bars_count + 1 : 0
in_range = range_bars_count >= min_range_bars
// Visualize Range
bgcolor(in_range ? color.new(color.purple, 85) : na, title="Range Zone")
plot(in_range ? range_high : na, "Range High", color=color.purple, linewidth=2, style=plot.style_linebr)
plot(in_range ? range_low : na, "Range Low", color=color.purple, linewidth=2, style=plot.style_linebr)
// Trading Conditions
buy_condition = (close > ema_high) and (close > ema_low)
sell_condition = (close < ema_high) and (close < ema_low)
// Apply Filters
buy_signal = buy_condition and not in_range and sufficient_volatility
sell_signal = sell_condition and not in_range and sufficient_volatility
// Trend State Machine
var int currentTrend = 0 // 0=neutral, 1=long, -1=short
var bool showBuy = false
var bool showSell = false
trendChanged = false
if buy_signal and currentTrend != 1
currentTrend := 1
trendChanged := true
showBuy := true
showSell := false
else if sell_signal and currentTrend != -1
currentTrend := -1
trendChanged := true
showBuy := false
showSell := true
// Reset signals
showBuy := nz(showBuy[1]) and not trendChanged ? false : showBuy
showSell := nz(showSell[1]) and not trendChanged ? false : showSell
// Plot Indicators
plot(ema_high, "EMA High", color=color.blue, linewidth=2)
plot(ema_low, "EMA Low", color=color.orange, linewidth=2)
plot(ema_200, "200 EMA", color=color.white, linewidth=3)
// Plot SAR with color coding
color sarColor = strategy.position_size > 0 ? color.red :
strategy.position_size < 0 ? color.green :
color.gray
plot(use_parabolic_sar ? sar : na, "SAR", style=plot.style_circles, color=sarColor, linewidth=2)
// Plot signals
plotshape(showBuy, title="Buy Signal", text="BUY", style=shape.labelup,
location=location.belowbar, color=color.green, textcolor=color.white, size=size.tiny)
plotshape(showSell, title="Sell Signal", text="SELL", style=shape.labeldown,
location=location.abovebar, color=color.red, textcolor=color.white, size=size.tiny)
// Strategy Logic
var float long_sl = na
var float long_tp = na
var float short_sl = na
var float short_tp = na
var float long_trail_stop = na
var float short_trail_stop = na
// Position Sizing with Volatility Scaling
position_size = use_volatility_filter ? math.min(100, 100 * (min_atr * 100) / atr_percentage) : 100
// Execute trades
if (showBuy)
// Calculate stop loss and take profit
long_sl := use_atr_stop ? close - atr * atr_mult : ema_low * (1 - sl_offset)
long_tp := close * (1 + tp_percent)
long_trail_stop := use_parabolic_sar ? sar : na
strategy.close("Short", comment="Exit Short")
strategy.entry("Long", strategy.long, qty=position_size)
// Set exit orders with toggle support
if use_stop_loss or use_take_profit
strategy.exit("Long SL/TP", "Long",
stop=use_stop_loss ? long_sl : na,
limit=use_take_profit ? long_tp : na)
if use_parabolic_sar
strategy.exit("Long SAR", "Long", stop=long_trail_stop)
alert("BUY: " + syminfo.ticker, alert.freq_once_per_bar)
if (showSell)
// Calculate stop loss and take profit
short_sl := use_atr_stop ? close + atr * atr_mult : ema_high * (1 + sl_offset)
short_tp := close * (1 - tp_percent)
short_trail_stop := use_parabolic_sar ? sar : na
strategy.close("Long", comment="Exit Long")
strategy.entry("Short", strategy.short, qty=position_size)
// Set exit orders with toggle support
if use_stop_loss or use_take_profit
strategy.exit("Short SL/TP", "Short",
stop=use_stop_loss ? short_sl : na,
limit=use_take_profit ? short_tp : na)
if use_parabolic_sar
strategy.exit("Short SAR", "Short", stop=short_trail_stop)
alert("SELL: " + syminfo.ticker, alert.freq_once_per_bar)
// Update SAR trailing stops
if barstate.isrealtime and use_parabolic_sar
if strategy.position_size > 0
strategy.exit("Long SAR", "Long", stop=long_trail_stop)
else if strategy.position_size < 0
strategy.exit("Short SAR", "Short", stop=short_trail_stop)
// Plot SL/TP levels with toggle support
plot(strategy.position_size > 0 and use_stop_loss ? long_sl : na, "Long Stop", color=color.red, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size > 0 and use_take_profit ? long_tp : na, "Long Take Profit", color=color.green, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 and use_stop_loss ? short_sl : na, "Short Stop", color=color.red, style=plot.style_linebr, linewidth=2)
plot(strategy.position_size < 0 and use_take_profit ? short_tp : na, "Short Take Profit", color=color.green, style=plot.style_linebr, linewidth=2)
// Plot SAR trailing stops
plot(strategy.position_size > 0 and use_parabolic_sar ? long_trail_stop : na,
"Long Trail Stop", color=color.orange, style=plot.style_circles, linewidth=2)
plot(strategy.position_size < 0 and use_parabolic_sar ? short_trail_stop : na,
"Short Trail Stop", color=color.orange, style=plot.style_circles, linewidth=2)
// Alerts
alertcondition(showBuy, title="Buy Alert", message="BUY: {{ticker}}")
alertcondition(showSell, title="Sell Alert", message="SELL: {{ticker}}")