Stratégie de rupture de tendance multi-périodes avec filtre RSI et gestion des risques ATR

EMA RSI ATR Trend Filter POSITION SIZING risk management
Date de création: 2025-04-24 16:55:42 Dernière modification: 2025-04-24 16:55:42
Copier: 3 Nombre de clics: 319
2
Suivre
319
Abonnés

Stratégie de rupture de tendance multi-périodes avec filtre RSI et gestion des risques ATR Stratégie de rupture de tendance multi-périodes avec filtre RSI et gestion des risques ATR

Aperçu

La stratégie est une stratégie multi-cadres combinant le suivi des tendances et des transactions de rupture, utilisant les croisements EMA comme filtre de tendance, le RSI comme indicateur de confirmation de la dynamique et l’ATR pour la gestion dynamique des risques. La stratégie permet une gestion précise des signaux d’entrée et de sortie grâce à un système d’alerte séparé et utilise une méthode de gestion des fonds basée sur les pourcentages pour contrôler les risques.

Principe de stratégie

  1. Détermination des tendances: utilisez la relation croisée entre l’EMA rapide ((9) et l’EMA lente ((21) pour déterminer la direction de la tendance du marché. Lorsque l’EMA9 traverse l’EMA21, il est jugé comme une tendance à la hausse, et non comme une tendance à la baisse.
  2. Confirmation du moteur: Confirmation de la force de la tendance par l’indicateur RSI ((cycle 14), les transactions à plusieurs têtes nécessitent un RSI > 50 et les transactions à vide nécessitent un RSI < 50 .
  3. Signaux de rupture: Après confirmation de la direction de la tendance, un signal de transaction est généré lorsque le prix franchit le haut ou le bas de la ligne K précédente.
  4. Gestion des risques: utilisation de l’ATR (cycle 14) pour calculer le stop-loss dynamique, avec un ratio de risque fixe de 2% de l’intérêt du compte. Le stop-loss est réglé à 3 fois la distance de stop-loss et le stop-loss est lancé après avoir atteint 50% de profit.
  5. Calcul de la position: Calculer dynamiquement la taille de la position en fonction de la distance de stop-loss et du ratio de risque pour s’assurer que le risque de chaque transaction est le même.

Analyse des avantages

  1. Vérification multifactorielleLes trois dimensions de la confirmation, combinées à la tendance, à la dynamique et à l’action des prix, permettent d’améliorer la qualité du signal.
  2. Gestion dynamique des risquesLe stop-loss basé sur l’ATR peut s’adapter aux fluctuations du marché et suivre les gains flottants.
  3. La gestion des fonds pour la scienceLe taux de risque est fixé à un pourcentage fixe, afin d’éviter les transactions excessives, et les positions sont calculées de manière à correspondre exactement aux préférences de risque.
  4. Un signal visuel clair: affichage intuitif des signaux de transaction par la fonction plotshape, pour faciliter la surveillance.
  5. Système d’alarme déconnecté: Alerte indépendante sur les positions ouvertes et fermées pour faciliter la mise en correspondance automatique.

Analyse des risques

  1. Risque de volatilité des marchésLa solution est d’ajouter des filtres d’intensité de tendance tels que l’ADX.
  2. Risques sensibles aux paramètres: les paramètres fixes peuvent ne pas fonctionner dans différentes variétés ou environnements de marché, il est recommandé d’optimiser les paramètres ou de les adapter.
  3. Les dangers du saut en hauteurLes prix ont augmenté de façon spectaculaire, ce qui a entraîné une augmentation de la marge de manœuvre, et le prix d’exécution du stop loss n’a pas été conforme aux prévisions. La solution consiste à réduire la position ou à suspendre la négociation avant la publication des données importantes.
  4. Le risque d’une suradaptationLes paramètres optimisés sur la base des données historiques peuvent ne pas fonctionner à l’avenir et doivent être testés à l’avance.

Direction d’optimisation

  1. Paramètres d’adaptation: modifier les paramètres fixes en paramètres d’adaptation basés sur la volatilité ou l’état du marché, par exemple en utilisant le pourcentage ATR pour définir le cycle EMA.
  2. Filtre de tendance composée: la confirmation de tendance à l’ajout d’un cadre de temps plus élevé, par exemple pour négocier en même temps que la tendance de la ligne du jour et le signal de la ligne horaire.
  3. Arrêt dynamique: changement du ratio de TP fixe en un arrêt dynamique basé sur la résistance au support ou sur l’expansion de Fibonacci.
  4. Optimisation du machine learning: Adaptation dynamique des seuils RSI et du ratio TP/SL à l’aide de l’apprentissage par renforcement.
  5. Filtrage des événementsL’intégration des données du calendrier économique, l’ajustement automatique des paramètres de risque ou la suspension des transactions avant et après les événements importants.

Résumer

Il s’agit d’une stratégie de suivi de tendance rigoureusement structurée, améliorant la fiabilité du signal grâce à la vérification de multiples indicateurs techniques, un système de gestion scientifique des fonds contrôlant efficacement le risque de baisse. La stratégie est particulièrement adaptée aux environnements de marché où la tendance est claire et fonctionne mieux dans les variétés adaptées à la volatilité.

Code source de la stratégie
// @version=5
strategy("Trend Breakout Strategy with Separated Alerts", overlay=true, initial_capital=10, default_qty_type=strategy.percent_of_equity, default_qty_value=100)

// --- Parameters ---
var float risk_per_trade = 0.02 // 2% risk per trade
var int ema_fast = 9
var int ema_slow = 21
var int rsi_length = 14
var int atr_length = 14
var float atr_multiplier_sl = 2.0 // ATR multiplier for SL
var float tp_ratio = 3.0 // TP to SL ratio = 3:1
var float trail_trigger_ratio = 0.5 // Trailing stop triggers at 50% of TP

// --- Indicators ---
ema9 = ta.ema(close, ema_fast)
ema21 = ta.ema(close, ema_slow)
rsi = ta.rsi(close, rsi_length)
atr = ta.atr(atr_length)

// --- Trend Filter ---
bull_trend = ta.crossover(ema9, ema21) or (ema9 > ema21)
bear_trend = ta.crossunder(ema9, ema21) or (ema9 < ema21)

// --- Entry Conditions ---
long_entry = bull_trend and rsi > 50 and close > high[1]
short_entry = bear_trend and rsi < 50 and close < low[1]

// --- Position Size Calculation ---
equity = strategy.equity
stop_loss_distance = atr * atr_multiplier_sl
risk_amount = equity * risk_per_trade
position_size = risk_amount / stop_loss_distance

// --- SL and TP Levels ---
long_sl = close - stop_loss_distance
long_tp = close + stop_loss_distance * tp_ratio
short_sl = close + stop_loss_distance
short_tp = close - stop_loss_distance * tp_ratio

// --- Trailing Stop (activated after 50% of TP) ---
trail_points = atr * atr_multiplier_sl * tp_ratio * trail_trigger_ratio
trail_offset = atr * atr_multiplier_sl

// --- Entries ---
if long_entry
    strategy.entry("Long", strategy.long, qty=position_size)
    strategy.exit("Long Exit", "Long", stop=long_sl, limit=long_tp, trail_points=trail_points, trail_offset=trail_offset)

if short_entry
    strategy.entry("Short", strategy.short, qty=position_size)
    strategy.exit("Short Exit", "Short", stop=short_sl, limit=short_tp, trail_points=trail_points, trail_offset=trail_offset)

// --- Alert Conditions ---
var bool long_opened = false
var bool short_opened = false

// Track position opening
long_open_alert = long_entry and not long_opened
short_open_alert = short_entry and not short_opened

// Track position closing
long_close_alert = long_opened and strategy.position_size == 0
short_close_alert = short_opened and strategy.position_size == 0

// Update position states
if long_entry
    long_opened := true
if short_entry
    short_opened := true
if strategy.position_size == 0
    long_opened := false
    short_opened := false

// --- Alerts ---
alertcondition(long_open_alert, title="Open Long", message='{"action":"buy","symbol":"{{ticker}}","price":{{close}}}')
alertcondition(long_close_alert, title="Close Long", message='{"action":"close_long","symbol":"{{ticker}}","price":{{close}}}')
alertcondition(short_open_alert, title="Open Short", message='{"action":"sell","symbol":"{{ticker}}","price":{{close}}}')
alertcondition(short_close_alert, title="Close Short", message='{"action":"close_short","symbol":"{{ticker}}","price":{{close}}}')

// --- Visualization ---
plot(ema9, color=color.blue, title="EMA9")
plot(ema21, color=color.red, title="EMA21")
plotshape(long_open_alert, title="Long Entry", location=location.belowbar, color=color.green, style=shape.triangleup, size=size.small)
plotshape(short_open_alert, title="Short Entry", location=location.abovebar, color=color.red, style=shape.triangledown, size=size.small)