Stratégie de swing trading croisé RSI MA avec système de stop suiveur

RSI MA CROSSOVER TRAILING SL Swing Trading risk management
Date de création: 2025-04-24 16:51:14 Dernière modification: 2025-04-24 16:51:14
Copier: 4 Nombre de clics: 349
2
Suivre
319
Abonnés

Stratégie de swing trading croisé RSI MA avec système de stop suiveur Stratégie de swing trading croisé RSI MA avec système de stop suiveur

Aperçu

La stratégie est une stratégie de trading basée sur un swing basé sur le croisement du RSI (indice relativement faible) avec sa moyenne mobile (MA) et conçue pour les graphiques de 4 heures. La stratégie génère des signaux de trading via les forks dorés et morts du RSI et de la MA, et est combinée à une variété d’outils de gestion des risques, y compris la fixation des arrêts/arrêts, le suivi des arrêts et le mécanisme de retrait inversé.

Principe de stratégie

  1. Limite de la périodeLa stratégie fonctionne uniquement sur un graphique de 4 heures pour s’assurer que les signaux de négociation sont cohérents avec la période de temps conçue.
  2. Calcul de l’indicateur: utilise le RSI (longueur par défaut 14) et sa moyenne mobile (SMA ou EMA, longueur par défaut 14) pour générer un signal
    • La fourchette d’or (MA sur le RSI) déclenche un signal d’achat (MA sur le RSI) pour faire plus.
    • La fourche morte (MA sous le RSI) déclenche un signal de vente (MA sous le RSI) [2].
  3. Gestion des positions: La taille de la position est calculée en fonction de la répartition du capital par transaction et du prix actuel.
  4. Le mécanisme de retrait
    • Arrêt de perte fixeLes paramètres sont basés sur le pourcentage de stop loss (défaut de 1,5%) et de stop loss (défaut de 2,5%).
    • Suivre le stop loss: Le retrait est déclenché lorsque le prix recule d’un sommet à un nombre de points spécifié (par défaut 10 points).
    • Retour en arrièreLe jeu est en cours depuis le début de la saison.
  5. Contrôle des risques
    • Suspension de la négociation après deux pertes consécutives, réinitialisation de la comptabilité de pertes à 9h15 par jour.

Analyse des avantages

  1. Vérification du signal multidimensionnelLe taux de change est le résultat d’une double filtration combinant le RSI et le MA, réduisant ainsi le nombre de faux signaux.
  2. Gestion dynamique des risquesLe but de ce système est de limiter les pertes et de traquer les pertes.
  3. Une gestion rigoureuse des fondsLes investisseurs doivent être en mesure de gérer leurs positions sur la base de l’allocation des capitaux et éviter l’utilisation excessive de l’effet de levier.
  4. Contrôle disciplinaireLe système de suspension des pertes en série empêche les transactions émotionnelles.
  5. Marquage visuelLes marquages graphiques clairs aident à identifier rapidement les signaux et les points de sortie.

Analyse des risques

  1. Paramètre SensibilitéLa longueur des RSI et des MA a un impact important sur la qualité du signal et doit être optimisée pour s’adapter aux fluctuations du marché.
  2. Les tendances du marchéDans une tendance forte, le RSI peut être sur-acheté/sur-vendu sur une longue période, ce qui entraîne un retard du signal.
  3. Limite de la période: seulement pour les graphiques à 4 heures, les autres périodes doivent être vérifiées.
  4. Risque de pertes consécutivesLe compte à rebours des pertes pourrait être une opportunité de profit potentielle.
    Une solution
  • Paramètres d’optimisation par rétro-analyse historique.
  • Les signaux de filtrage sont combinés avec des indicateurs de tendance (comme l’ADX).
  • Réglez le compteur de pertes dynamique sur le seuil de valeur.

Direction d’optimisation

  1. Fusion de plusieurs indicateurs: Introduction d’une confirmation de signal renforcé par MACD ou bande de Brin.
  2. Ajustement des paramètres dynamiques: Ajustez la longueur du RSI et le stop loss proportionnellement à la volatilité du marché.
  3. Élargissement de la période: Performance de la stratégie de test à des cycles plus ou moins élevés (par exemple, la lumière du soleil / 1 heure).
  4. Optimisation du machine learning: Optimiser les conditions d’entrée et de sortie à l’aide d’un modèle de formation basé sur des données historiques.
  5. Amélioration de la gestion des fonds: Adaptation du ratio de capital par transaction en fonction de l’évolution de la valeur nette du compte.

Résumer

Cette stratégie permet de négocier des mouvements oscillants via des signaux croisés RSI et MA, combinés à des outils de gestion des risques à plusieurs niveaux, équilibrant le potentiel de profit et le contrôle des risques. Son avantage réside dans une logique claire et une discipline stricte, mais nécessite une optimisation supplémentaire pour s’adapter aux différents environnements de marché.

Code source de la stratégie
/*backtest
start: 2024-04-23 00:00:00
end: 2024-09-06 00:00:00
period: 4h
basePeriod: 4h
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=5
strategy("📈 RX Swing ", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)


// === INPUTS ===
rsiLength     = input.int(14, title="RSI Length")
maLength      = input.int(14, title="RSI MA Length")
maType        = input.string("SMA", options=["SMA", "EMA"], title="MA Type for RSI")
sl_pct        = input.float(1.5, title="Stop Loss %", minval=0.0)
tp_pct        = input.float(2.5, title="Take Profit %", minval=0.0)
capitalPerTrade = input.float(15000, title="Capital Per Trade (INR)", minval=1)
lotSize       = input.int(50, title="Lot Size (Nifty Options Lot)", minval=1)
trail_points  = input.float(10, title="Trailing SL Points", minval=0.1)

// === CALCULATIONS ===
rsi    = ta.rsi(close, rsiLength)
rsiMA  = maType == "SMA" ? ta.sma(rsi, maLength) : ta.ema(rsi, maLength)

longSignal  = ta.crossover(rsi, rsiMA)
shortSignal = ta.crossunder(rsi, rsiMA)

// === TRADING WINDOW ===
canTrade = true
exitTime = false

// === STATE VARIABLES ===
var float entryPrice = na
var bool inTrade = false
var string tradeDir = ""
var int lossCount = 0
var float trailHigh = na
var float trailLow = na

// === EXIT TRIGGER ===
exitNow = false
exitReason = ""

// === POSITION SIZE BASED ON CAPITAL ===
positionSize = (capitalPerTrade / close) * lotSize

// === ENTRY LOGIC (AFTER CLOSE OF CANDLE) ===
if (canTrade and lossCount < 2)
    if (longSignal and not inTrade and barstate.isconfirmed)  // Ensure the signal happens after candle close
        strategy.entry("Buy Call", strategy.long, qty=positionSize)
        entryPrice := close
        trailHigh := close
        inTrade := true
        tradeDir := "CALL"

    else if (shortSignal and not inTrade and barstate.isconfirmed)  // Ensure the signal happens after candle close
        strategy.entry("Buy Put", strategy.short, qty=positionSize)
        entryPrice := close
        trailLow := close
        inTrade := true
        tradeDir := "PUT"

// === TRAILING STOP-LOSS LOGIC ===
if (inTrade)
    if (tradeDir == "CALL")
        trailHigh := math.max(trailHigh, close)
        if (close <= trailHigh - trail_points)
            strategy.close("Buy Call", comment="CALL Trailing SL Hit")
            exitNow := true
            exitReason := "Trail SL"
            inTrade := false
            lossCount := lossCount + 1

    if (tradeDir == "PUT")
        trailLow := math.min(trailLow, close)
        if (close >= trailLow + trail_points)
            strategy.close("Buy Put", comment="PUT Trailing SL Hit")
            exitNow := true
            exitReason := "Trail SL"
            inTrade := false
            lossCount := lossCount + 1

// === REVERSAL EXIT LOGIC ===
if (inTrade)
    if (tradeDir == "CALL" and shortSignal)
        strategy.close("Buy Call", comment="CALL Exit on Reversal")
        exitNow := true
        exitReason := "Reversal"
        inTrade := false
        if (strategy.position_size < 0)
            lossCount := lossCount + 1

    if (tradeDir == "PUT" and longSignal)
        strategy.close("Buy Put", comment="PUT Exit on Reversal")
        exitNow := true
        exitReason := "Reversal"
        inTrade := false
        if (strategy.position_size > 0)
            lossCount := lossCount + 1

// === TP/SL EXIT LOGIC ===
if (inTrade)
    tpLevel = entryPrice * (1 + tp_pct / 100)
    slLevel = entryPrice * (1 - sl_pct / 100)

    if (strategy.position_size > 0)
        if (close >= tpLevel)
            strategy.close("Buy Call", comment="CALL TP Hit")
            exitNow := true
            exitReason := "TP"
            inTrade := false
        else if (close <= slLevel)
            strategy.close("Buy Call", comment="CALL SL Hit")
            exitNow := true
            exitReason := "SL"
            inTrade := false
            lossCount := lossCount + 1

    if (strategy.position_size < 0)
        tpLevel = entryPrice * (1 - tp_pct / 100)
        slLevel = entryPrice * (1 + sl_pct / 100)

        if (close <= tpLevel)
            strategy.close("Buy Put", comment="PUT TP Hit")
            exitNow := true
            exitReason := "TP"
            inTrade := false
        else if (close >= slLevel)
            strategy.close("Buy Put", comment="PUT SL Hit")
            exitNow := true
            exitReason := "SL"
            inTrade := false
            lossCount := lossCount + 1

// === RESET LOSS COUNT ON NEW DAY ===
if (hour == 9 and minute == 15)
    lossCount := 0

// === MARKUPS ===
plotshape(longSignal and canTrade and lossCount < 2 and barstate.isconfirmed, title="📗 CALL Entry", location=location.belowbar, style=shape.triangleup, color=color.green, size=size.small, text="CALL")
plotshape(shortSignal and canTrade and lossCount < 2 and barstate.isconfirmed, title="📕 PUT Entry", location=location.abovebar, style=shape.triangledown, color=color.red, size=size.small, text="PUT")
plotshape(exitNow and exitReason == "TP", location=location.belowbar, style=shape.xcross, color=color.green, size=size.tiny, title="✅ TP Exit", text="TP")
plotshape(exitNow and exitReason == "SL", location=location.abovebar, style=shape.xcross, color=color.red, size=size.tiny, title="❌ SL Exit", text="SL")
plotshape(exitNow and exitReason == "Reversal", location=location.abovebar, style=shape.circle, color=color.fuchsia, size=size.tiny, title="🔁 Reversal Exit", text="REV")
plotshape(exitNow and exitReason == "Trail SL", location=location.abovebar, style=shape.square, color=color.yellow, size=size.tiny, title="🔂 Trailing SL Exit", text="Trail")