Die Strategie zur Umkehrung der doppelten RSI-Mittelwerte

Schriftsteller:ChaoZhang, Datum: 2023-10-23 15:46:33
Tags:

img

Übersicht

Die Dual RSI Mean Reversion Strategy ist eine Trend-folgende Strategie, die überkaufte und überverkaufte Bedingungen anhand von zwei RSI-Indikatoren in verschiedenen Zeitrahmen identifiziert.

Strategie Logik

Die Strategie verwendet zwei RSI-Indikatoren mit unterschiedlichen Perioden - einen auf dem 5-Minuten-Chart und einen auf dem 1-Stunden-Chart.

Es verfolgt die Werte des RSI und sucht nach Situationen, in denen der RSI für eine bestimmte Anzahl von Balken unter 30 oder über 70 lag, was auf längere Überverkäufe oder Überkäufe hinweist.

Darüber hinaus verwendet es Heikin-Aschi-Kerzen und prüft nach einer definierten Anzahl von grünen oder roten Kerzen, um die Trendrichtung vor dem Eintritt in den Handel zu bestätigen.

Wenn sich sowohl die RSI- als auch die Heikin-Ashi-Konditionen ausrichten, wird die Strategie nach überverkauften Konditionen lang gehen oder nach überkauften Konditionen kurz gehen und auf eine Rückkehr zum Mittel setzen.

Positionen werden am Ende eines jeden Tages geschlossen, um nicht über Nacht gehalten zu werden.

Vorteile

  • Verwendet einen Mehrzeitrahmenansatz zur Ermittlung von Überkauf-/Überverkaufsbedingungen
  • Heikin-Aschi-Kerzen filtern Geräusche aus und identifizieren die Trendrichtung
  • Offener Farbfilter vermeidet falsche Signale
  • Klarer Ein- und Ausstiegsregeln auf der Grundlage von zwei Indikatoren, die
  • Risikomanagement durch Schließen von Positionen vor Ablauf eines jeden Tages

Risiken

  • Whipsaws möglich, wenn nach dem RSI-Überkauf/Überverkaufssignal ein starker Trend anhält
  • Marktlücken können zu Stopps führen
  • Heikin-Ashi-Verzögerung kann den Handel verzögern und fehlende Bewegungen verursachen
  • Schließung von Positionen am Tagesende verzichtet auf potenzielle Gewinne aus Übernachtungen

Verbesserungen

  • Zusätzliche Filter wie Volumen oder Volatilität hinzufügen, um Signale zu bestätigen
  • Optimierung von RSI-Perioden und Überkauf-/Überverkaufswerten für Instrumente
  • Dynamische Positionsgrößen auf der Grundlage von Volatilität
  • Experimentieren mit Gewinnzielen oder Trailing-Stops anstelle von Exits am Ende des Tages
  • Prüfungseffizienz auf verschiedenen Messgeräten und Einstellung der Parameter

Schlussfolgerung

Die Dual RSI Mean Reversion Strategie verfolgt einen regelbasierten Ansatz für die Handelsdynamik. Durch die Kombination von zwei Zeitrahmen, Überkauf/Überverkaufsindicatoren, Kerzenanalyse und einem Eingangsfilter zielt sie darauf ab, mit hoher Wahrscheinlichkeit Mittelumkehr-Setups zu identifizieren. Strenges Risikomanagement und umsichtige Positionsgröße helfen, Gewinne mit der Verwaltung von Drawdowns in Einklang zu bringen. Weitere Optimierung und Robustheitstests würden dazu beitragen, sie erfolgreich auf verschiedenen Märkten einzusetzen.


/*backtest
start: 2023-09-01 00:00:00
end: 2023-09-30 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Gidra
//2018

//@version=2
strategy(title = "Gidra's Vchain Strategy v0.1", shorttitle = "Gidra's Vchain Strategy v0.1", overlay = false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
rsiperiod = input(14, defval = 14, minval = 2, maxval = 100, title = "RSI period")
rsilimit = input(30, defval = 30, minval = 1, maxval = 50, title = "RSI limit")
rsibars = input(3, defval = 3, minval = 1, maxval = 20, title = "RSI signals")
useocf = input(true, defval = true, title = "Use Open Color Filter")
openbars = input(2, defval = 2, minval = 1, maxval = 20, title = "Open Color, Bars")
showrsi = input(true, defval = true, title = "Show indicator RSI")
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")


//Heikin Ashi Open/Close Price
o=open
c=close
h=high
l=low
haclose = (o+h+l+c)/4
haopen = na(haopen[1]) ? (o + c)/2 : (haopen[1] + haclose[1]) / 2
hahigh = max (h, max(haopen,haclose))
halow = min (l, min(haopen,haclose))
col=haopen>haclose ? red : lime
plotcandle(haopen, hahigh, halow, haclose, title="heikin", color=col)

//RSI
uprsi = rma(max(change(close), 0), rsiperiod)
dnrsi = rma(-min(change(close), 0), rsiperiod)
rsi = dnrsi == 0 ? 100 : uprsi == 0 ? 0 : 100 - (100 / (1 + uprsi / dnrsi))
uplimit = 100 - rsilimit
dnlimit = rsilimit
rsidn = rsi < dnlimit ? 1 : 0
rsiup = rsi > uplimit ? 1 : 0

//RSI condition
rsidnok = highest(rsidn, rsibars) == 1? 1 : 0
rsiupok = highest(rsiup, rsibars) == 1? 1 : 0

//Color Filter
bar = haclose > haopen ? 1 : haclose < haopen ? -1 : 0
gbar = bar == 1 ? 1 : 0
rbar = bar == -1 ? 1 : 0
openrbarok = sma(gbar, openbars) == 1 or useocf == false
opengbarok = sma(rbar, openbars) == 1 or useocf == false

//Signals
up = openrbarok and rsidnok
dn = opengbarok and rsiupok

lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]

//Indicator RSI
colbg = showrsi == false ? na : rsi > uplimit ? red : rsi < dnlimit ? lime : na
bgcolor(colbg, transp = 20)

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot, 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