Strategi ganda RSI dan Bollinger Bands

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

img

Gambaran umum

Ide inti dari strategi ini adalah untuk menggabungkan Indeks Kekuatan Relatif (RSI) dan Bollinger Bands, dua indikator teknis, untuk menyaring sinyal perdagangan ganda dan meminimalkan gangguan dari sinyal palsu sebanyak mungkin, meningkatkan kualitas sinyal.

Ketika indikator RSI menunjukkan sinyal overbought atau oversold sementara harga menembus atau menarik kembali rel atas dan bawah Bollinger Bands, peluang perdagangan akan muncul. Ini menggabungkan keuntungan dari dua indikator yang berbeda, dengan mempertimbangkan karakteristik statistik fluktuasi pasar dan posisi panjang / pendek peserta pasar untuk membentuk dasar penilaian yang komprehensif.

Prinsip Strategi

Untuk bagian RSI, kami memantau dua indikator RSI dengan panjang siklus yang berbeda pada saat yang sama. Yang satu dengan siklus yang lebih pendek digunakan untuk menangkap sinyal overbought dan oversold, sementara yang satu dengan siklus yang lebih lama digunakan untuk mengkonfirmasi pembalikan tren. Ketika RSI siklus pendek menunjukkan overbought / oversold dan RSI siklus panjang menunjukkan pembalikan, kami percaya bahwa peluang perdagangan telah terbentuk.

Untuk bagian Bollinger Bands, kami memantau apakah harga menembus rel atas dan bawah. Menembus rel atas Bollinger Bands adalah titik jual, dan menembus rel bawah adalah titik beli. Pada saat yang sama, kami juga memantau apakah harga menarik kembali ke Bollinger Bands sehingga peluang pembalikan dapat ditangkap secara tepat waktu.

Ketika sinyal RSI dan Bollinger Bands muncul secara bersamaan, kami percaya bahwa peluang perdagangan telah terbentuk dan pesanan perdagangan dikeluarkan.

Analisis Keuntungan

  • Penyaringan indikator ganda memberikan keandalan yang lebih tinggi dan menghindari perdagangan yang tidak perlu
  • Menangkap peluang di kedua tahap pasar tren dan pembalikan
  • Parameter yang dapat dikonfigurasi untuk pengaturan yang dapat disesuaikan sesuai kebutuhan
  • Pengelolaan waktu dan uang yang tertanam

Analisis Risiko

  • Pengaturan parameter Bollinger Bands yang tidak benar dapat menyebabkan sinyal palsu
  • Tidak mampu mengatasi volatilitas pasar yang ekstrim
  • Perbedaan RSI dapat menghasilkan sinyal yang salah
  • Optimasi parameter yang diperlukan untuk beradaptasi dengan produk dan siklus yang berbeda

Risiko dapat dihindari dan dikendalikan melalui optimasi parameter, pengurangan posisi yang tepat, intervensi manual, dll.

Arahan Optimasi

  • Sesuaikan parameter RSI untuk mengoptimalkan penilaian overbought/oversold
  • Sesuaikan lebar Bollinger Bands untuk mengoptimalkan strategi breakout
  • Tambahkan mekanisme manajemen posisi
  • Tambahkan strategi stop loss
  • Masukkan lebih banyak indikator untuk membangun model multi-faktor

Kesimpulan

Strategi ganda RSI dan Bollinger Bands sepenuhnya memanfaatkan kekuatan kedua indikator untuk menghasilkan sinyal berkualitas tinggi. Dengan optimasi parameter yang tepat dan manajemen risiko, dapat mencapai pengembalian investasi yang stabil.


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