Die Ressourcen sind geladen. Beförderung...

RSI-Impulsumkehrstrategie

Schriftsteller:ChaoZhang, Datum: 2023-11-07 15:45:15
Tags:

img

Übersicht

Die RSI-Impulsumkehrstrategie identifiziert Überkauf- und Überverkaufszustände, indem sie RSI-Indikatoren und Candlestick-Body-Richtungen für den Umkehrhandel kombiniert.

Strategie Logik

Die Strategie wird hauptsächlich durch folgende Teile umgesetzt:

  1. Konnors RSI-Indikator

    Berechnet konventionelle RSI, RSI Win Ratio und RSI Pariser, um Connors RSI als Durchschnitt zu erhalten.

  2. Schneller RSI-Indikator

    Verwendet Preisänderungen, um schnelle RSI zu berechnen, die ultra-kurzfristige Zyklen widerspiegeln.

  3. Leuchterkörperfilter

    Erfordert einen bullischen Körper für lange und einen bearischen Körper für kurze, um falsche Ausbrüche zu verhindern.

  4. Lange und kurze Konditionen

    Gehen Sie lang, wenn Connors RSI unter 20 und schnell RSI unter 25 mit bullish Körper.

    Gehen Sie kurz, wenn Connors RSI über 80 und schnell RSI über 75 mit bärischem Körper.

  5. Stop-Loss-Ausgang

    Verlässt mit Stop-Loss, wenn sich der Leuchterkörper dreht.

Der Connors RSI identifiziert langfristige Trendumkehrpunkte, der schnelle RSI identifiziert kurzfristige Umkehrungen und der Candlestick Body gewährleistet die Gültigkeit von Ausbrüchen.

Analyse der Vorteile

Zu den Vorteilen dieser Strategie gehören:

  1. Kombination von langfristigen und kurzfristigen Indikatoren

    Connors RSI spiegelt langfristige Zyklen und schneller RSI spiegelt kurzfristige Zyklen wider, wobei beide kombiniert werden können, um Umkehrpunkte genau zu erkennen.

  2. Leuchterkörperfilter

    Der Handel nur mit Körper-Breakouts kann Verluste durch falsche Breakouts reduzieren.

  3. Einstellbare Parameter

    RSI-Parameter, Handelsprodukte und Handelszeitrahmen können frei an verschiedene Märkte angepasst werden.

  4. Einfach und intuitiv

    Der RSI und der Leuchtturm sind grundlegende Indikatoren, leicht verständliche Logik.

  5. Einfach umzusetzen

    Benutzt nur eingebaute Indikatoren, erfordert wenig Code und ist einfach zu implementieren.

Risikoanalyse

Die wichtigsten Risiken dieser Strategie sind:

  1. Risiko einer fehlgeschlagenen Umkehrung

    Der Preis setzt den ursprünglichen Trend nach dem Umkehrsignal fort, was zu Verlusten führt.

  2. Marktrisiko in unterschiedlicher Höhe

    Häufige ineffiziente Signale, die in verschiedenen Märkten ausgelöst werden.

  3. Falsches Ausbruchrisiko

    Der Leuchtturmfilter kann falsche Ausbrüche nicht vollständig vermeiden.

  4. Parameterrisiko

    Unangemessene RSI-Parameter können Trades verpassen oder mehrere ineffiziente Trades auslösen.

  5. Risiken aufgrund besonderer Marktbedingungen

    Die RSI-Indikatoren können unter besonderen Marktbedingungen ausfallen und falsche Signale erzeugen.

Optimierungsrichtlinien

Die Strategie kann aus folgenden Gesichtspunkten optimiert werden:

  1. Hinzufügen von Stop-Loss-Mechanismen

    Optimieren Sie Stop-Loss-Strategien für vernünftigere Stops und reduzieren Sie Einzelhandelsverluste.

  2. Integration mehrerer Indikatoren

    Fügen Sie Filter wie MACD und KD hinzu, um Signale zuverlässiger zu machen.

  3. Wahrscheinlichkeitsfilter hinzufügen

    Kombination von Trend- und Unterstützungs-/Widerstandsanalysen, um Geschäfte mit geringer Wahrscheinlichkeit zu vermeiden.

  4. Optimierung der Parameter-Einstellungen

    Testparameter auf verschiedenen Produkten und Zeitrahmen, um optimale Werte zu finden.

  5. Vermeiden Sie spezielle Marktbedingungen

    Identifizieren und vermeiden Sie den Handel unter besonderen Marktbedingungen, um große Verluste zu vermeiden.

Schlussfolgerung

Die RSI-Momentum-Umkehrstrategie identifiziert langfristige und kurzfristige Umkehrungen mit Connors RSI und schnellen RSI, mit Candlestick-Körperfiltern, um die Signalgültigkeit zu erhöhen. Die Vorteile wie Indikatorkombinationen und verstellbare Parameter ermöglichen es, Umkehrungen zu erfassen und gegen den Trend zu handeln, wenn überkauft oder überverkauft.


/*backtest
start: 2023-10-07 00:00:00
end: 2023-11-06 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Connors RSI Strategy v1.0", shorttitle = "CRSI str 1.0", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 10)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
usecrsi = input(true, defval = true, title = "Use CRSI Strategy")
usefrsi = input(true, defval = true, title = "Use FRSI Strategy")
usemod = input(true, defval = true, title = "CRSI+FRSI Mode")
limit = input(25, defval = 25, minval = 1, maxval = 100, title = "RSI limit")
usebod = input(true, defval = true, title = "Use Body-filter")
usecol = input(true, defval = true, title = "Use Color-filter")
fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//CRSI
rsilen = 3
streaklen = 2
lookback = 100
rsi = rsi(close,rsilen)
upday = close > close[1] ? 1 : 0
downday = close < close[1] ? -1 : 0
upstreak = upday!=0 ? upstreak[1] + upday : 0
downstreak = downday!=0 ? downstreak[1] + downday : 0
streak = upstreak + downstreak
streakrsi = rsi(streak,streaklen)
roc = close/close[1] - 1
roccount = 0
for i=1 to lookback-1
    roccount := roc[i]<roc ? roccount + 1 : roccount
crsi = (rsi + streakrsi + roccount) / 3

//Oscilator
// rsiplot = plot(crsi, title="RSI", style=line, linewidth=1, color=blue)
// band1 = hline(80, title="Upper Line", linestyle=dashed, linewidth=1, color=red)
// band0 = hline(20, title="Lower Line", linestyle=dashed, linewidth=1, color=green)
// fill(band1, band0, color=purple, transp=90)

//Fast RSI
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Body Filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 3 or usebod == false

//Color Filter
bar = close > open ? 1 : close < open ? -1 : 0
gbar = bar == 1 or usecol == false
rbar = bar == -1 or usecol == false

//Signals

up1 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and crsi < limit and body and usecrsi
dn1 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and crsi > 100 - limit and body and usecrsi
up2 = rbar and (strategy.position_size == 0 or close < strategy.position_avg_price) and fastrsi < limit and body and usefrsi
dn2 = gbar and (strategy.position_size == 0 or close > strategy.position_avg_price) and fastrsi > 100 - limit and body and usefrsi
exit = ((strategy.position_size > 0 and bar == 1) or (strategy.position_size < 0 and bar == -1)) and body

//Trading
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if ((up1 or up2) and usemod == false) or (up1 and up2 and usemod)
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if ((dn1 or dn2) and usemod == false) or (dn1 and dn2 and usemod)
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if  exit
    strategy.close_all()

Mehr