Schnelle RSI-Gap-Handelsstrategie für Kryptowährungen

Schriftsteller:ChaoZhang, Datum: 2023-11-27 11:22:19
Tags:

img

Übersicht: Dies ist eine schnelle RSI-Gap-Handelsstrategie, die für Kryptowährungsmärkte entwickelt wurde.

Grundsätze: Die Strategie verwendet zwei Haupttechniken: schnelle RSI-Indikatoren und Gap-Muster.

Erstens berechnet er einen schnellen RSI-Indikator, der nur auf 7 Kerzen basiert. Dies macht den RSI empfindlicher, um schnell überkaufte/überverkaufte Bedingungen zu erkennen. Die Obergrenze des RSI wird auf 70 und die untere Grenze auf 30 festgelegt. Über 70 gilt als überkauft, unter 30 als überverkauft.

Zweitens erkennt es Lückenmuster auf Kerzenkarten. Lücken beziehen sich auf leere Räume zwischen dem aktuellen Eröffnungspreis und dem vorherigen Schlusskurs. Lücken signalisieren hohe Volatilität und mögliche Trendumkehrungen.

Wenn ein Abwärtstrend auftritt, während der schnelle RSI einen Überverkauf zeigt, gehen Sie lang.

Darüber hinaus nutzt die Strategie andere Filter wie SMA und Min/Max-Indikatoren, um falsche Signale zu vermeiden.

Vorteile: Der größte Vorteil dieser Strategie besteht darin, extrem schnelle Überkauf/Überverkaufsschläge und Chancen für die Umkehrung von Lücken zu erfassen. Sie eignet sich besonders für hochvolatile Kryptomärkte, um schnelle Trendveränderungen zu erfassen. Im Vergleich zum regulären RSI reagiert der schnelle RSI viel schneller, was der hohen Frequenz des Kryptohandels entspricht.

Risiken:
Zu den wichtigsten Risiken der Strategie gehören:

  1. Der schnelle RSI kann zu empfindlich sein, was zu übermäßigen falschen Signalen führt.

  2. Die Unterschiede können nur normale Kursschwankungen sein, anstatt echte Umkehrungen.

  3. In Zeiten geringer Volatilität können Positionen über längere Zeit unbeschäftigt gehalten werden.

  4. Falsche Parameter-Einstellungen wie Min/Max-Periode könnten zu verdünnten Signalen und geringer Effizienz führen.

Folglich könnten folgende Methoden dazu beitragen, die oben genannten Risiken zu mindern:

  1. Anpassung der schnellen RSI-Parameter und Erhöhung der RSI-Periode, um sie weniger empfindlich zu machen.

  2. Verwenden Sie dynamische Stop-Loss, um Gewinne zu erzielen.

  3. Optimieren Sie die Strategiebeteiligungsquote. Begrenzen Sie die Beteiligung in Umgebungen mit geringer Volatilität.

  4. Kontinuierliche Rückprüfung und Optimierung der Parameter, um robuste Einstellungen zu gewährleisten.

Verbesserungen: Zu den wichtigsten Optimierungsrichtungen gehören:

  1. Erforschen Sie andere Indikatoren wie MACD, KDJ kombiniert mit Lücken, um die Präzision zu erhöhen.

  2. Erstellen Sie anpassungsfähige Stop-Loss-Mechanismen, die auf der Volatilität des Marktes basieren.

  3. Einbeziehung von Volumenindikatoren wie OBV, um die Umkehrung nach Lücken zu bestätigen.

  4. Optimieren Sie Filterparameter wie Min/Max-Periode, um die besten Einstellungen zu finden, um falsche Signale zu reduzieren.

  5. Erforschung der Anpassungsfähigkeit von Parametern für verschiedene Krypto-Assets.

Diese Anstrengungen könnten die Stabilität, Anpassungsfähigkeit und Zuverlässigkeit der Strategie erheblich verbessern.

Schlussfolgerung: Zusammenfassend ist die schnelle RSI-Gap-Trading-Strategie ein effizienter Ansatz, der explizit für volatile Krypto-Märkte entwickelt wurde. Durch kontinuierliche Tests und Verbesserungen hat sie das Potenzial, schnelle Marktumkehrungen zuverlässig zu erfassen und eine gleichbleibende Rentabilität zu erzielen.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.5", shorttitle = "Fast RSI str 1.5", overlay = true)

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