Quantitative Handelsstrategie auf Basis von RSI-Indikatoren

Schriftsteller:ChaoZhang, Datum: 14.9.2023
Tags:

Dieser Artikel erklärt detailliert eine quantitative Handelsstrategie, die den RSI-Indikator verwendet, um Handelssignale zu generieren.

I. Strategische Logik

Die wichtigste Handelslogik ist folgende:

  1. Der RSI-Indicator wird berechnet und mit Hilfe des EMA-Indicators (28) glättet, um den verarbeiteten Oszillator zu erhalten.

  2. Berechnen Sie Bollinger Bands auf dem verarbeiteten RSI, um obere/untere Bands zu erhalten.

  3. Wenn der verarbeitete RSI unterhalb der Einstiegslinie kreuzt, wird ein Kaufsignal generiert.

  4. Wenn der Indikator in die Überkauf-/Überverkaufszonen eintritt, wird ein Schlusssignal erzeugt.

Auf diese Weise können die Merkmale des RSI zur Erfassung von Umkehrchancen genutzt werden.

II. Vorteile der Strategie

Der größte Vorteil ist der erhöhte Parameter-Tuning-Raum durch die Indikatorverarbeitung, der eine strengere Kontrolle der Handelsfrequenz ermöglicht und Überhandelungen verhindert.

Ein weiterer Vorteil sind die intuitiven Einstiegskriterien, die auf klaren numerischen Werten des Indikators basieren.

Schließlich trägt der Überkauf/Überverkauf-Bereich auch zur rechtzeitigen Gewinngewinnung und zur Risikokontrolle pro Handel bei.

III. Mögliche Schwächen

Die Strategie birgt jedoch auch folgende Risiken:

Erstens konzentriert sich der RSI auf Umkehrtrades, die während der Trends falsche Signale erzeugen können.

Zweitens kann eine unsachgemäße Einstellung der Parameter auch zu einer Überoptimierung und einer Nichtanpassung an veränderte Marktbedingungen führen.

Schließlich setzt die relativ geringe Gewinnrate die Strategie auch einem Abzugrisiko aus.

IV. Zusammenfassung

Zusammenfassend stellt dieser Artikel hauptsächlich eine quantitative Handelsstrategie vor, die den RSI-Indikator verwendet. Er steuert die Handelsfrequenz über Parameter-Tuning und hat klare Ein-/Ausgangsregeln. Während die Parameter optimiert werden, müssen auch die Risiken des Umkehrhandels verwaltet werden. Insgesamt bietet er einen einfachen und intuitiven RSI-Strategie-Rahmen.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//-----------------------------------------------------------------
//This simple strategy base on RSI, EMA, Bollinger Bands to get Buy and Sell Signal with detail as below:
//-----------------------------------------------------------------
//1.Define Oscillator Line
//+ Oscillator Line is smoothed by ema(28) of RSI(14) on H1 Timeframe
//2.Define Overbought and Oversold
//+ Apply Bollinger Bands BB(80,3) on Oscillator Line and calculate %b
//+ Overbought Zone marked above level 0.8
//+ Oversold Zone marked below level 0.2
//3.Buy Signal
//+ Entry Long Positon when %b crossover Point of Entry Long
//+ Deafault Point of Entry Long is 0.2
//+ Buy signal marked by Green dot
//4.Sell Signal
//+ Entry Short Position when %b crossunder Point of Entry Short
//+ Deafault Point of Entry Short is 0.8
//+ Sell signal marked by Red dot
//5.Exit Signal
//+ Exit Position (both Long and Short) when %b go into Overbought Zone or Oversold Zone
//+ Exit signal marked by Yellow dot
//-----------------------------------------------------------------
strategy(title="RSI %b Signal [H1 Backtesting]", overlay=false)

//RSI
rsi_gr="=== RSI ==="
rsi_len = input(14, title = "RSI",inline="set",group=rsi_gr)
smoothed_len = input(28, title = "EMA",inline="set",group=rsi_gr)
rsi=ta.ema(ta.rsi(close,rsi_len),smoothed_len)
//rsi's BOLLINGER BANDS
pb_gr="=== %b ==="
length = input(80, title = "Length",inline="set1",group=pb_gr)
rsimult = input(3.0, title = "Multiplier",inline="set1",group=pb_gr)
ovb = input(0.8, title = "Overbought",inline="set2",group=pb_gr)
ovs = input(0.2, title = "Oversold",inline="set2",group=pb_gr)
et_short = input(0.8, title = "Entry Short",inline="set3",group=pb_gr)
et_long = input(0.2, title = "Entry Long",inline="set3",group=pb_gr)
[rsibasis, rsiupper, rsilower] = ta.bb(rsi, length, rsimult)
//rsi's %B
rsipB = ((rsi - rsilower) / (rsiupper - rsilower))
plot(rsipB, title="rsi's %B", color=rsipB>math.min(ovb,et_short)?color.red:rsipB<math.max(ovs,et_long)?color.green:color.aqua, linewidth=1)

h1=hline(1,color=color.new(color.red,100))
h4=hline(ovb,color=color.new(color.red,100))
h0=hline(0,color=color.new(color.green,100))
h3=hline(ovs,color=color.new(color.green,100))
h5=hline(0.5,color=color.new(color.silver,0),linestyle=hline.style_dotted)

fill(h1,h4, title="Resistance", color=color.new(color.red,90))
fill(h0,h3, title="Support", color=color.new(color.green,90))

//Signal
rsi_buy=
           rsipB[1]<et_long
           and
           rsipB>et_long
rsi_sell=
           rsipB[1]>et_short
           and
           rsipB<et_short
rsi_exit=
           (rsipB[1]>ovs and rsipB<ovs)
           or
           (rsipB[1]<ovb and rsipB>ovb)
plotshape(rsi_buy?rsipB:na,title="Buy",style=shape.circle,color=color.new(color.green,0),location=location.absolute)
plotshape(rsi_sell?rsipB:na,title="Sell",style=shape.circle,color=color.new(color.red,0),location=location.absolute)
plotshape(rsi_exit?rsipB:na,title="Exit",style=shape.circle,color=color.new(color.yellow,0),location=location.absolute)
//Alert
strategy.entry("Long",strategy.long,when=rsi_buy)
strategy.close("Long",when=rsi_exit)
strategy.entry("Short",strategy.short,when=rsi_sell)
strategy.close("Short",when=rsi_exit)
//EOF

Mehr