RSI und Bollinger Bands Quantitative Handelsstrategie

Schriftsteller:ChaoZhang, Datum: 2024-01-08 10:16:22
Tags:

img

Übersicht

Diese Strategie kombiniert den Relative Strength Index (RSI) und Bollinger Bands, um Handelschancen zu identifizieren, die zu den mittleren Umkehrstrategien im quantitativen Handel gehören.

Strategie Logik

  1. Verwenden Sie den RSI-Indikator, um zu beurteilen, ob der Markt überverkauft ist.

  2. Verwenden Sie Bollinger-Bänder, um festzustellen, ob der Preis aufwärts springt.

  3. Kombinieren Sie das RSI-Überverkauftes Signal und das Bollinger Bands-Break-out-Signal, um Kauf-Eingangspunkte zu setzen.

Analyse der Vorteile

  1. Die Strategie kombiniert den mittleren Reversionsindikator RSI und den Kanalindikator Bollinger Bands, um die Einstiegspunkte genauer zu lokalisieren.

  2. Der RSI-Indikator kann viele falsche Ausbrüche herausfiltern und unnötige Trades reduzieren.

  3. Die Bollinger Bands fungieren als Stop-Loss, um das Risiko jedes Handels zu kontrollieren.

Risikoanalyse

  1. Der RSI-Indikator kann falsche Signale geben, was zu fehlenden Kaufmöglichkeiten führt.

  2. Bei unzulässigen Parameter-Einstellungen von Bollinger Bands kann der Stop-Loss zu locker oder zu streng sein.

  3. Auswahl unzulässiger Handelsinstrumente, z. B. Handel mit Aktien mit geringer Kapitalkapitalisierung mit einem höheren Liquiditätsrisiko.

Optimierungsrichtung

  1. Testen Sie verschiedene Parameterkombinationen wie RSI-Periode, Bollinger-Periode und Multiplikator, um optimale Parameter zu finden.

  2. Einbeziehen Sie andere Indikatoren wie KD, MACD, um strengere Kaufbedingungen festzulegen, um Signale zu filtern.

  3. Die Risikopositionen werden in der Regel in der Regel in den folgenden Kategorien aufgeführt:

Schlussfolgerung

Diese Strategie nutzt die Logik des Kaufs bei RSI-Tiefstständen und des Verkaufs bei Bollinger-Hochständen, die zu den Mittelumkehrstrategien gehören. Im Vergleich zu der Verwendung einzelner Indikatoren wie RSI oder Bollinger-Bänder kann diese Strategie Ein- und Ausstiegspunkte genauer lokalisieren und somit bessere Ergebnisse erzielen. Die nächsten Schritte könnten durch Parameteroptimierung, Signalfilterung, Stop-Loss-Strategien usw. verbessert werden.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's BB + RSI Strategy v1.0", shorttitle = "BB+RSI str 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
rsiuse = input(true, defval = true, title = "Use RSI")
bbuse = input(true, defval = true, title = "Use BB")
showbb = input(true, defval = true, title = "Show BB Overlay")
bbperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "BB period")
bbsource = input(ohlc4, title = "BB source")
bbmult = input(2, defval = 2, minval = 1, maxval = 100, title = "BB Mult")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 1000, title = "RSI period")
rsisource = input(close, title = "RSI source")
rsilimit = input(30, defval = 30, minval = 1, maxval = 49, title = "RSI Limit")
fromyear = input(1900, defval = 1900, 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")

//RSI
rsi = rsi(rsisource, rsiperiod)

//BB
basis = sma(bbsource, bbperiod)
dev = bbmult * stdev(bbsource, bbperiod)
upper = basis + dev
lower = basis - dev

//Overlay
col = showbb ? blue : na
plot(upper, color = col)
plot(basis, color = col)
plot(lower, color = col)

//Signals
up = (rsi < rsilimit or rsiuse == false) and (low < lower or bbuse == false)
cl = close > open

//Trading
lot = 0.0 
lot := strategy.position_size == 0 ? strategy.equity / close * capital / 100 : lot[1]
if up
    strategy.entry("Long", strategy.long, lot)
if cl
    strategy.entry("Close", strategy.short, 0)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()

Mehr