Stratégie quantitative de croisement de moyennes mobiles et de stop loss de volatilité dynamique

SMA RSI ATR RISK-TO-REWARD RATIO TREND FOLLOWING
Date de création: 2025-04-02 11:08:39 Dernière modification: 2025-04-02 11:08:39
Copier: 2 Nombre de clics: 323
2
Suivre
319
Abonnés

Stratégie quantitative de croisement de moyennes mobiles et de stop loss de volatilité dynamique Stratégie quantitative de croisement de moyennes mobiles et de stop loss de volatilité dynamique

Aperçu

Cette stratégie de trading quantitatif est un système intégré de mécanismes de stop-loss dynamiques combinant des moyennes mobiles croisées, des indicateurs relativement faibles (RSI) filtrés et basés sur la portée réelle moyenne (ATR). La stratégie est principalement utilisée pour capturer les tendances à moyen et long terme tout en évitant d’entrer dans un environnement de marché excessivement suracheté ou survendu via l’indicateur RSI et en utilisant l’indicateur ATR pour définir des stop-loss dynamiques pour s’adapter aux changements de la volatilité du marché.

Principe de stratégie

La logique fondamentale de la stratégie repose sur les éléments clés suivants :

  1. Signal croisé de la moyenne mobileLa stratégie utilise deux moyennes mobiles simples (SMA): la moyenne courte de 50 cycles et la moyenne longue de 200 cycles. Le système déclenche plusieurs signaux lorsque la moyenne courte est inférieure à la moyenne longue et que le RSI est supérieur à 30.

  2. Mécanisme de filtrage du RSI: La stratégie utilise le RSI de 14 cycles pour filtrer l’entrée. Plus précisément, la survente est autorisée lorsque le RSI est supérieur à 30, ce qui permet d’éviter une entrée aveugle dans les zones de survente profonde. Bien que le cadre des conditions de couverture soit conservé dans le code, la version actuelle se concentre principalement sur la survente.

  3. Arrêt de la dynamique ATR: La stratégie utilise l’indicateur ATR de 14 cycles pour calculer le stop-loss dynamique. Le stop-loss est défini comme le prix d’entrée moins ((ATR × multiplicateur), où le multiplicateur ATR est par défaut 1.0. Ce mécanisme de stop-loss dynamique est capable de s’adapter à la volatilité réelle du marché, offrant un espace de stop-loss plus large pendant les hautes volatilités et un contrôle plus étroit du risque pendant les basses.

  4. Résultats de l’analyse: la stratégie implique un paramètre de stop basé sur le rapport de retour au risque (RRR) avec une valeur par défaut de 1,5. Le stop est calculé comme le prix d’entrée plus (prix d’entrée - prix d’arrêt) × le rapport de retour au risque (RRR) pour s’assurer que les gains potentiels de chaque transaction sont proportionnels au risque pris.

Avantages stratégiques

  1. Le suivi des tendances combiné avec le filtrage: La stratégie utilise non seulement les moyennes mobiles pour capturer les variations de tendance, mais également le filtrage par l’indicateur RSI, ce qui réduit les signaux erronés et améliore la qualité de l’entrée.

  2. Gestion dynamique des risquesLe mécanisme d’arrêt basé sur l’ATR est un point fort de la stratégie, car il permet d’ajuster la distance de l’arrêt en fonction de la dynamique de la volatilité du marché, évitant ainsi les problèmes de déclenchement prématuré des arrêts fixes dans des environnements à forte volatilité, tout en conservant une bonne maîtrise du risque pendant les périodes de faible volatilité.

  3. Résultats de l’analyseLa stratégie garantit que les bénéfices potentiels de chaque transaction sont proportionnels au risque, ce qui contribue à la croissance des fonds à long terme, même si les chances de réussite ne sont pas élevées.

  4. Visualisation des transactions: La stratégie contient une cartographie en temps réel des arrêts et arrêts de perte, ainsi qu’une fonction de marquage des transactions terminées, ce qui améliore considérablement la visibilité du fonctionnement de la stratégie et facilite l’analyse et l’optimisation de la stratégie.

  5. Intégration de la gestion des fondsStratégie: par défaut, le pourcentage de la valeur totale du compte est utilisé pour la gestion des positions. Cette méthode est plus flexible que le nombre fixe et permet d’ajuster automatiquement la taille des transactions en fonction de la taille du compte.

Risque stratégique

  1. Risque d’inversion de tendance: Bien que la stratégie utilise les moyennes mobiles pour identifier les tendances, une reprise soudaine du marché peut entraîner des pertes plus importantes. La solution consiste à envisager l’introduction d’un indicateur à court terme plus sensible comme confirmation secondaire ou à ajuster les seuils RSI pour améliorer la sensibilité à la reprise.

  2. Paramètre SensibilitéLes paramètres clés de la stratégie, tels que les cycles SMA, les seuils RSI, les multiples ATR, etc., ont un impact significatif sur la performance. Différentes conditions de marché peuvent nécessiter des paramètres différents, il est donc nécessaire d’effectuer un suivi historique adéquat pour trouver la combinaison optimale de paramètres.

  3. Limitations du marché unilatéral: La version actuelle est principalement axée sur la multi-stratégie, ce qui peut être un mauvais résultat dans un marché en baisse constante. La solution est d’activer les conditions de dépréciation dans le code, permettant des transactions bidirectionnelles.

  4. Risque de surperdition: Pendant les périodes d’extrême volatilité, les valeurs d’ATR peuvent augmenter considérablement, ce qui entraîne un élargissement excessif de l’écart entre les arrêts et une augmentation des pertes potentielles. Un plafond peut être envisagé pour les multiples d’ATR, ou une combinaison d’arrêts à montant fixe et d’arrêts ATR dynamiques.

  5. Incertitude sur la fréquence des transactionsLa solution consiste à envisager d’ajouter des signaux de trading à court terme en complément, ou à utiliser des indicateurs plus à court terme après l’établissement d’une tendance majeure.

Orientation de l’optimisation de la stratégie

  1. Intégration de l’analyse de plusieurs périodesLa stratégie actuelle ne fonctionne que sur un seul fuseau horaire. L’intégration de l’analyse sur plusieurs fuseaux horaires peut être envisagée, par exemple en utilisant un fuseau horaire plus élevé pour identifier la direction de la tendance principale, puis en recherchant un point d’entrée sur un fuseau horaire plus bas pour améliorer la précision d’entrée.

  2. La perfection de la logique du vide: Activer et optimiser la logique de la courbe de coupe dans la stratégie pour qu’elle soit tout aussi efficace dans les marchés baissiers. Cela peut nécessiter d’ajuster les seuils RSI de la courbe de coupe (comme la courbe de coupe lorsque le RSI est supérieur à 70) et de définir différents paramètres pour différentes directions du marché.

  3. Introduction de l’indicateur de la quantité d’échangeConsidérez l’intégration de l’indicateur de volume des transactions dans la logique d’entrée et l’exécution des signaux de transaction uniquement dans le cas d’une confirmation de volume des transactions, ce qui contribue à réduire les pertes causées par les fausses percées.

  4. Optimiser les stratégies de préventionLa stratégie actuelle utilise des risques/rendements fixes plutôt que des arrêts, on peut envisager de bloquer une partie des bénéfices ou de suivre les arrêts pour obtenir plus de bénéfices si la tendance continue.

  5. Ajout de filtres de session: Pour les marchés qui ont des caractéristiques saisonnières évidentes, un filtre temporel peut être ajouté pour éviter de négocier pendant les périodes de faible liquidité ou de forte incertitude.

  6. Mécanisme d’adaptation des paramètres: mise en place d’un mécanisme d’adaptation automatique des paramètres en fonction de la volatilité historique ou d’autres caractéristiques du marché, permettant à la stratégie d’optimiser automatiquement les paramètres en fonction de l’évolution de l’environnement du marché

Résumer

Cette stratégie quantitative, basée sur la croisée des moyennes mobiles, le filtrage RSI et le stop-loss dynamique ATR, offre un cadre de négociation équilibré, particulièrement adapté au trading de tendances à moyen et long terme. Son avantage central réside dans la combinaison de l’analyse des indicateurs techniques et de la gestion des risques dynamiques, qui permet à la fois de capturer les changements de tendance et d’ajuster l’ouverture des risques en fonction de la volatilité du marché.

Bien que les stratégies présentent des limites en termes de sensibilité aux paramètres et de négociation unidirectionnelle, ces problèmes peuvent être efficacement améliorés par des orientations d’optimisation suggérées, telles que l’analyse de plusieurs délais, l’amélioration de la logique de blanchiment et l’introduction de la confirmation de la quantité de transaction. En particulier, la combinaison des mécanismes d’ajustement des paramètres dynamiques avec des stratégies de stop-loss plus complexes devrait améliorer encore la stabilité et la rentabilité des stratégies.

Cette stratégie offre un point de départ solide pour les traders qui recherchent des tendances à moyen et long terme tout en prenant en compte la maîtrise des risques et a le potentiel d’être un système de trading efficace grâce à des ajustements personnalisés et à une optimisation continue.

Code source de la stratégie
/*backtest
start: 2024-04-02 00:00:00
end: 2025-04-01 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BNB_USDT"}]
*/

//@version=6
strategy(title=" VS-NTC> NASDQ100 Long MA+RSI+ATR", shorttitle="VS-NTC> Long NASDQ100 MA+RSI+ATR", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// ————— Inputs —————
smaLenShort  = input.int(50,  title="Short SMA Length")
smaLenLong   = input.int(200, title="Long SMA Length")
rsiLen       = input.int(14,  title="RSI Length")
atrPeriod    = input.int(14,  title="ATR Period")
atrMult      = input.float(1.0, title="Stop-Loss ATR Multiplier", step=0.1)
rrRatio      = input.float(1.5, title="Risk-to-Reward Ratio",    step=0.1)

// ————— Indicator Calculations —————
smaShort = ta.sma(close, smaLenShort)
smaLong  = ta.sma(close, smaLenLong)
rsiVal   = ta.rsi(close, rsiLen)
atrVal   = ta.atr(atrPeriod)

// ————— Entry Conditions —————
// Long Condition: 50SMA > 200SMA and RSI < 70
longCondition = (smaShort < smaLong) and (rsiVal > 30)
// Short Condition: 50SMA < 200SMA and RSI > 30 (example: avoid oversold)
// Or use RSI > 70 to short if the market is overbought.
shortCondition = false
// shortCondition = (smaShort > smaLong) and (rsiVal < 35)

// ————— Entry Logic —————
if longCondition
    strategy.entry(id="Long", direction=strategy.long)

if shortCondition
    strategy.entry(id="Short", direction=strategy.short)

// ————— Stop-Loss & Take-Profit Calculation —————
var float stopPrice       = na
var float takeProfitPrice = na

// If we have a position open, we determine SL & TP differently for Long or Short.
if strategy.position_size > 0
    // We are in a Long trade
    stopPrice       := strategy.position_avg_price - (atrVal * atrMult)
    takeProfitPrice := strategy.position_avg_price + ((strategy.position_avg_price - stopPrice) * rrRatio)

    strategy.exit("Exit SL/TP", stop=stopPrice, limit=takeProfitPrice)
else if strategy.position_size < 0
    // We are in a Short trade
    stopPrice       := strategy.position_avg_price + (atrVal * atrMult)
    // For short, the distance from entry to stop is (stopPrice - entry)
    // So the take-profit is entry - that same distance times RR
    takeProfitPrice := strategy.position_avg_price - ((stopPrice - strategy.position_avg_price) * rrRatio)

    strategy.exit("Exit SL/TP", stop=stopPrice, limit=takeProfitPrice)
else
    // No open position → reset plots to na
    stopPrice       := na
    takeProfitPrice := na

// ————— Plot the Planned Stop-Loss & Take-Profit —————
plot(stopPrice,       title="Stop Loss",   color=color.red,   linewidth=2)
plot(takeProfitPrice, title="Take Profit", color=color.green, linewidth=2)


// ————— Label Each Closed Trade (Wins & Losses) —————
var int lastClosedTradeCount = 0
currentClosedCount = strategy.closedtrades

// If there's at least one new closed trade, label it
if currentClosedCount > lastClosedTradeCount
    newTradeIndex = currentClosedCount - 1

    tradeProfit  = strategy.closedtrades.profit(newTradeIndex)
    exitBarIndex = strategy.closedtrades.exit_bar_index(newTradeIndex)
    exitPrice    = strategy.closedtrades.exit_price(newTradeIndex)

    // Win label if profit > 0
    if tradeProfit > 0
        labelText  = "Win: " + str.tostring(tradeProfit)
        labelStyle = label.style_label_up
        labelColor = color.new(color.green, 0)
        label.new(exitBarIndex, exitPrice, text=labelText, style=labelStyle, color=labelColor, size=size.tiny)

    // Loss label if profit < 0
    if tradeProfit < 0
        labelText  = "Loss: " + str.tostring(tradeProfit)
        labelStyle = label.style_label_down
        labelColor = color.new(color.red, 0)
        label.new(exitBarIndex, exitPrice, text=labelText, style=labelStyle, color=labelColor, size=size.tiny)

    lastClosedTradeCount := currentClosedCount