Stratégie de trading quantitative avec croisement de moyennes mobiles multiples et stop loss suiveur dynamique RSI

MA RSI SMA SL TS
Date de création: 2024-11-29 16:10:35 Dernière modification: 2024-11-29 16:10:35
Copier: 1 Nombre de clics: 461
1
Suivre
1617
Abonnés

Stratégie de trading quantitative avec croisement de moyennes mobiles multiples et stop loss suiveur dynamique RSI

Aperçu

Cette stratégie est un système de trading quantitatif qui combine la croisée des moyennes mobiles et des indices relativement faibles (RSI) et intègre la fonction de suivi des pertes. La stratégie utilise deux moyennes mobiles de 9 cycles et 21 cycles comme indicateurs principaux de jugement de la tendance, en combinaison avec l’indicateur RSI pour la confirmation des signaux de négociation et pour protéger les bénéfices et contrôler les risques en suivant dynamiquement les pertes.

Principe de stratégie

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

  1. Identification de la tendance: Identifier les changements de tendance du marché en croisant des moyennes mobiles rapides (de 9 cycles) et lentes (de 21 cycles). Un signal de pause est généré lorsque la ligne rapide traverse la ligne lente et que le RSI est supérieur à 55; un signal de pause est généré lorsque la ligne rapide traverse la ligne lente et que le RSI est inférieur à 45.
  2. Confirmation du signal: utilisation du RSI comme filtre de signal pour améliorer la fiabilité des signaux de négociation en définissant des seuils RSI.
  3. Contrôle du risque: utilisation d’un stop tracking à 1%, ajustement dynamique de la position de stop loss pour protéger les gains. En même temps, la mise en place d’une condition de clôture de prise de profit basée sur le RSI, avec des positions nettes et vides lorsque le RSI est supérieur à 80 ou inférieur à 22, respectivement.
  4. Mécanisme de stop loss: Combinant un stop fixe et un stop suivi, le prix est automatiquement éliminé lorsque le pourcentage prédéfini du point d’entrée est franchi ou que la ligne de stop suivi est atteinte.

Avantages stratégiques

  1. Vérification de signaux multidimensionnels: amélioration de l’exactitude des signaux de transaction par la double confirmation de la croix de la ligne moyenne et du RSI.
  2. Une bonne gestion des risques: le suivi dynamique des pertes permet de protéger les bénéfices tout en contrôlant les risques.
  3. Un mécanisme d’entrée flexible: une combinaison de tendances et d’indicateurs de dynamique permettant de capturer efficacement les points de basculement du marché.
  4. Le niveau d’automatisation est élevé: la logique de la stratégie est claire et il est facile d’automatiser les transactions.
  5. Adaptabilité: Adaptation aux différents environnements du marché par l’ajustement des paramètres.

Risque stratégique

  1. Risque de choc du marché: Faux signaux de rupture peuvent être fréquents dans les marchés à choc horizontal.
  2. Risque de glissement: la perte de points de glissement est possible lors de l’exécution des arrêts de suivi.
  3. Sensitivité des paramètres: les paramètres de la période de la moyenne et de la limite du RSI ont une influence importante sur la performance de la stratégie.
  4. Risque systémique: dans des cas extrêmes, le stop loss peut ne pas être exécuté à temps.

Orientation de l’optimisation de la stratégie

  1. Optimisation des signaux: les indicateurs de volume d’acheminement peuvent être introduits comme condition complémentaire à la confirmation des signaux.
  2. Optimisation des stop-loss: un mécanisme d’ajustement dynamique du stop-loss proportionnel basé sur la volatilité est envisagé.
  3. Gestion des positions: ajout d’un système dynamique de gestion des positions basé sur une évaluation des risques.
  4. Adaptabilité du marché: ajout d’un mécanisme de reconnaissance de l’environnement du marché, utilisant différents paramètres dans différents états du marché.
  5. Filtrage des signaux: Un filtre temporel peut être ajouté pour éviter les échanges aux heures de volatilité avant l’ouverture et la fermeture du marché.

Résumer

La stratégie, combinant les indicateurs classiques de l’analyse technique, construit un système de négociation avec des caractéristiques à la fois de suivi de tendance et de dynamique. Son avantage central réside dans un mécanisme de confirmation de signal multidimensionnel et un système de gestion du risque parfait. Grâce à une optimisation et à une amélioration continues, la stratégie devrait maintenir une performance stable dans différents environnements de marché.

Code source de la stratégie
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-27 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("ojha's Intraday MA Crossover + RSI Strategy with Trailing Stop", overlay=true)

// Define Moving Averages
fastLength = 9
slowLength = 21
fastMA = ta.sma(close, fastLength)
slowMA = ta.sma(close, slowLength)

// Define RSI
rsiPeriod = 14
rsiValue = ta.rsi(close, rsiPeriod)

// Define Conditions for Long and Short
longCondition = ta.crossover(fastMA, slowMA) and rsiValue > 55
shortCondition = ta.crossunder(fastMA, slowMA) and rsiValue < 45

// Define the trailing stop distance (e.g., 1% trailing stop)
trailingStopPercent = 1.0

// Variables to store the entry candle high and low
var float longEntryLow = na
var float shortEntryHigh = na

// Variables for trailing stop levels
var float longTrailingStop = na
var float shortTrailingStop = na

// Exit conditions
exitLongCondition = rsiValue > 80
exitShortCondition = rsiValue < 22

// Stop-loss conditions (price drops below long entry candle low * 1% or exceeds short entry candle high * 1%)
longStopLoss = longEntryLow > 0 and close < longEntryLow * 0.99
shortStopLoss = shortEntryHigh > 0 and close > shortEntryHigh * 1.01

// Execute Buy Order and store the entry candle low for long stop-loss
if (longCondition)
    strategy.entry("Long", strategy.long)
    longEntryLow := low  // Store the low of the candle where long entry happened
    longTrailingStop := close * (1 - trailingStopPercent / 100)  // Initialize trailing stop at entry

// Execute Sell Order and store the entry candle high for short stop-loss
if (shortCondition)
    strategy.entry("Short", strategy.short)
    shortEntryHigh := high  // Store the high of the candle where short entry happened
    shortTrailingStop := close * (1 + trailingStopPercent / 100)  // Initialize trailing stop at entry

// Update trailing stop for long position
if (strategy.opentrades > 0 and strategy.position_size > 0)
    longTrailingStop := math.max(longTrailingStop, close * (1 - trailingStopPercent / 100))  // Update trailing stop as price moves up

// Update trailing stop for short position
if (strategy.opentrades > 0 and strategy.position_size < 0)
    shortTrailingStop := math.min(shortTrailingStop, close * (1 + trailingStopPercent / 100))  // Update trailing stop as price moves down

// Exit Buy Position when RSI is above 80, Stop-Loss triggers, or trailing stop is hit
if (exitLongCondition or longStopLoss or close < longTrailingStop)
    strategy.close("Long")
    longEntryLow := na  // Reset the entry low after the long position is closed
    longTrailingStop := na  // Reset the trailing stop

// Exit Sell Position when RSI is below 22, Stop-Loss triggers, or trailing stop is hit
if (exitShortCondition or shortStopLoss or close > shortTrailingStop)
    strategy.close("Short")
    shortEntryHigh := na  // Reset the entry high after the short position is closed
    shortTrailingStop := na  // Reset the trailing stop

// Plot Moving Averages on the Chart
plot(fastMA, color=color.green, title="9-period MA")
plot(slowMA, color=color.red, title="21-period MA")

// Plot RSI on a separate panel
rsiPlot = plot(rsiValue, color=color.blue, title="RSI")
hline(50, "RSI 50", color=color.gray)
hline(80, "RSI 80", color=color.red)
hline(22, "RSI 22", color=color.green)

// Plot Trailing Stop for Visualization
plot(longTrailingStop, title="Long Trailing Stop", color=color.red, linewidth=1, style=plot.style_line)
plot(shortTrailingStop, title="Short Trailing Stop", color=color.green, linewidth=1, style=plot.style_line)