Handelsstrategie zur Umkehrung des RSI

Schriftsteller:ChaoZhang, Datum: 2023-09-28 16:09:39
Tags:

Übersicht

Diese Strategie verwendet den RSI-Indikator, um Markttrends zu beurteilen und Handelssignale zu generieren, wenn überkaufte oder überverkaufte Bedingungen auftreten. Es zielt darauf ab, kurzfristige Umkehrbewegungen auf dem Markt zu erfassen. Es beinhaltet auch gleitende Durchschnitte und Gewinn-/Stop-Loss-Logik, um Signale zu filtern und Risiken zu kontrollieren.

Strategie Logik

  1. Berechnen Sie den 14-Perioden-RSI und setzen Sie die überkaufte Linie auf 67 und die überverkaufte Linie auf 44.

  2. Wenn der RSI oberhalb der Überkauflinie überschreitet, wird ein Verkaufssignal generiert.

  3. Fügen Sie einen gleitenden Durchschnittsfilter hinzu. Verkaufssignale treten nur auf, wenn der Schluß unter dem MA des vorherigen Tages liegt; Kaufsignale treten nur auf, wenn der Schluß über dem MA des vorherigen Tages liegt.

  4. Einbeziehen Sie Profit-taking- und Stop-Loss-Logik. Entweder feste Punkte oder RSI-basierte Exits können verwendet werden.

Analyse der Vorteile

  1. Erfasst kurzfristige Umkehrchancen anhand von RSI-Überkauf-/Überverkaufswerten.

  2. Der gleitende Durchschnittsfilter vermeidet den gegen den Trend gerichteten Handel.

  3. Profit-taking und Stop-Loss kontrollieren Einzelhandelsverluste.

  4. Sie können Trends umkehren.

Risiken und Lösungen

  1. RSI-Verzögerung kann falsche Signale verursachen.

  2. Der festgelegte Stop-Loss kann zu breit oder zu eng sein.

  3. Festgewinnaufnahmen können zu früh oder zu klein ausfallen.

  4. Es gelingt ihnen nicht, die verschiedenen Märkte zu filtern, was zu Überhandelungen und Verlusten führt.

Optimierungsrichtlinien

  1. Test RSI-Parameter in verschiedenen Zeitrahmen.

  2. Anpassung des RSI-Niveaus für Überkauf/Überverkauf.

  3. Versuchen Sie andere gleitende Durchschnitte oder andere Filter.

  4. Test festgelegte und dynamische Gewinnziele/Stopps.

  5. Optimierung der Gewinn-/Stoppwerte, um die Marktvolatilität anzupassen.

  6. Fügen Sie Filter hinzu, um Whipsaws in verschiedenen Märkten zu vermeiden.

  7. Überlegen Sie, ob Sie mehrere Zeitrahmen miteinander verbinden, um die Signalqualität zu verbessern.

Zusammenfassung

Diese Strategie handelt um Umkehrungen unter Verwendung von RSI in Kombination mit gleitenden Durchschnitten und Gewinn-/Stop-Loss-Logik. Sie zielt darauf ab, kurzfristige Wende im Markt zu erfassen. Weitere Parameteroptimierung und zusätzliche Filter können die Rentabilität verbessern und gleichzeitig die Risiken reduzieren. Sie eignet sich für Anleger, die auf kurzfristige Bewegungen empfindlich reagieren und häufig handeln möchten.


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

//© профешинил хомячело
//@version = 4

strategy("RSI Strategy Professional Хомячело", overlay=false)
length = input( 14 )
overSold = input( 44 )
overBought = input( 67 )
price = open
rsi = rsi(price, length)
band1 = hline(overSold, "overSold12", color=#C0C0C0)
band0 = hline(overBought, "overBought12", color=#C0C0C0)
plot(rsi, "RSI", color=color.red)
fill(band1, band0, color=color.black, transp=90, title="Background")
src = close
a = sma(src, 1)
aaa = strategy.opentrades + 1

n = input(defval = 0.0576923077, title = "AvgPrice - n")
//n = 0.0576923077

buysignal = crossover(rsi, overSold) and (a < (strategy.position_avg_price - n) or strategy.opentrades == 0)
sellsignal = crossunder(rsi, overBought) and (a > (strategy.position_avg_price + n) or strategy.opentrades == 0)


// crossover(rsi, overSold)
// crossunder(rsi, overBought)
if (not na(rsi))
    if(buysignal)
        strategy.entry("LONG", strategy.long, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000
    if(sellsignal)
        strategy.entry("SHORT", strategy.short, comment = tostring(a) + "\n(" + tostring(aaa) + ")")
        n += 1000

//лонги орні       
    if(rsi < 15 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ЛОНГ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi < 20 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("LONG", strategy.long, comment = "ЛОНГ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
//шорти орні
    if(rsi > 85 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ЙОБАНИЙ НАСРАВ ТА БЕРИ ШОРТ НА ВСЬО ШО Є НАХУЙ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")
    if(rsi > 80 and strategy.opentrades != 5 and a < (strategy.position_avg_price - n))
        strategy.entry("SHORT", strategy.short, comment = "ШОРТ НА ВСЮ КОТЛЄТУ\n" + tostring(a) + "\n(" + tostring(aaa) + "!!!)")


//стоп-лосс і ціль

//rsi
rsion = input(defval = false, title = "Тейк-профіт по RSI")
rcl = input(defval = 73.0, title = "RSI тейк по лонгу")
rcs = input(defval = 44.0, title = "RSI тейк по шорту")
possize = input(defval = 250.0, title = "Маржа")
posp = input(defval = 3.0, title = "Плече")

//tick
ut = input(defval = false, title = "Тейк-профіт")
tar = input(defval = 4500.0, title = "Тейк-профіт у тіках")
us = input(defval = false, title = "Стоп-лосс")
stop = input(defval = 0.0, title = "Стоп-лосс у тіках")
tar:=tar/syminfo.mintick
stop:=stop/syminfo.mintick

if(ut==true and us==false)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, comment = "ТейкL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, comment = "ТейкS")
if(us==true and ut==false)
    strategy.exit(id="LX", from_entry = "LONG", loss = stop, comment = "СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", loss = stop, comment = "СтопS")
    
if(ut==true and us==true)
    strategy.exit(id="LX", from_entry = "LONG", profit = tar, loss = stop, comment ="Тейк/СтопL")
    strategy.exit(id="SX", from_entry = "SHORT", profit = tar, loss = stop, comment ="Тейк/СтопS")
    
//закриття по rsi
if(rsion == 1 )
    pr = round(((a / strategy.position_avg_price - 1) * possize * posp), 2)
    ppr = round(((a / strategy.position_avg_price - 1) * 100 * posp), 2)
    spr = round((1 - (a / strategy.position_avg_price)) * possize * posp, 2)
    sppr = round((100 - (a / strategy.position_avg_price * 100)) * posp, 2)
    
    if(rsi > rcl)
        strategy.close(id="LONG", comment = "LT\n" + tostring(ppr) + "%\n" + tostring(pr) + "$\n" + tostring(a))
    if(rsi < rcs)
        strategy.close(id="SHORT", comment = "ST\n" + tostring(sppr) + "%\n" + tostring(spr) + "$\n" + tostring(a))

Mehr