Stratégie de trading quantitatif de gestion des risques co-pondérée Trend Momentum

EMA RSI ATR R:R TP SL
Date de création: 2025-06-17 13:08:21 Dernière modification: 2025-06-17 13:08:21
Copier: 0 Nombre de clics: 267
2
Suivre
319
Abonnés

Stratégie de trading quantitatif de gestion des risques co-pondérée Trend Momentum Stratégie de trading quantitatif de gestion des risques co-pondérée Trend Momentum

Aperçu

Cette stratégie est un système de trading synchrone intégré de suivi de la tendance et de dynamique, principalement basé sur le jugement de la tendance linéaire et la confirmation de la dynamique d’un indice relativement faible (RSI) pour identifier les opportunités de trading à haute probabilité. Le cœur de la stratégie suit la philosophie de trading “en cours”, en attendant un revirement et en combinant l’indicateur de dynamique pour trouver le meilleur point d’entrée après avoir confirmé la direction de la tendance dominante du marché.

Principe de stratégie

Le principe de fonctionnement de la stratégie est basé sur quatre modules clés: identification des tendances, évaluation des conditions d’entrée, gestion des risques et optimisation des bénéfices.

  1. Identifier les tendances

    • Utilisez les moyennes mobiles à 50 et 200 jours (EMA) pour déterminer la direction de la tendance du marché
    • Lorsque l’EMA de 50 jours est supérieure à l’EMA de 200 jours, elle est identifiée comme tendance à la hausse et ne permet que de faire plus.
    • Lorsque l’EMA de 50 jours est inférieure à l’EMA de 200 jours, elle est identifiée comme une tendance à la baisse et ne permet que des prises de position.
  2. Les critères d’admission

    • Une fois la tendance confirmée, attendez que le prix revienne à la 50e EMA (pas plus loin que le multiplicateur par défaut de l’ATR)
    • Dans une tendance haussière, attendez que le RSI tombe dans la zone de survente (moins de 45 par défaut) pour rebondir et faire une percée, comme un signal de survente
    • Dans une tendance à la baisse, attendez que le RSI atteigne la zone de surachat (default au-dessus de 70) et recule pour faire une brèche, comme un signal de shorting
  3. Gestion des risques

    • Arrêt dynamique basé sur l’ATR, qui s’adapte à la volatilité du marché
    • Le risque de chaque transaction est fixé à 1% du capital du compte (modifiable) et est réalisé en calculant précisément la taille de la position.
    • La position de stop-loss est définie comme le prix d’entrée plus ou moins ((ATR × 1.5)), assurant que le stop-loss n’est pas déclenché par des fluctuations aléatoires
  4. Optimisation des bénéfices

    • Utilisation d’une stratégie de profit par tranches: un placement à 50% fixe les bénéfices lorsque le rapport risque/rendement est de 2,1:1
    • Les 50% restants de la position sont utilisés comme stop-loss basé sur l’ATR pour permettre aux bénéfices de continuer à se développer.
    • Lorsque la tendance est inversée (c’est-à-dire que le rapport de la ligne de parité est modifié), il est nécessaire de forcer la position de clôture afin d’éviter un retrait massif de la fin de la tendance.

Dans la mise en œuvre de la stratégie, un calcul mathématique précis est utilisé pour déterminer la taille optimale de la position, en veillant à ce que le risque de chaque transaction soit contrôlé au niveau prédéfini, tout en permettant un ajustement paramétrique pour s’adapter aux différentes conditions du marché.

Avantages stratégiques

Cette stratégie présente les avantages suivants:

  1. Signaux de négociation de haute qualité: par confirmation de la synchronisation de la tendance et de la dynamique, ouvrir une position uniquement dans le sens de la probabilité élevée, augmentant considérablement le taux de victoire.long_trend_oketlong_rsi_recoveryUne combinaison de conditions, etc., assure la qualité des signaux de négociation.

  2. Gestion des risques adaptée: La conception de stop basée sur l’ATR permet à la stratégie d’ajuster automatiquement les paramètres de risque en fonction de la volatilité du marché. Utilisez un stop plus lâche dans un environnement de marché très volatil et un stop plus serré dans un marché calme, pour un contrôle de risque optimal.

  3. Optimisation de la gestion des fonds: Le mécanisme de profit par tranches ((50% des positions sont rentables sur 2.1R, le reste est utilisé comme stop-loss de suivi) réalise un équilibre qui assure à la fois la rentabilité et la capture maximale de la tendance.long_tp1_hitetlong_trail_stopLes variables équivalentes contrôlent précisément ce processus.

  4. Les règles sont claires et objectives: stratégie entièrement quantifiée, élimination des interférences émotionnelles dans les transactions, discipline de l’exécution. Toutes les décisions de négociation sont basées sur des calculs mathématiques et des conditions logiques claires, évitant le jugement subjectif.

  5. Aide à la prise de décision visuelle: La stratégie offre un système de rétroaction visuelle complet, comprenant la coloration du fond de la tendance, les marqueurs de signaux d’entrée et la visualisation des objectifs de stop/gain, pour aider les traders à comprendre et à surveiller le fonctionnement de la stratégie.

  6. Adaptabilité des paramètresLes paramètres de base, tels que les cycles EMA, les seuils RSI et les multiples ATR, peuvent être ajustés pour permettre à la stratégie de s’adapter à différents environnements de marché et à vos préférences en matière de risque.

Risque stratégique

Malgré les multiples avantages de cette stratégie, les risques potentiels sont les suivants:

  1. Identifier les tendances à la traîne: L’utilisation de l’EMA comme outil de jugement de tendance présente un retard inhérent, qui peut entraîner la perte de certaines opportunités au début de la tendance ou la conservation de la position de direction à la fin de la tendance. La solution consiste à envisager d’ajouter des indicateurs de confirmation de tendance à court terme ou d’ajuster les paramètres de l’EMA pour améliorer la sensibilité.

  2. Risque de fausse percée:Le signal de renversement du RSI peut entraîner une fausse rupture, entraînant des transactions erronées. Pour contrer ce risque, des conditions de confirmation peuvent être ajoutées, telles que des changements de volume de transactions ou une confirmation synchrone d’autres indicateurs dynamiques.

  3. Ne convient pas au marché horizontal: la stratégie fonctionne mieux dans les marchés à tendance évidente, tandis que des signaux erronés et des transactions à perte peuvent être fréquents pendant la phase de comptage horizontal. Il est recommandé de suspendre la stratégie lorsque le marché est dans une zone de choc évidente, ce qui peut être identifié en ajoutant un filtre d’intensité de tendance.

  4. Paramètre Sensibilité: la performance stratégique est sensible au choix des paramètres, en particulier la définition des seuils des cycles EMA et RSI. Il est recommandé d’optimiser les paramètres dans différentes conditions de marché à l’aide de la rétroaction historique, afin d’éviter une suradaptation.

  5. Risques liés à la gestion des fonds: La gestion des risques à pourcentage fixe peut encore entraîner une accumulation de pertes continues dans des conditions de marché extrêmes. Il est recommandé d’envisager la mise en œuvre d’un mécanisme d’ajustement des risques dynamique, réduisant progressivement la taille de la position après une perte continue.

Direction d’optimisation

D’après l’analyse du code de la stratégie, voici les directions possibles d’optimisation:

  1. Confirmation synchronisée à périodes multiples: Intégrer les signaux de tendance et de dynamique de plusieurs périodes de temps pour améliorer l’exactitude des décisions de négociation. Par exemple, il est possible de vérifier si la tendance de la ligne solaire est cohérente avec la dynamique de 4 heures, et de négocier uniquement si la direction est cohérente.

  2. Filtrage d’intensité de la tendance à la hausse: introduire des indicateurs de force de tendance tels que l’ADX (indice de direction moyenne), ouvrir une position uniquement lorsque la tendance est suffisamment forte pour éviter les signaux erronés de tendance faible ou de marché horizontal.uptrendetdowntrendLes conditions de l’intensification du jugement.

  3. Paramètres de risque ajustés dynamiquementAdaptation de la proportion de risque pour chaque transaction en fonction de la volatilité du marché, de la courbe des intérêts des comptes ou de la dynamique des indicateurs de performance de la stratégie. Augmentation modérée du risque lorsque la stratégie fonctionne bien et réduction du risque lorsque la stratégie fonctionne mal.

  4. Analyse intégrée de l’environnement du marché: introduire des modules de reconnaissance de l’environnement macro-marché, tels que l’indice de volatilité ou l’analyse de la structure du marché, pour ajuster automatiquement les paramètres de la stratégie ou l’activation sélective en fonction des différentes phases du marché.

  5. Optimisation du mécanisme de détente: La stratégie actuelle utilise un 2.1R fixe comme premier point d’arrêt, et peut envisager de modifier la position d’arrêt en fonction de la résistance au support ou de la volatilité pour réaliser des bénéfices près des niveaux de prix critiques.

  6. Ajout de filtres de temps de transaction: prendre en compte les conditions de filtrage ou d’afflux de temps, éviter les périodes de faible fluidité ou les conditions d’afflux anormales, améliorer la qualité du signal

  7. Optimisation du machine learning: Utilise des algorithmes d’apprentissage automatique pour prédire dynamiquement les combinaisons de paramètres ou les poids de transaction optimaux et s’adapte automatiquement aux conditions du marché en temps réel.

Résumer

La stratégie de négociation quantifiée est un système de négociation complet regroupant l’identification de tendances, la confirmation de tendances, le contrôle précis des risques et la gestion intelligente des fonds. La direction du marché est déterminée par la courbe EMA, l’indicateur de dynamique RSI confirme le meilleur moment d’entrée, tout en utilisant un mécanisme de stop-loss dynamique et de profit par tranches basé sur l’ATR, pour réaliser l’équilibre optimal entre les risques et les gains.

Le plus grand avantage de la stratégie réside dans sa systématique et sa discipline, qui élimine les interférences émotionnelles dans le processus de négociation grâce à des règles de quantification claires, adaptées aux traders quantifiés qui recherchent un style de négociation robuste. En même temps, le module de gestion des risques de la stratégie assure une perte limitée et un potentiel de profit illimité, conformément aux principes fondamentaux de la négociation réussie.

Malgré certaines limites inhérentes, telles que le retard de la tendance et l’insuffisance de l’adaptation des marchés horizontaux, les orientations d’optimisation proposées ci-dessus, telles que l’analyse des cycles de temps multiples, le filtrage de l’intensité de la tendance et l’ajustement des risques dynamiques, peuvent améliorer encore la robustesse et l’adaptation des stratégies. Les orientations de développement futures devraient se concentrer sur l’amélioration de la capacité d’adaptation des stratégies, leur permettant de maintenir une performance stable dans différents environnements de marché.

Pour les investisseurs qui recherchent des méthodes de trading systématisées, cette stratégie offre un cadre de base solide qui peut être personnalisé et optimisé en fonction de leurs préférences personnelles en matière de risque et de leur compréhension du marché.

Code source de la stratégie
/*backtest
start: 2024-06-17 00:00:00
end: 2025-06-15 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=5
strategy("Crypto Swing Trading Strategy (1-5 Day)", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100, pyramiding=0, calc_on_every_tick=false, calc_on_order_fills=false)

// ============================================================================
// STRATEGY INPUTS
// ============================================================================

// Trend Filter Settings
ema_fast_length = input.int(50, title="Fast EMA Length", minval=1, group="Trend Filter")
ema_slow_length = input.int(200, title="Slow EMA Length", minval=1, group="Trend Filter")

// RSI Settings
rsi_length = input.int(14, title="RSI Length", minval=1, group="Momentum")
rsi_oversold = input.int(45, title="RSI Oversold Level", minval=1, maxval=50, group="Momentum")
rsi_overbought = input.int(70, title="RSI Overbought Level", minval=50, maxval=99, group="Momentum")

// ATR Settings
atr_length = input.int(14, title="ATR Length", minval=1, group="Risk Management")
atr_stop_mult = input.float(1.5, title="ATR Stop Loss Multiplier", minval=0.1, step=0.1, group="Risk Management")
atr_trail_mult = input.float(1.0, title="ATR Trailing Stop Multiplier", minval=0.1, step=0.1, group="Risk Management")

// Risk Management
risk_per_trade = input.float(1.0, title="Risk Per Trade (%)", minval=0.1, maxval=5.0, step=0.1, group="Risk Management")
reward_ratio = input.float(2.1, title="Initial Take Profit Ratio (R:R)", minval=1.0, step=0.1, group="Risk Management")

// Strategy Settings
pullback_distance = input.float(1.0, title="Max Distance from 50 EMA for Pullback (ATR)", minval=0.1, step=0.1, group="Entry Conditions")
enable_shorts = input.bool(true, title="Enable Short Trades", group="Strategy Settings")
enable_longs = input.bool(true, title="Enable Long Trades", group="Strategy Settings")

// ============================================================================
// INDICATOR CALCULATIONS
// ============================================================================

// Moving Averages
ema_fast = ta.ema(close, ema_fast_length)
ema_slow = ta.ema(close, ema_slow_length)

// RSI
rsi = ta.rsi(close, rsi_length)

// ATR
atr = ta.atr(atr_length)

// ============================================================================
// TREND IDENTIFICATION
// ============================================================================

// Primary trend based on EMA relationship
uptrend = ema_fast > ema_slow
downtrend = ema_fast < ema_slow

// ============================================================================
// ENTRY CONDITIONS
// ============================================================================

// Long Entry Conditions
long_trend_ok = uptrend and enable_longs
long_pullback = math.abs(close - ema_fast) <= (pullback_distance * atr) and close < ema_fast[1]
long_rsi_oversold = rsi[1] < rsi_oversold
long_rsi_recovery = rsi > rsi_oversold and rsi[1] <= rsi_oversold
long_entry_condition = long_trend_ok and long_pullback and long_rsi_oversold and long_rsi_recovery

// Short Entry Conditions  
short_trend_ok = downtrend and enable_shorts
short_pullback = math.abs(close - ema_fast) <= (pullback_distance * atr) and close > ema_fast[1]
short_rsi_overbought = rsi[1] > rsi_overbought
short_rsi_decline = rsi < rsi_overbought and rsi[1] >= rsi_overbought
short_entry_condition = short_trend_ok and short_pullback and short_rsi_overbought and short_rsi_decline

// ============================================================================
// POSITION SIZING
// ============================================================================

// Calculate position size based on risk per trade and ATR stop distance
calculate_position_size(entry_price, stop_price, risk_percent) =>
    risk_amount = strategy.equity * (risk_percent / 100)
    stop_distance = math.abs(entry_price - stop_price)
    position_size = stop_distance > 0 ? risk_amount / stop_distance : 0
    position_size

// ============================================================================
// STRATEGY VARIABLES
// ============================================================================

var float long_entry_price = na
var float long_stop_price = na
var float long_tp1_price = na
var float long_trail_stop = na
var bool long_tp1_hit = false

var float short_entry_price = na
var float short_stop_price = na
var float short_tp1_price = na
var float short_trail_stop = na
var bool short_tp1_hit = false

// ============================================================================
// LONG TRADE MANAGEMENT
// ============================================================================

// Long Entry
if long_entry_condition and strategy.position_size == 0
    long_entry_price := close
    long_stop_price := close - (atr_stop_mult * atr)
    long_tp1_price := close + (reward_ratio * (close - long_stop_price))
    long_trail_stop := long_stop_price
    long_tp1_hit := false
    
    // Calculate position size
    pos_size = calculate_position_size(long_entry_price, long_stop_price, risk_per_trade)
    strategy.entry("Long", strategy.long, qty=pos_size)
    strategy.exit("Long Stop", "Long", stop=long_stop_price)

// Long TP1 Management (Take 50% profit at 2:1 R:R)
if strategy.position_size > 0 and not long_tp1_hit and high >= long_tp1_price
    long_tp1_hit := true
    strategy.close("Long", qty_percent=50, comment="TP1 - 50%")
    // Move stop to breakeven
    long_trail_stop := long_entry_price
    strategy.cancel("Long Stop")

// Long Trailing Stop (for remaining 50% position)
if strategy.position_size > 0 and long_tp1_hit
    // Calculate new trailing stop
    highest_since_tp1 = ta.highest(high, 1)
    new_trail_stop = highest_since_tp1 - (atr_trail_mult * atr)
    
    // Only move stop up, never down
    if new_trail_stop > long_trail_stop
        long_trail_stop := new_trail_stop
    
    // Exit on trailing stop or trend reversal
    if close <= long_trail_stop or not uptrend
        strategy.close("Long", comment=not uptrend ? "Trend Reversal" : "Trailing Stop")

// ============================================================================
// SHORT TRADE MANAGEMENT
// ============================================================================

// Short Entry
if short_entry_condition and strategy.position_size == 0
    short_entry_price := close
    short_stop_price := close + (atr_stop_mult * atr)
    short_tp1_price := close - (reward_ratio * (short_stop_price - close))
    short_trail_stop := short_stop_price
    short_tp1_hit := false
    
    // Calculate position size
    pos_size = calculate_position_size(short_entry_price, short_stop_price, risk_per_trade)
    strategy.entry("Short", strategy.short, qty=pos_size)
    strategy.exit("Short Stop", "Short", stop=short_stop_price)

// Short TP1 Management (Take 50% profit at 2:1 R:R)
if strategy.position_size < 0 and not short_tp1_hit and low <= short_tp1_price
    short_tp1_hit := true
    strategy.close("Short", qty_percent=50, comment="TP1 - 50%")
    // Move stop to breakeven
    short_trail_stop := short_entry_price
    strategy.cancel("Short Stop")

// Short Trailing Stop (for remaining 50% position)
if strategy.position_size < 0 and short_tp1_hit
    // Calculate new trailing stop
    lowest_since_tp1 = ta.lowest(low, 1)
    new_trail_stop = lowest_since_tp1 + (atr_trail_mult * atr)
    
    // Only move stop down, never up
    if new_trail_stop < short_trail_stop
        short_trail_stop := new_trail_stop
    
    // Exit on trailing stop or trend reversal
    if close >= short_trail_stop or not downtrend
        strategy.close("Short", comment=not downtrend ? "Trend Reversal" : "Trailing Stop")

// ============================================================================
// PLOTTING
// ============================================================================

// Plot EMAs
plot(ema_fast, title="EMA 50", color=color.blue, linewidth=2)
plot(ema_slow, title="EMA 200", color=color.red, linewidth=2)

// Color background based on trend
bgcolor(uptrend ? color.new(color.green, 95) : downtrend ? color.new(color.red, 95) : na, title="Trend Background")

// Plot RSI levels (scaled to price for visualization)
hline(rsi_overbought, title="RSI Overbought", color=color.red, linestyle=hline.style_dashed)
hline(rsi_oversold, title="RSI Oversold", color=color.green, linestyle=hline.style_dashed)

// Plot entry signals
plotshape(long_entry_condition, title="Long Entry", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.normal)
plotshape(short_entry_condition, title="Short Entry", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.normal)

// Plot stop losses and targets for current position
plot(strategy.position_size > 0 ? long_trail_stop : na, title="Long Trailing Stop", color=color.red, style=plot.style_stepline, linewidth=2)
plot(strategy.position_size < 0 ? short_trail_stop : na, title="Short Trailing Stop", color=color.red, style=plot.style_stepline, linewidth=2)

plot(strategy.position_size > 0 and not long_tp1_hit ? long_tp1_price : na, title="Long TP1", color=color.green, style=plot.style_cross, linewidth=2)
plot(strategy.position_size < 0 and not short_tp1_hit ? short_tp1_price : na, title="Short TP1", color=color.green, style=plot.style_cross, linewidth=2)

// ============================================================================
// INFORMATION DISPLAY (Using Labels instead of Table)
// ============================================================================

// Display key information using labels on the last bar
if barstate.islast
    // Create info label with key metrics
    trend_text = uptrend ? "UP" : downtrend ? "DOWN" : "SIDE"
    position_text = strategy.position_size > 0 ? "LONG" : strategy.position_size < 0 ? "SHORT" : "NONE"
    
    info_text = "Trend: " + trend_text + "\nRSI: " + str.tostring(math.round(rsi, 1)) + "\nATR: " + str.tostring(math.round(atr, 2)) + "\nPosition: " + position_text
    
    label.new(bar_index, high + atr, info_text, 
              color=uptrend ? color.new(color.green, 80) : downtrend ? color.new(color.red, 80) : color.new(color.gray, 80),
              textcolor=color.white, style=label.style_label_down, size=size.normal)

// ============================================================================
// ALERTS
// ============================================================================

// Alert conditions
alertcondition(long_entry_condition, title="Long Entry Signal", message="LONG: Swing trading signal for {{ticker}} at {{close}}")
alertcondition(short_entry_condition, title="Short Entry Signal", message="SHORT: Swing trading signal for {{ticker}} at {{close}}")
alertcondition(strategy.position_size > 0 and long_tp1_hit, title="Long TP1 Hit", message="LONG TP1: First target hit for {{ticker}} at {{close}}")
alertcondition(strategy.position_size < 0 and short_tp1_hit, title="Short TP1 Hit", message="SHORT TP1: First target hit for {{ticker}} at {{close}}")

// ============================================================================
// STRATEGY SUMMARY
// ============================================================================

// This strategy implements the full swing trading approach described in the document:
// 1. Trend filtering using 50/200 EMA (only trade with the trend)
// 2. RSI momentum for entry timing (buy oversold in uptrend, sell overbought in downtrend)
// 3. ATR-based position sizing and stop losses (volatility-adjusted risk management)
// 4. Partial profit taking at 2:1 R:R (50% of position)
// 5. Trailing stops for remaining position using ATR
// 6. Trend reversal exits (close all when trend changes)
//
// Key Features:
// - Configurable parameters for different market conditions
// - Risk management with consistent 1% risk per trade
// - Visual indicators for trend, signals, and trade management
// - Information table showing key metrics
// - Alert system for automated notifications
//
// Recommended for: BTC, ETH, XRP on daily timeframes
// Holding period: 1-5 days typical