Stratégie de trading quantitative combinant RSI et moyenne mobile suivant la tendance

RSI MA SMA TP SL
Date de création: 2025-01-06 10:58:42 Dernière modification: 2025-01-06 10:58:42
Copier: 4 Nombre de clics: 376
1
Suivre
1617
Abonnés

Stratégie de trading quantitative combinant RSI et moyenne mobile suivant la tendance

Aperçu

Cette stratégie est un système de trading de suivi de tendance qui combine l’indice de force relative (RSI) et la moyenne mobile simple (SMA). Cette stratégie utilise la moyenne mobile pour déterminer la direction de la tendance du marché et utilise l’indicateur RSI pour confirmer l’élan, afin de négocier lorsque la tendance et l’élan résonnent. La stratégie a conçu un mécanisme complet de stop-profit et de stop-loss, qui peut contrôler efficacement les risques.

Principe de stratégie

La logique de base de la stratégie repose sur l’utilisation combinée de deux indicateurs techniques :

  1. Moyenne mobile (MA) : utilisée pour déterminer la tendance générale. Lorsque le prix est supérieur à la MA, on parle de tendance à la hausse, sinon, on parle de tendance à la baisse.
  2. Indice de force relative (RSI) : utilisé pour confirmer la dynamique des prix. Lorsque le RSI est supérieur au seuil défini (par exemple 55), il confirme une dynamique à la hausse, et lorsqu’il est inférieur au seuil (par exemple 45), il confirme une dynamique à la baisse.

Logique de génération de signaux de trading :

  • Conditions longues : le prix est supérieur à la MA et le RSI est supérieur au seuil d’achat
  • Conditions de vente à découvert : le prix est inférieur à la moyenne mobile et le RSI est inférieur au seuil de vente

Le contrôle des risques utilise des méthodes de stop loss et de take profit en pourcentage, qui sont définies respectivement comme des pourcentages fixes du prix d’entrée.

Avantages stratégiques

  1. Stabilité du signal : En combinant la double confirmation de tendance et de momentum, les faux signaux peuvent être efficacement réduits.
  2. Gestion parfaite des risques : des pourcentages fixes de stop loss et de take profit sont définis pour contrôler efficacement le risque de chaque transaction.
  3. Flexibilité des paramètres : les paramètres clés tels que la période MA, le seuil RSI, etc. peuvent être optimisés en fonction de différentes caractéristiques du marché.
  4. La logique de la stratégie est claire : les règles de trading sont simples et intuitives, faciles à comprendre et à exécuter.
  5. Forte adaptabilité : peut être appliqué à des transactions sur différentes périodes.

Risque stratégique

  1. Risque d’inversion de tendance : des stop loss continus peuvent survenir aux points d’inversion de tendance.
  2. Risque de volatilité du marché : des transactions fréquentes peuvent entraîner des pertes dans des conditions de marché limitées.
  3. Dépendance des paramètres : les paramètres optimaux peuvent varier considérablement dans différents environnements de marché.
  4. Risque de dérapage : vous pouvez être confronté à un dérapage important lorsque le marché fluctue violemment.
  5. Retard de l’indicateur technique : le MA et le RSI présentent tous deux un certain décalage, ce qui peut entraîner un retard dans le moment de l’entrée.

Orientation de l’optimisation de la stratégie

  1. Optimisation des paramètres dynamiques : introduisez un mécanisme de paramètres adaptatif pour ajuster dynamiquement la période MA et le seuil RSI en fonction de la volatilité du marché.
  2. Filtrage de l’environnement de marché : ajoutez un mécanisme de filtrage de la volatilité pour ajuster les positions ou suspendre les transactions dans un environnement à forte volatilité.
  3. Analyse sur plusieurs périodes : introduisez une confirmation de tendance à plus long terme pour améliorer la précision de la direction du trading.
  4. Optimisation du stop loss : introduisez un mécanisme de stop loss suiveur pour mieux protéger les bénéfices.
  5. Filtrage du signal : ajoutez des indicateurs auxiliaires tels que le volume des transactions pour améliorer la fiabilité du signal.

Résumer

Cette stratégie combine des indicateurs de tendance et de momentum pour créer un système de trading avec une logique claire et des risques contrôlables. Bien qu’il existe certains risques inhérents, la stratégie montre une bonne praticabilité grâce à un paramétrage raisonnable et à un contrôle des risques. Les orientations d’optimisation ultérieures se concentreront principalement sur l’ajustement des paramètres dynamiques, l’identification de l’environnement de marché et l’amélioration de la qualité du signal, ce qui devrait encore améliorer la stabilité et la rentabilité de la stratégie.

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

// This Pine Script™ code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © raiford87

//@version=6
strategy("RSI + MA Trend Strategy (v6)",
     shorttitle="RSI_MA_Trend_v6",
     overlay=true,
     initial_capital=50000,
     default_qty_type=strategy.fixed,
     default_qty_value=1)

// ─────────────────────────────────────────────────────────────────────────────────────
// 1. USER INPUTS
// ─────────────────────────────────────────────────────────────────────────────────────
maLength       = input.int(50,   "Moving Average Length")
rsiLength      = input.int(14,   "RSI Length")
rsiBuyLevel    = input.int(55,   "RSI > X for Buy",  minval=1, maxval=99)
rsiSellLevel   = input.int(45,   "RSI < X for Sell", minval=1, maxval=99)

stopLossPerc   = input.float(1.0,  "Stop Loss %",    minval=0.1)
takeProfitPerc = input.float(2.0,  "Take Profit %",  minval=0.1)

// ─────────────────────────────────────────────────────────────────────────────────────
// 2. INDICATOR CALCULATIONS
// ─────────────────────────────────────────────────────────────────────────────────────
maValue = ta.sma(close, maLength)
rsiVal  = ta.rsi(close, rsiLength)

// Trend conditions
bullTrend = close > maValue
bearTrend = close < maValue

// RSI conditions
rsiBull   = rsiVal > rsiBuyLevel
rsiBear   = rsiVal < rsiSellLevel

// ─────────────────────────────────────────────────────────────────────────────────────
// 3. ENTRY CONDITIONS
// ─────────────────────────────────────────────────────────────────────────────────────
longCondition  = bullTrend and rsiBull
shortCondition = bearTrend and rsiBear

if longCondition
    strategy.entry("RSI MA Long", strategy.long)
if shortCondition
    strategy.entry("RSI MA Short", strategy.short)

// ─────────────────────────────────────────────────────────────────────────────────────
// 4. STOP LOSS & TAKE PROFIT
// ─────────────────────────────────────────────────────────────────────────────────────
stopLossLevel   = stopLossPerc   * 0.01
takeProfitLevel = takeProfitPerc * 0.01

if strategy.position_size > 0
    stopPriceLong = strategy.position_avg_price * (1 - stopLossLevel)
    tpPriceLong   = strategy.position_avg_price * (1 + takeProfitLevel)
    strategy.exit("Exit Long", from_entry="RSI MA Long", stop=stopPriceLong, limit=tpPriceLong)

if strategy.position_size < 0
    stopPriceShort = strategy.position_avg_price * (1 + stopLossLevel)
    tpPriceShort   = strategy.position_avg_price * (1 - takeProfitLevel)
    strategy.exit("Exit Short", from_entry="RSI MA Short", stop=stopPriceShort, limit=tpPriceShort)

// ─────────────────────────────────────────────────────────────────────────────────────
// 5. PLOT SIGNALS & LEVELS
// ─────────────────────────────────────────────────────────────────────────────────────
plot(maValue, color=color.yellow, linewidth=2, title="Moving Average")

plotchar(longCondition,  title="Long Signal",  char='▲', location=location.belowbar, color=color.green, size=size.tiny)
plotchar(shortCondition, title="Short Signal", char='▼', location=location.abovebar, color=color.red,   size=size.tiny)

// Plot Stop & TP lines
posIsLong  = strategy.position_size > 0
posIsShort = strategy.position_size < 0

plotStopLong = posIsLong ? strategy.position_avg_price * (1 - stopLossLevel) : na
plotTpLong   = posIsLong ? strategy.position_avg_price * (1 + takeProfitLevel): na
plotStopShort= posIsShort? strategy.position_avg_price * (1 + stopLossLevel) : na
plotTpShort  = posIsShort? strategy.position_avg_price * (1 - takeProfitLevel): na

plot(plotStopLong,  color=color.red,   linewidth=2, style=plot.style_line, title="Stop Loss Long")
plot(plotTpLong,    color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Long")
plot(plotStopShort, color=color.red,   linewidth=2, style=plot.style_line, title="Stop Loss Short")
plot(plotTpShort,   color=color.green, linewidth=2, style=plot.style_line, title="Take Profit Short")