RSI-Strategie mit dynamischer Divergenz und quantitativer Analyse

RSI ATR SL/TP risk management DIVERGENCE Pivot
Erstellungsdatum: 2025-04-25 14:57:31 zuletzt geändert: 2025-04-25 14:57:31
Kopie: 0 Klicks: 455
2
konzentrieren Sie sich auf
319
Anhänger

RSI-Strategie mit dynamischer Divergenz und quantitativer Analyse RSI-Strategie mit dynamischer Divergenz und quantitativer Analyse

Überblick

Die RSI-Doppel-Achs-Abweichungs-Quantifizierung ist eine hochwertige Handelsstrategie, die potenzielle Umkehrmöglichkeiten identifiziert, indem sie die regulären bullish-bullish-Abweichungen zwischen dem Preisverhalten und dem relativ starken Index ((RSI)) erkennt. Die Strategie verwendet eine automatisierte Pivot-Detection-Algorithmus, die zwei verschiedene Stop-Loss-Management-Methoden kombiniert, um automatisch Positionen zu erstellen, wenn ein Abweichungssignal bestätigt wird. Die Kernstrategie besteht darin, die Abweichung zwischen dem Preis und dem RSI-Indikator durch präzise mathematische Berechnungen zu bestätigen.

Strategieprinzip

  1. RSI-Berechnungsmodule: Berechnung des RSI-Wertes mit Hilfe der Wilder-Gleichmethode für 14 Zyklen, mit dem Schlusskurs als Standard-Eingabequelle.
  2. Kernpunkte:
    • Lokale Höhen und Tiefen des RSI-Indikators mit einem Schiebefenster, das jeweils 5 Perioden lang und 5 Perioden lang eingestellt werden kann
    • Sicherung des Abstands von 5 bis 60 K-Linien zwischen den Achsenpunkten durch die Funktion ta.barssince (modifizierbarer Bereich)
  3. Die Logik der Bestätigung:
    • Der RSI-Wert hat sich in den letzten drei Monaten deutlich erhöht.
    • Rückwärts: Preisinnovationen hoch, RSI bildet niedrigere Höhen
  4. System für die Ausführung von Transaktionen:
    • Doppelmodus-Stoppmechanismus: basierend auf den letzten 20 Zyklen (verstellbar) Schwingungspunkten oder ATR-Schwingungsbreiten
    • Dynamische Stop-Loss-Berechnung: Risiko-Rendite-Verhältnis, multipliziert mit dem Risikobetrag und der vorgegebenen Rendite (standard 2: 1)
  5. Visualisierungssystem: Markieren Sie alle effektiven Abweichsignale auf der Grafik und zeigen Sie in Echtzeit die Stop-Loss (rot) und Stop-Stop-Line (grün) der aktuellen Position.

Analyse der Stärken

  1. Multi-Dimensionalisierungsmechanismen: Die Anforderung, dass der Preis und der RSI eine bestimmte Form gleichzeitig erfüllen müssen, und die Zeitintervalle innerhalb der voreingestellten Grenzen, reduzieren die Wahrscheinlichkeit von Falschsignalen erheblich.
  2. Selbständiges Risikomanagement:
    • Das Swinging-Point-Modell eignet sich für Trendmärkte und kann die Bandbreite effektiv erfassen.
    • ATR-Modell für die Schaukelmarkt, automatische Anpassung der Stop-Loss-Grenze an die Schwankungen
  3. Die Parameter sind hoch konfigurierbar: Alle wichtigen Parameter (RSI-Zyklus, Pivot-Range, Risiko-Rendite, etc.) können an die Merkmale des Marktes angepasst werden.
  4. Wissenschaftliche Geldverwaltung: Die Standardposition von 10% wird verwendet, um die übermäßige Risikobereitschaft eines einzelnen Handels zu verhindern.
  5. Echtzeit visuelle Rückmeldung: Intuitive Unterstützung bei der Entscheidungsfindung durch Diagrammarbeitungen und dynamische Stop/Stop-Linien.

Risikoanalyse

  1. Rückstandsrisiko: Der RSI als Rückstandsindikator kann in einer heftigen einseitigen Situation ein Verzögerungssignal erzeugen. Minderung: Kombination mit einem Trendfilter oder Verkürzung des RSI-Zyklus.
  2. Schwankungsrisiko: Es kann zu einer Folge von Falschsignalen kommen, wenn keine eindeutige Trendentwicklung vorliegt. Abwehr: Aktivieren Sie den ATR-Modus und erhöhen Sie die Maximalzahl oder fügen Sie einen Fluktuationsfilter hinzu.
  3. Risiko von Parameterüberschneidung: Eine bestimmte Parameterkombination kann in historischen Daten gut abschneiden, aber in der Realität nicht funktionieren. Minderungsschema: Multi-Zyklus-Multivariate-Stresstests.
  4. Extreme Marktrisiken: Leerlauf-Lücken können zu Stop-Loss-Effekten führen. Minderung: Vermeiden Sie den Handel vor oder nach einem großen wirtschaftlichen Ereignis oder nutzen Sie die Optionssicherung.
  5. Zeitrahmenabhängigkeit: Unterschiedliche Zeitspannen führen zu sehr unterschiedlichen Leistungen. Mitigationsschema: Optimierung mit voller Rückverfolgung innerhalb des Zielzeitrahmens.

Optimierungsrichtung

  1. Komplex-Verifizierung: Hinzufügen von MACD oder Transaktionsmengen als zweite Bestätigung, um die Signalqualität zu verbessern.
  2. Dynamische Parameter-Anpassung: Automatische Anpassung der RSI-Zyklen und ATR-Multiplikatoren an die Marktschwankungen.
  3. Optimierung durch maschinelles Lernen: Optimierung von Schlüsselparameterkombinationen mit genetischen Algorithmen.
  4. Mehrzeit-Analyse: Trends für höhere Zeiträume filtern.
  5. Positionsdynamik: Anpassung der Positionsgröße an die Volatilität, um das Risiko auszugleichen.
  6. Ereignisfilter: Integration von Wirtschaftskalenderdaten, um Transaktionen vor und nach der Veröffentlichung wichtiger Daten zu vermeiden.

Zusammenfassen

Die RSI-Doppel-Achse-Abweichungs-Quantifizierungsstrategie bietet eine strukturierte Umkehrungsmethode für den Handel durch systematische Abweichungs-Identifizierung und strenge Risikomanagement. Ihr Kernwert liegt in der Umwandlung traditioneller technischer Analyse-Konzepte in quantifizierbare Handelsregeln und der Anpassung an verschiedene Marktumgebungen durch ein Dual-Modell-Stopp-Loss-Mechanismus.

Strategiequellcode
/*backtest
start: 2024-04-25 00:00:00
end: 2025-04-23 08:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"DOGE_USDT"}]
*/

//@version=6
strategy("RSI Divergence Strategy - AliferCrypto", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=10)

// === RSI Settings ===
rsiLength      = input.int(14, minval=1, title="RSI Length", group="RSI Settings", tooltip="Number of periods for RSI calculation")
rsiSource      = input.source(close, title="RSI Source", group="RSI Settings", tooltip="Price source used for RSI calculation")

// === Divergence Settings ===
lookLeft       = input.int(5, minval=1, title="Pivot Lookback Left", group="Divergence Settings", tooltip="Bars to the left for pivot detection")
lookRight      = input.int(5, minval=1, title="Pivot Lookback Right", group="Divergence Settings", tooltip="Bars to the right for pivot detection")
rangeLower     = input.int(5, minval=1, title="Min Bars Between Pivots", group="Divergence Settings", tooltip="Minimum bars between pivots to validate divergence")
rangeUpper     = input.int(60, minval=1, title="Max Bars Between Pivots", group="Divergence Settings", tooltip="Maximum bars between pivots to validate divergence")

// === SL/TP Method ===
method         = input.string("Swing", title="SL/TP Method", options=["Swing", "ATR"], group="SL/TP Settings", tooltip="Choose between swing-based or ATR-based stop and target")

// === Swing Settings ===
swingLook      = input.int(20, minval=1, title="Swing Lookback (bars)", group="Swing Settings", tooltip="Bars to look back for swing high/low")
swingMarginPct = input.float(1.0, minval=0.0, title="Swing Margin (%)", group="Swing Settings", tooltip="Margin around swing levels as percentage of price")
rrSwing        = input.float(2.0, title="R/R Ratio (Swing)", group="Swing Settings", tooltip="Risk/reward ratio when using swing-based method")

// === ATR Settings ===
atrLen         = input.int(14, minval=1, title="ATR Length", group="ATR Settings", tooltip="Number of periods for ATR calculation")
atrMult        = input.float(1.5, minval=0.1, title="ATR SL Multiplier", group="ATR Settings", tooltip="Multiplier for ATR-based stop loss calculation")
rrAtr          = input.float(2.0, title="R/R Ratio (ATR)", group="ATR Settings", tooltip="Risk/reward ratio when using ATR-based method")

// === RSI Calculation ===
_d    = ta.change(rsiSource)
up    = ta.rma(math.max(_d, 0), rsiLength)
down  = ta.rma(-math.min(_d, 0), rsiLength)
rsi   = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))

// === Divergence Detection ===
defPl      = not na(ta.pivotlow(rsi, lookLeft, lookRight))
defPh      = not na(ta.pivothigh(rsi, lookLeft, lookRight))
rsiAtRR   = rsi[lookRight]
barsPl    = ta.barssince(defPl)
barsPl1   = barsPl[1]
inRangePL = barsPl1 >= rangeLower and barsPl1 <= rangeUpper
barsPh    = ta.barssince(defPh)
barsPh1   = barsPh[1]
inRangePH = barsPh1 >= rangeLower and barsPh1 <= rangeUpper
prevPlRsi   = ta.valuewhen(defPl, rsiAtRR, 1)
prevPhRsi   = ta.valuewhen(defPh, rsiAtRR, 1)
prevPlPrice = ta.valuewhen(defPl, low[lookRight], 1)
prevPhPrice = ta.valuewhen(defPh, high[lookRight], 1)
bullCond    = defPl and low[lookRight] < prevPlPrice and rsiAtRR > prevPlRsi and inRangePL
bearCond    = defPh and high[lookRight] > prevPhPrice and rsiAtRR < prevPhRsi and inRangePH

plotshape(bullCond, title="Bullish Divergence", style=shape.triangleup, location=location.belowbar, color=color.green, size=size.tiny)
plotshape(bearCond, title="Bearish Divergence", style=shape.triangledown, location=location.abovebar, color=color.red, size=size.tiny)

// === Entries ===
if bullCond
    strategy.entry("Long", strategy.long)
if bearCond
    strategy.entry("Short", strategy.short)

// === Pre-calculate SL/TP components ===
swingLow    = ta.lowest(low, swingLook)
swingHigh   = ta.highest(high, swingLook)
atrValue    = ta.atr(atrLen)

// === SL/TP Calculation & Exits ===
var float slPrice = na
var float tpPrice = na
var float rr      = na

// Long exits
if strategy.position_size > 0
    entryPrice = strategy.position_avg_price
    if method == "Swing"
        slPrice := swingLow * (1 - swingMarginPct / 100)
        rr      := rrSwing
    else
        slPrice := entryPrice - atrValue * atrMult
        rr      := rrAtr
    risk     = entryPrice - slPrice
    tpPrice  := entryPrice + risk * rr
    strategy.exit("Exit Long", from_entry="Long", stop=slPrice, limit=tpPrice)

// Short exits
if strategy.position_size < 0
    entryPrice = strategy.position_avg_price
    if method == "Swing"
        slPrice := swingHigh * (1 + swingMarginPct / 100)
        rr      := rrSwing
    else
        slPrice := entryPrice + atrValue * atrMult
        rr      := rrAtr
    risk     = slPrice - entryPrice
    tpPrice  := entryPrice - risk * rr
    strategy.exit("Exit Short", from_entry="Short", stop=slPrice, limit=tpPrice)

// === Plot SL/TP Levels ===
plot(strategy.position_size != 0 ? slPrice : na, title="Stop Loss", style=plot.style_linebr, color=color.red)
plot(strategy.position_size != 0 ? tpPrice : na, title="Take Profit", style=plot.style_linebr, color=color.green)

// === Alerts ===
alertcondition(bullCond, title="Bull RSI Divergence", message="Bullish RSI divergence detected")
alertcondition(bearCond, title="Bear RSI Divergence", message="Bearish RSI divergence detected")