
La stratégie de suivi des tendances basée sur une gamme de fluctuations de prix est un système de trading quantitatif qui combine habilement des indicateurs techniques tels que la moyenne (SMA), l’écart-type (STDEV) et la moyenne réelle (ATR) pour identifier les tendances du marché et les transactions en construisant des fluctuations à la hausse et à la baisse. Le cœur de la stratégie de signaux est de construire un canal de prix dynamique en combinant la moyenne et la volatilité, et d’utiliser l’ATR pour ajuster les niveaux de stop loss, tout en offrant des options de stop loss de suivi flexibles, ce qui permet à la stratégie de rester adaptée à différents environnements de marché.
Le mécanisme de fonctionnement de la stratégie repose sur les étapes clés suivantes:
Calcul du filtre de portéeLa stratégie utilise d’abord une moyenne mobile simple (SMA) comme ligne centrale, puis une bande de fluctuation ascendante et descendante calculée en fonction de la différence de prix. La bande supérieure = SMA + multiplié par la différence de prix; la bande inférieure = SMA - multiplié par la différence de prix. Cette méthode permet d’ajuster la largeur du canal en fonction de la dynamique volatile du marché.
Identifier les tendancesLa stratégie identifie une tendance à la hausse lorsque le prix franchit la barre supérieure; à la baisse lorsque le prix franchit la barre inférieure. Cette méthode de détermination de la tendance aide à filtrer le bruit du marché.
Conditions d’entrée: lorsque le prix a franchi la trajectoire ascendante par le bas et n’était pas dans une tendance haussière auparavant, déclencher un signal de multiplication; lorsque le prix a franchi la trajectoire descendante par le haut et n’était pas dans une tendance baissière auparavant, déclencher un signal de rupture.
Stratégie de sortieLa stratégie offre deux possibilités:
Gestion des positionsStratégie: utilisation d’une méthode de gestion de position basée sur le pourcentage de participation sur le compte, avec une participation de 100% sur le compte par défaut.
Le principal avantage de cette stratégie réside dans son adaptabilité, qui permet aux paramètres de la stratégie de s’adapter automatiquement à la volatilité du marché en combinant les indices de la moyenne, de l’écart-type et de l’ATR, afin de maintenir une bonne performance dans différents environnements de marché.
Après une analyse approfondie du code, la stratégie présente les avantages suivants:
Une grande capacité d’adaptationLa stratégie utilise la dynamique de la différence standard pour ajuster la largeur de la voie, ce qui permet une adaptation automatique dans les marchés à forte et basse volatilité, évitant ainsi l’échec de la stratégie à paramètres fixes dans différents environnements de marché.
Amélioration de la gestion des risquesLa stratégie intègre un mécanisme de stop-loss dynamique basé sur l’ATR, ce qui rend le contrôle des risques plus précis et rationnel, et les niveaux de stop-loss et de stop-loss s’ajustent automatiquement en fonction de la volatilité du marché.
La qualité des signaux: Grâce à un mécanisme de confirmation de tendance, la stratégie est capable de filtrer efficacement les faux signaux de rupture et d’améliorer le taux de réussite des transactions. Un signal de transaction n’est déclenché que lorsque la rupture est à la hausse / à la baisse et n’est pas dans la tendance correspondante auparavant.
Une stratégie de sortie flexibleLes options de stop-loss fixe et de stop-loss de suivi sont proposées, permettant aux traders de choisir la bonne façon de s’en sortir en fonction de leurs préférences en matière de risque et de la perception du marché. Le stop-loss de suivi est particulièrement adapté pour capturer les grandes tendances.
Aide à la prise de décision visuelle: La stratégie fournit une visualisation claire des trajectoires ascendantes et descendantes, des lignes moyennes et des niveaux de stop-loss, aidant les traders à comprendre de manière intuitive l’état du marché et la performance de la stratégie.
Optimiser les paramètres avec de la place: La stratégie fournit plusieurs paramètres réglables, y compris la longueur du filtre de portée, le multiplicateur, la longueur de l’ATR, le multiplicateur de stop loss, etc., permettant aux traders d’optimiser de manière ciblée en fonction des différents marchés et types de transactions.
Malgré la bonne conception de la stratégie, les risques potentiels sont les suivants:
Paramètre Sensibilité: la performance de la stratégie est sensible aux paramètres de réglage, en particulier la longueur et le multiplicateur du filtre de portée. Des paramètres inappropriés peuvent entraîner des transactions excessives ou des écarts importants. La solution consiste à rechercher des combinaisons de paramètres robustes en faisant des retours dans différents environnements de marché.
Risque d’inversion de tendance: Dans un environnement de marché où une forte tendance est soudainement inversée, la stratégie peut ne pas réagir assez rapidement, ce qui entraîne un retrait plus important. Pour atténuer ce risque, il peut être envisagé d’effectuer une confirmation de signal en combinaison avec d’autres indicateurs de revers de tendance.
Les marchés à basse volatilité ne sont pas efficacesIl est recommandé d’augmenter de manière appropriée le multiplicateur de filtre ou d’ajouter des conditions de filtrage de transaction supplémentaires dans de tels environnements de marché.
Risque de dérapage: Dans les périodes de faible liquidité ou de forte volatilité du marché, le prix d’exécution réel du stop loss peut être différent de celui prévu. La distance de stop loss peut être ajustée en définissant un niveau de stop loss plus conservateur ou en tenant compte de la volatilité du marché.
Risques de sur-optimisationIl existe un risque de sur-adaptation des données historiques, car les stratégies offrent plusieurs paramètres d’optimisation. La solution consiste à utiliser des tests hors échantillon et des tests avancés pour vérifier la robustesse des stratégies.
L’analyse du code permet d’optimiser cette stratégie dans les directions suivantes:
Filtrer l’environnement du marchéIl est possible d’introduire des mécanismes supplémentaires de jugement du marché, tels que des indicateurs de volatilité (par exemple, les valeurs relatives VIX ou ATR) pour déterminer quelles combinaisons de paramètres conviennent au marché actuel, et même de considérer des paramètres d’ajustement dynamique dans différents environnements de marché. Cela est fait parce que les paramètres optimaux dans différents environnements de marché ont souvent des différences significatives.
Renforcement du mécanisme de confirmation des tendancesIl peut être combiné avec d’autres indicateurs de tendance (comme l’ADX, le MACD, etc.) comme confirmation auxiliaire, améliorant la précision des jugements de tendance. Cela peut réduire efficacement les faux signaux dans les marchés instables.
Optimisation de la gestion des fondsLes stratégies actuelles utilisent des pourcentages de titres de comptes fixes pour les transactions. On peut envisager une gestion de position basée sur la volatilité ou ajustée au risque, comme la formule de Kelly ou la méthode des scores fixes, pour obtenir une meilleure courbe de croissance des fonds.
Ajouter un filtre temporelIl est possible d’ajouter des conditions de filtrage des heures de négociation afin d’éviter les périodes de forte volatilité ou de faible liquidité du marché, telles que les heures de publication des données financières ou les heures d’ouverture / fermeture du marché.
Analyse de plusieurs périodesIntroduction d’un mécanisme de confirmation de plusieurs périodes, par exemple en demandant que la direction de la tendance des périodes plus longues soit la même que celle de la transaction, afin d’améliorer le taux de réussite des transactions. Cette méthode permet de filtrer efficacement les signaux de faible taux de victoire des grandes tendances inverses.
Optimiser le mécanisme de sortieIl est possible d’envisager d’ajuster le ratio de stop-loss en fonction de la dynamique des fluctuations du marché, ou d’ajouter un mécanisme de prise de profit partiel (par exemple, un profit par tranches) afin de ne pas perdre de vue les grandes lignes tout en conservant un taux de gain élevé.
La stratégie de suivi des tendances de filtrage de gamme d’adaptation ATR dynamique est un système de négociation quantifié, bien structuré et logiquement clair, qui identifie les tendances via des canaux dynamiques construits sur des moyennes et des écarts standard et, combiné à l’ATR, permet une gestion précise des risques. La plus grande caractéristique de la stratégie est son adaptabilité et son mécanisme de contrôle des risques perfectionné, qui lui permet de maintenir une performance stable dans différents environnements de marché.
La stratégie a le potentiel de générer des gains stables dans un marché tendanciel grâce à une configuration raisonnable des paramètres et des mesures d’optimisation possibles. Cependant, les traders qui utilisent cette stratégie doivent faire attention à la stabilité de l’optimisation des paramètres, éviter la suradaptation et effectuer des ajustements ciblés en fonction des caractéristiques de la variété de transactions réelles.
Dans l’ensemble, il s’agit d’un cadre de stratégie de quantification bien conçu et fonctionnel, adapté aux traders ayant une certaine expérience de la quantification des transactions, pour une utilisation et une optimisation ultérieures dans le monde réel.
/*backtest
start: 2024-05-26 00:00:00
end: 2025-05-25 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"SOL_USDT"}]
*/
//@version=5
strategy("Optimized Range Filter Strategy", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0)
// Optimization Inputs
length = input.int(14, title="Range Filter Length", minval=5, maxval=50)
mult = input.float(2.0, title="Range Filter Multiplier", minval=0.5, maxval=3, step=0.1)
atrLength = input.int(14, title="ATR Length", minval=5, maxval=20)
tpMultiplier = input.float(1.5, title="Take Profit Multiplier", minval=0.5, maxval=3, step=0.1)
slMultiplier = input.float(1.0, title="Stop Loss Multiplier", minval=0.5, maxval=3, step=0.1)
useTrailing = input.bool(true, title="Use Trailing Stop")
trailOffset = input.float(1.5, title="Trailing Stop Offset (ATR Multiplier)", minval=0.5, maxval=3, step=0.1)
// Range Filter Calculation
src = close
smooth = ta.sma(src, length)
dev = mult * ta.stdev(src, length)
upper = smooth + dev
lower = smooth - dev
// ATR Calculation
atr = ta.atr(atrLength)
// Trend Direction
var bool uptrend = na
var bool downtrend = na
uptrend := close > upper and (na(uptrend[1]) or uptrend[1])
downtrend := close < lower and (na(downtrend[1]) or downtrend[1])
// Entry Conditions
longCondition = ta.crossover(close, upper) and not uptrend[1]
shortCondition = ta.crossunder(close, lower) and not downtrend[1]
// Exit Conditions
takeProfitLong = strategy.position_avg_price + (atr * tpMultiplier)
stopLossLong = strategy.position_avg_price - (atr * slMultiplier)
takeProfitShort = strategy.position_avg_price - (atr * tpMultiplier)
stopLossShort = strategy.position_avg_price + (atr * slMultiplier)
// Strategy Execution
if (longCondition)
strategy.entry("Long", strategy.long)
if not useTrailing
strategy.exit("Exit Long", "Long", limit=takeProfitLong, stop=stopLossLong)
else
strategy.exit("Trail Long", "Long", trail_points=atr * trailOffset, trail_offset=atr * trailOffset)
if (shortCondition)
strategy.entry("Short", strategy.short)
if not useTrailing
strategy.exit("Exit Short", "Short", limit=takeProfitShort, stop=stopLossShort)
else
strategy.exit("Trail Short", "Short", trail_points=atr * trailOffset, trail_offset=atr * trailOffset)
// Plotting
plot(upper, color=color.new(color.green, 50), title="Upper Range")
plot(lower, color=color.new(color.red, 50), title="Lower Range")
plot(smooth, color=color.new(color.blue, 50), title="Smooth Line")
// Plot TP/SL levels when in position
plot(strategy.position_size > 0 and not useTrailing ? takeProfitLong : na, color=color.green, style=plot.style_circles, linewidth=2, title="TP Long")
plot(strategy.position_size > 0 and not useTrailing ? stopLossLong : na, color=color.red, style=plot.style_circles, linewidth=2, title="SL Long")
plot(strategy.position_size < 0 and not useTrailing ? takeProfitShort : na, color=color.red, style=plot.style_circles, linewidth=2, title="TP Short")
plot(strategy.position_size < 0 and not useTrailing ? stopLossShort : na, color=color.green, style=plot.style_circles, linewidth=2, title="SL Short")