Noros Schnelle RSI Durchbruchstrategie

Schriftsteller:ChaoZhang, Datum: 2023-09-12 11:40:02
Tags:

Dieser Artikel wird die Logik hinter der Fast RSI Breakthrough Strategy von Noro detailliert beschreiben, erklären, wie Handelssignale generiert werden und die Vorteile und potenziellen Risiken dieser Strategie analysieren.

I. Überblick über die Strategie

Diese Strategie verwendet hauptsächlich den RSI-Indikator, um Handelssignale zu generieren, kombiniert mit Candlestick-Filterung und Min/Max-Breakthroughs als Hilfsurteile, um ein komplettes Long/Short-Entscheidungssystem zu bilden.

II. Einzelheiten der Strategie

  1. Schnelle RSI-Einstellung

Die Strategie verwendet einen langen 7 schnellen RSI, um Signale von Markttrends durch schnelle RSI-Oszillationen zu erfassen.

  1. Filterung der Kerzen

Die Strategie filtert RSI-Signale anhand der Kerzenkörpergröße sma und berücksichtigt nur RSI-Signale auf Kerzen mit einer Körpergröße, die größer als die durchschnittliche Körpergröße für 5 Tage ist, und vermeidet Whipsaws.

  1. Minimaler/maximaler Durchbruch

Die Strategie prüft, ob in den letzten mmbars minimale/maximale Durchbrüche stattgefunden haben, kombiniert mit dem RSI-Level, um unterste Umkehrungen und oberste Aufschlüsselungen zu ermitteln.

  1. Zusammenfassung des Handelssignals

Langes Signal: RSI unter 30, Körpergröße übersteigt durchschnittliche Körpergröße, und Min-Break unterstützt.

Kurzsignal: RSI überschreitet 70, Körpergröße übersteigt durchschnittliche Körpergröße und maximale Brechwiderstände.

Ausgangssignal: Wenn der RSI die Grenzen in entgegengesetzte Richtung der Position zurückschreitet.

III. Vorteile der Strategie

  1. Optimierte RSI-Parameter erfassen Trendänderungen schnell.

  2. Die Kombination mit Leuchtern und Min/Max verhindert unnötige Whipsaws.

  3. Der Stop-Loss-Mechanismus geht aus, wenn der RSI seine Grenzen überschreitet.

IV. Risiken der Strategie

  1. RSI ist anfällig für falsche Signale, braucht eine zusätzliche Bestätigung.

  2. Optimierte Parameter können nur für bestimmte Marktperioden geeignet sein.

  3. Der Stop-Loss-Mechanismus ist möglicherweise zu mechanisch und kann bei einem einzigen Stop-Loss keinen großen Verlust kontrollieren.

V. Schlussfolgerung

Diese Strategie integriert mehrere technische Indikatoren für einen robusten Trend. Allerdings sollten Risiken von Backtest-Overfitting und Stop-Loss beachtet werden, und die Live-Performance sollte vorsichtig bewertet werden.


/*backtest
start: 2022-09-11 00:00:00
end: 2023-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.6", shorttitle = "Fast RSI str 1.6", overlay = true, 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")
usersi = input(true, defval = true, title = "Use Fast RSI Strategy")
usemm = input(true, defval = true, title = "Use Min/Max Strategy")
usebc = input(true, defval = true, title = "Use BarColor Strategy")
usesma = input(false, defval = false, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
mmbars = input(1, defval = 1, minval = 1, maxval = 5, title = "Min/Max Bars")
showsma = input(false, defval = false, title = "Show SMA Filter")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, 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")

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

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

//Body
body = abs(close - open)
abody = sma(body, 10)

//MinMax Bars
min = min(close, open)
max = max(close, open)
minsignal = min < min[1] and bar == -1 and bar[1] == -1 ? 1 : 0
maxsignal = max > max[1] and bar == 1 and bar[1] == 1 ? 1 : 0
mins = sma(minsignal, mmbars) == 1
maxs = sma(maxsignal, mmbars) == 1

//SMA Filter
sma = sma(close, smaperiod)
colorsma = showsma ? blue : na
plot(sma, color = colorsma, linewidth = 3)

//Signals
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > abody / 5 and usersi
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > abody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and fastrsi < 70 and usemm
dn2 = maxs and (close < sma or usesma == false) and fastrsi > 30 and usemm 
up3 = sma(bar, 2) == -1 and usebc
dn3 = sma(bar, 2) == 1 and usebc
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > abody / 2

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Mehr