
Strategi perdagangan Bollinger Bands pilihan ganda adalah strategi perdagangan kuantitatif yang menggabungkan indikator Bollinger Bands, indikator garis rata-rata, indikator RSI, dan karakteristik grafik K-line untuk memfilter beberapa kondisi dan mengirimkan sinyal perdagangan ketika kondisi terpenuhi. Ini adalah strategi pelacakan tren khas untuk mendapatkan keuntungan dengan menangkap pergerakan tren harga di garis tengah dan panjang.
Strategi ini menggunakan tiga indikator utama, yaitu Brin Belt, Average Line, dan RSI. Di antaranya, Brin Belt mid-trail adalah harga n-day Simple Moving Average, up-trail dan down-trail adalah mid-trail + 2x standar deviasi dan mid-trail - 2x standar deviasi. RSI adalah nilai antara 0 ~ 100 yang dihitung berdasarkan kenaikan dan penurunan selama periode tertentu.
Strategi ini menghasilkan sinyal perdagangan berdasarkan tiga kriteria utama:
(1) Brin membawa terobosan ke bawah & entitas garis K membantah. Lakukan lebih banyak ketika harga penutupan berada di bawah dan entitas garis K berwarna berlawanan dengan arah tren saat ini.
(2) Brin band terbalik & entitas garis K terbalik. Bila entitas garis K terbalik di bawah harga penutupan, dan warna entitas garis K berlawanan dengan arah tren saat ini, kosongkan.
(3) Entitas garis K berbalik. Jika arah memegang posisi sesuai dengan warna entitas garis K berbalik, maka posisi kosong.
Selain itu, kebijakan ini juga menyiapkan filter seragam, filter entitas K-line, dan filter RSI untuk mengontrol masuk secara ketat.
Risiko dapat dikurangi dengan mengadaptasi parameter Brin dengan kontrol yang ketat terhadap stop loss.
Strategi ini secara keseluruhan adalah strategi pelacakan tren garis tengah yang khas. Dengan memfilter kondisi ganda, mengendalikan waktu masuk dan keluar dengan ketat, menggunakan metode perdagangan tren, dapat mengurangi perdagangan yang tidak perlu, menangkap tren garis tengah pasar. Strategi ini memiliki ruang yang besar untuk dioptimalkan, dengan penyesuaian parameter, menambahkan lebih banyak alat bantu, dan lain-lain.
/*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()