RSI MA Crossover Swing Trading Strategie mit Trailing Stop System

RSI MA CROSSOVER TRAILING SL Swing Trading risk management
Erstellungsdatum: 2025-04-24 16:51:14 zuletzt geändert: 2025-04-24 16:51:14
Kopie: 4 Klicks: 349
2
konzentrieren Sie sich auf
319
Anhänger

RSI MA Crossover Swing Trading Strategie mit Trailing Stop System RSI MA Crossover Swing Trading Strategie mit Trailing Stop System

Überblick

Die Strategie ist eine Schwingungs-Trading-Strategie, die auf der Kreuzung des RSI (relativ starker Index) mit seinem Moving Average (MA) basiert und speziell für die 4-Stunden-Charts entwickelt wurde. Die Strategie erzeugt Handelssignale über die Gold- und Dead-Forks des RSI und des MA und kombiniert mehrere Risikomanagement-Tools, einschließlich Fixed Stop/Stop, Tracking-Stop-Losses und Reverse-Exit-Mechanismen. Die Strategie setzt auch eine Kontingent-Loss-Grenze, die den Handel bis zum nächsten Tag aussetzt, wenn die Kontingent-Losses mehr als zwei Mal in Folge überschritten werden.

Strategieprinzip

  1. ZeitrahmenbeschränkungDie Strategie funktioniert nur auf einem 4-Stunden-Chart, um sicherzustellen, dass die Handelssignale mit dem entworfenen Zeitrahmen übereinstimmen.
  2. Indikatorberechnung: Gebrauch des RSI (Default Length 14) und dessen Moving Average (SMA oder EMA, Default Length 14) zur Erzeugung von Signalen.
    • Goldfork ((MA auf dem RSI) löst ein Kaufsignal ((Mehr tun)) aus.
    • Die RSI-Durchschnitts-MA auslöst ein Verkaufssignal.
  3. PositionsverwaltungDie Positionsgröße wird anhand der Kapitalzuweisung und des aktuellen Preises pro Transaktion berechnet.
  4. Ausstiegsmechanismus
    • FestgeschaltetDer Wert der Aktien wird in der folgenden Tabelle angegeben: Stop Loss (Standard 1,5%) und Stop Out (Standard 2,5%) auf Basis der prozentualen Einstellung.
    • VerlustverfolgungDer Ausgang wird ausgelöst, wenn der Preis von einem Höchstwert einen bestimmten Wert zurückzieht (default 10 Punkte).
    • ZurücktretenDas ist ein sehr schwieriger Prozess.
  5. Risikokontrolle
    • Nach zwei aufeinanderfolgenden Verlusten wird der Handel ausgesetzt und die Verlustrechnung täglich um 9:15 Uhr neu eingestellt.

Analyse der Stärken

  1. Mehrdimensionale SignalprüfungDie Doppelfilterung von RSI und MA reduziert das Fehlsignal.
  2. Dynamische RisikomanagementEs gibt zwei Arten von Verlusten: Verfolgung von Stop-Loss-Lock-Profits und Fix-Stop-Loss-Limit-Verluste.
  3. Strenge FinanzverwaltungDas Unternehmen hat sich darauf eingestellt, dass es sich um eine Investitionsstrategie handelt, die sich auf die Verteilung von Positionen basiert.
  4. Disziplinäre KontrolleEs gibt eine Reihe von Schwierigkeiten, die sich aus der Verletzung des Handels ergeben können.
  5. BildmarkierungDie Anzeige des Signals und der Ausstiegspunkte werden durch die deutliche Diagrammarkierung erleichtert.

Risikoanalyse

  1. ParameterempfindlichkeitDie Länge des RSI und des MA beeinflusst die Signalqualität erheblich.
  2. Entwicklung der MarktentwicklungIn einem starken Trend kann der RSI langfristig überkauft/überverkauft werden, was zu einer Verzögerung des Signals führt.
  3. ZeitrahmenbeschränkungNur für 4-Stunden-Charts, andere Perioden müssen erneut überprüft werden.
  4. Risiken von fortlaufenden VerlustenDas ist eine sehr schwierige Aufgabe, denn es ist nicht einfach, die Zahlen zu ändern.
    Die Lösung
  • Optimierungsparameter durch historische Rückverfolgung.
  • In Kombination mit einem Trendindikator (z. B. ADX) filtert das Signal.
  • Setzen Sie die Dynamic Loss Counter-Temperature.

Optimierungsrichtung

  1. Mehrindikatorische FusionEinführung von MACD- oder Brin-Band-Verstärkungssignalbestätigung
  2. Anpassung der dynamischen ParameterDie RSI-Länge und die Stop-Loss-Rate werden entsprechend der Marktschwankungen angepasst.
  3. Erweiterung des ZeitrahmensTeststrategie in höheren oder niedrigeren Perioden (z. B. Sonnenlicht / 1 Stunde).
  4. Maschinelle LernoptimierungAnnahme und Ausstieg: Optimierung der Einstiegs- und Ausstiegsbedingungen mit historischen Trainingsmodellen.
  5. Erweiterung der FinanzverwaltungDer Kapitalanteil pro Transaktion wird entsprechend der Dynamik des Nettovermögens des Kontos angepasst.

Zusammenfassen

Die Strategie ermöglicht den Swing-Handel durch die Kreuzung von RSI und MA-Signalen und kombiniert mehrschichtige Risikomanagement-Tools, um Gewinnpotenzial und Risikokontrolle auszugleichen. Ihr Vorteil liegt in der klaren Logik und strengen Disziplin, muss jedoch weiter optimiert werden, um sich an unterschiedliche Marktumgebungen anzupassen. In Zukunft kann die Stabilität durch Multi-Indikator-Fusion und Dynamik-Parameter verbessert werden.

Strategiequellcode
/*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")