RSI und Bollinger-Band-Doppelstrategie

Schriftsteller:ChaoZhang, Datum: 2023-12-12 11:53:49
Tags:

img

Übersicht

Die Kernidee dieser Strategie besteht darin, den Relative Strength Index (RSI) und die Bollinger Bands, zwei technische Indikatoren, zu kombinieren, um doppelte Handelssignale zu filtern und die Störungen durch falsche Signale so weit wie möglich zu minimieren und die Signalqualität zu verbessern.

Wenn der RSI-Indikator überkaufte oder überverkaufte Signale zeigt, während der Preis die oberen und unteren Schienen der Bollinger-Bänder durchbricht oder zurückzieht, entstehen Handelsmöglichkeiten.

Strategieprinzip

Für den RSI-Teil überwachen wir zwei RSI-Indikatoren mit unterschiedlichen Zykluslängen gleichzeitig. Einer mit einem kürzeren Zyklus wird verwendet, um überkaufte und überverkaufte Signale zu erfassen, während ein anderer mit einem längeren Zyklus zur Bestätigung von Trendumkehrungen verwendet wird. Wenn der Kurzzyklus-RSI überkauft/überverkauft und der Langzyklus-RSI umgekehrt zeigt, glauben wir, dass sich eine Handelsmöglichkeit gebildet hat.

Für den Bollinger Bands Teil überwachen wir, ob der Preis durch die oberen und unteren Schienen bricht. Durchbrechen der oberen Schiene der Bollinger Bands ist der Verkaufspunkt, und durchbrechen der unteren Schiene ist der Kaufpunkt. Gleichzeitig überwachen wir auch, ob der Preis zurück zu den Bollinger Bands zieht, so dass Umkehrmöglichkeiten rechtzeitig erfasst werden können.

Wenn die RSI- und Bollinger Bands-Signale gleichzeitig erscheinen, glauben wir, dass die Handelsmöglichkeit Gestalt angenommen hat und eine Handelsanordnung ausgegeben wird.

Analyse der Vorteile

  • Die doppelte Indikatorfilterung ermöglicht eine höhere Zuverlässigkeit und vermeidet unnötige Trades
  • Ergreifen von Chancen sowohl in der Trend- als auch in der Umkehrmarktphase
  • Konfigurierbare Parameter für nach Bedarf verstellbare Einstellungen
  • Eingebettete Zeit- und Geldverwaltung

Risikoanalyse

  • Falsche Bollinger-Band-Einstellungen können zu falschen Signalen führen
  • Nicht in der Lage, mit extremer Marktvolatilität umzugehen
  • RSI-Divergenz kann falsche Signale erzeugen
  • Parameteroptimierung zur Anpassung an verschiedene Produkte und Zyklen

Risiken können durch Parameteroptimierung, angemessene Reduzierung der Positionen, manuelle Eingriffe usw. vermieden und kontrolliert werden.

Optimierungsrichtlinien

  • Anpassung der RSI-Parameter zur Optimierung von Überkauf-/Überverkaufsschätzungen
  • Anpassung der Breite der Bollinger-Bänder zur Optimierung der Breakout-Strategie
  • Hinzufügen eines Positionsmanagementmechanismus
  • Hinzufügen einer Stop-Loss-Strategie
  • Einbeziehung mehrerer Indikatoren zum Aufbau von Multifaktormodellen

Schlussfolgerung

Die RSI- und Bollinger Bands-Doppelstrategie nutzt die Stärken der beiden Indikatoren voll aus, um qualitativ hochwertige Signale zu generieren.


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

//@version=4
strategy("Ezieh Str.v2", shorttitle="Ezieh Str.v2", overlay=true, pyramiding=10, currency=currency.USD, slippage=3, commission_type=strategy.commission.cash_per_order, commission_value=0.04, initial_capital=1000)



UseDateFilter  = input(title="Enable Date Filter"         ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off date filter")
StartDate      = input(title="Start Date Filter"          ,type=input.time    ,defval=timestamp("1 Jan 2000 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to start excluding trades")
EndDate        = input(title="End Date Filter"            ,type=input.time    ,defval=timestamp("1 Jan 2100 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to stop excluding trades")
UseTimeFilter  = input(title="Enable Time Session Filter" ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off time session filter")
TradingSession = input(title="Trading Session"            ,type=input.session ,defval="1000-2200:1234567"                 ,group="Date & Time" ,tooltip="No trades will be taken outside of this range")

In(t)      => na(time(timeframe.period, t)) == false
TimeFilter = (UseTimeFilter and not In(TradingSession)) or not UseTimeFilter
DateFilter = time >= StartDate and time <= EndDate

DateTime = (UseDateFilter ? not DateFilter : true) and (UseTimeFilter ? In(TradingSession) : true) 

///////////// RSI
L_RSI_Length     = input(7  , title="L_Length")
L_RSI_OverSold   = input(45 , title="L_OverSold")
S_RSI_Length     = input(14 , title="S_Length")
S_RSI_OverBought = input(65 , title="S_OverBought")

price = close
Lvrsi = rsi(price, L_RSI_Length)
Svrsi = rsi(price, S_RSI_Length)

///////////// Bollinger Bands
BBlength = input(title="Bollinger Period Length", type=input.integer, defval=100, minval=2)
BBmult = 2.1 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
plot(BBbasis, color=color.aqua,title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver,title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver,title="Bollinger Bands Lower Line")
fill(p1, p2)


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")



///////////// Condition
LongCondition  = crossover(Lvrsi, L_RSI_OverSold)    and crossover(close  ,BBlower)
ShortCondition = crossunder(Svrsi, S_RSI_OverBought) and crossunder(close,BBupper)
Longexcon      = crossunder(low, BBupper)
Shortexcon     = crossover(low, BBlower)

qt = round(strategy.equity/price, 3)

///////////// RSI + Bollinger Bands Strategy
if (not na(Lvrsi))

    if LongCondition and DateTime
        strategy.entry("RSI_BB_L", strategy.long, qty=qt,  comment="Long")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if Longexcon
        strategy.close("RSI_BB_L", qty_percent = 100, comment = "L_exit")
    
    if ShortCondition and DateTime
        strategy.entry("RSI_BB_S", strategy.short, qty=qt,  comment="Short")
    else
        strategy.cancel(id="RSI_BB_S")
        
    if Shortexcon
        strategy.close("RSI_BB_S", qty_percent = 100, comment = "S_exit")
    
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Mehr