RSI dan Bollinger Bands Dual Strategy

Penulis:ChaoZhang, Tarikh: 2023-12-12 11:53:49
Tag:

img

Ringkasan

Idea utama strategi ini adalah untuk menggabungkan Indeks Kekuatan Relatif (RSI) dan Bollinger Bands, dua penunjuk teknikal, untuk menapis isyarat perdagangan berganda dan meminimumkan gangguan dari isyarat palsu sebanyak mungkin, meningkatkan kualiti isyarat.

Apabila penunjuk RSI menunjukkan isyarat overbought atau oversold manakala harga menembusi atau menarik semula rel atas dan bawah Bollinger Bands, peluang perdagangan akan muncul. Ia menggabungkan kelebihan kedua-dua penunjuk yang berbeza, dengan mengambil kira kedua-dua ciri statistik turun naik pasaran dan pendirian panjang / pendek peserta pasaran untuk membentuk asas penilaian yang komprehensif.

Prinsip Strategi

Untuk bahagian RSI, kami memantau dua penunjuk RSI dengan panjang kitaran yang berbeza pada masa yang sama. Satu dengan kitaran yang lebih pendek digunakan untuk menangkap isyarat overbought dan oversold, sementara satu dengan kitaran yang lebih lama digunakan untuk mengesahkan pembalikan trend. Apabila RSI kitaran pendek menunjukkan overbought / oversold dan RSI kitaran panjang menunjukkan pembalikan, kami percaya peluang perdagangan telah terbentuk.

Untuk bahagian Bollinger Bands, kami memantau sama ada harga menembusi rel atas dan bawah. Menembusi rel atas Bollinger Bands adalah titik jual, dan menembusi rel bawah adalah titik beli. Pada masa yang sama, kami juga memantau sama ada harga menarik kembali ke Bollinger Bands supaya peluang pembalikan dapat ditangkap dengan tepat pada masanya.

Apabila isyarat RSI dan Bollinger Bands muncul secara serentak, kami percaya peluang dagangan telah terbentuk dan pesanan dagangan dikeluarkan.

Analisis Kelebihan

  • Penapisan penunjuk berganda memberikan kebolehpercayaan yang lebih tinggi dan mengelakkan perdagangan yang tidak perlu
  • Mengambil peluang dalam kedua-dua peringkat pasaran trend dan pembalikan
  • Parameter yang boleh dikonfigurasi untuk tetapan yang boleh diselaraskan seperti yang diperlukan
  • Pengurusan masa dan wang tertanam

Analisis Risiko

  • Tetapan parameter Bollinger Bands yang tidak betul boleh menyebabkan isyarat palsu
  • Tidak dapat mengatasi turun naik pasaran yang melampau
  • Perbezaan RSI boleh menghasilkan isyarat yang salah
  • Pengoptimuman parameter yang diperlukan untuk menyesuaikan diri dengan produk dan kitaran yang berbeza

Risiko boleh dielakkan dan dikawal melalui pengoptimuman parameter, mengurangkan kedudukan yang sesuai, campur tangan manual, dll.

Arahan pengoptimuman

  • Sesuaikan parameter RSI untuk mengoptimumkan pertimbangan overbought / oversold
  • Sesuaikan lebar Bollinger Bands untuk mengoptimumkan strategi pecah
  • Tambah mekanisme pengurusan kedudukan
  • Tambah strategi stop loss
  • Menggabungkan lebih banyak penunjuk untuk membina model pelbagai faktor

Kesimpulan

Strategi RSI dan Bollinger Bands dual sepenuhnya menggunakan kekuatan kedua-dua penunjuk untuk menghasilkan isyarat berkualiti tinggi. Dengan pengoptimuman parameter dan pengurusan risiko yang betul, ia dapat mencapai pulangan pelaburan yang stabil. Menggabungkan lebih banyak isyarat dan model juga merupakan arah masa depan yang berpotensi.


/*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)

Lebih lanjut