Strategi Perdagangan Bollinger Band Multi-Filter adalah strategi perdagangan kuantitatif yang menggabungkan penunjuk Bollinger Band, penunjuk purata bergerak, penunjuk RSI dan ciri grafik K-line untuk penyaringan pelbagai syarat untuk menjana isyarat perdagangan apabila syarat dipenuhi.
Strategi ini terutamanya menggunakan tiga penunjuk: Bollinger Band, purata bergerak dan RSI. Di antara mereka, rel tengah Bollinger Band adalah purata bergerak mudah harga n hari, dan rel atas dan bawah adalah rel tengah +2 penyimpangan standard dan rel tengah -2 penyimpangan standard masing-masing.
Strategi menghasilkan isyarat perdagangan melalui tiga syarat utama berikut:
(1) Penembusan Bollinger band bawah & kontradiksi badan K-line. Apabila harga penutupan memecahkan band bawah ke atas dan warna badan K-line bertentangan dengan arah trend semasa, pergi panjang.
(2) Penembusan Bollinger band atas & kontradiksi badan K-line. Apabila harga penutupan menembusi band atas ke bawah dan warna badan K-line bertentangan dengan arah trend semasa, pergi pendek.
(3) Kembalikan badan K-garis. Jika arah kedudukan adalah konsisten dengan pembalikan warna badan K-garis, tutup kedudukan.
Di samping itu, strategi ini juga menetapkan penapis purata bergerak, penapis badan K-garis, penapis RSI dan keadaan tambahan lain untuk mengawal kemasukan dengan ketat.
Risiko boleh dikurangkan dengan menyesuaikan parameter Bollinger dan mengawal berhenti dengan ketat.
Secara keseluruhan, strategi ini adalah strategi trend berikut jangka menengah hingga panjang yang biasa. Dengan menyaring pelbagai syarat dan mengawal tepat masa masuk dan keluar dengan pendekatan perdagangan trend, ia dapat mengurangkan perdagangan yang tidak perlu dan menangkap trend pasaran jangka menengah hingga panjang. Masih ada ruang yang besar untuk mengoptimumkan strategi ini dengan menyesuaikan parameter, menambah lebih banyak alat tambahan dan sebagainya, untuk meningkatkan lagi kestabilan dan keuntungan strategi.
/*backtest start: 2023-12-17 00:00:00 end: 2024-01-16 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy("Noro's Bollinger Strategy v1.4", shorttitle = "Bollinger str 1.4", overlay = true ) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(false, defval = false, title = "Short") length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length") mult = input(1, defval = 1, minval = 0.001, maxval = 50, title = "Bollinger Mult") source = input(ohlc4, defval = ohlc4, title = "Bollinger Source") usebf = input(true, defval = true, title = "Use body-filter") usecf = input(true, defval = true, title = "Use color-filter") userf = input(true, defval = true, title = "Use RSI-filter") 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") showbands = input(true, defval = true, title = "Show Bollinger Bands") //Bollinger Bands basis = sma(source, length) dev = mult * stdev(source, length) upper = basis + dev lower = basis - dev //Lines col = showbands ? black : na plot(upper, linewidth = 1, color = col) plot(basis, linewidth = 1, color = col) plot(lower, linewidth = 1, color = col) //Body filter nbody = abs(close - open) abody = sma(nbody, 10) body = nbody > abody / 2 or usebf == false //Color filter bar = close > open ? 1 : close < open ? -1 : 0 gb = bar == 1 or usecf == false rb = bar == -1 or usecf == false //RSI Filter fastup = rma(max(change(close), 0), 7) fastdown = rma(-min(change(close), 0), 7) rsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown)) ursi = rsi > 70 or userf == false drsi = rsi < 30 or userf == false //Signals up = close <= lower and rb and body and drsi and (close < strategy.position_avg_price or strategy.position_size == 0) dn = close >= upper and gb and body and ursi and (close > strategy.position_avg_price or strategy.position_size == 0) exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body //Trading if up strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn strategy.entry("Short", strategy.short, needshort == false ? 0 : na) if exit strategy.close_all()