Strategi Bollinger Bands adalah strategi klasik yang menggunakan Bollinger Bands untuk melacak tren dan sinyal overbought/oversold.
Strategi ini menilai kondisi overbought/oversold melalui golden/dead crossover dari Bollinger Bands atas/bawah untuk menetapkan posisi. Area di antara band mencerminkan rentang volatilitas pasar saat ini. Band terdiri dari band tengah, atas dan bawah, di mana band tengah adalah rata-rata bergerak sederhana N hari dan band atas/bawah adalah band tengah +/- deviasi standar K.
Bollinger Bands mencerminkan volatilitas pasar dan kisaran osilasi. Mendekati band bawah berarti status quo oversold - kesenjangan memiliki probabilitas yang lebih tinggi untuk diisi. Oleh karena itu posisi panjang harus dipertimbangkan berdasarkan prinsip pembalikan rata-rata. Demikian pula, menyentuh band atas mewakili kondisi overbought potensial dan kemungkinan pembalikan harga, sehingga posisi pendek dapat didirikan untuk mendapatkan keuntungan dari pergerakan ke bawah.
Strategi ini menggabungkan sinyal overbought / oversold dari Bollinger Bands untuk entri pelacakan tren.
Ketika harga melintasi band bawah, pasar keluar dari area oversold ke kisaran yang wajar. Posisi panjang dapat dibuka. Ketika harga melintasi band atas, pasar menjadi overbought. Short kemudian dapat dibuka.
Setelah pesanan dipenuhi, tingkat stop loss persentase tetap ditetapkan untuk mengelola risiko.
Mengidentifikasi tingkat overbought/oversold dengan Bollinger Bands untuk low buy-high sell setup berdasarkan crossover band.
Menangkap tren melalui properti volatilitas Bollinger Bands.
Mekanisme stop loss secara efektif membatasi kerugian maksimum per perdagangan.
Menggabungkan trend tracking dan stop loss mengarah pada keuntungan yang stabil.
Pengaturan parameter mempengaruhi kualitas sinyal. Panjang pita tengah N dan pengganda standar deviasi K harus diatur secara rasional untuk pasar yang berbeda, atau akurasi akan terganggu.
Stop loss yang terlalu besar atau terlalu kecil merugikan stabilitas pengembalian. Persentase yang terlalu besar berisiko kerugian yang lebih besar per perdagangan, sementara risiko persentase yang terlalu kecil memicu stop loss prematur. Persentase yang wajar harus ditetapkan berdasarkan produk yang berbeda.
Filter tambahan dengan indikator lain dapat meningkatkan akurasi sinyal.
Pengaturan periode penyimpanan yang berbeda dapat diuji, seperti menggabungkan band periode per jam atau yang lebih pendek untuk peningkatan frekuensi perdagangan dan efisiensi penggunaan modal.
Strategi ini memanfaatkan Bollinger Bands untuk sinyal overbought / oversold dan menggabungkan stop loss untuk pengendalian risiko. Ini adalah strategi pelacakan tren yang umum. Melalui pengoptimalan parameter, mengintegrasikan sinyal yang lebih akurat dan tingkat stop loss, keuntungan yang stabil dapat dicapai.
/*backtest start: 2023-11-15 00:00:00 end: 2023-11-22 00:00:00 period: 5m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=5 strategy(title="Bollinger Bands Strategy", overlay=false, shorttitle="BBS", pyramiding=0, currency=currency.USD, commission_type=strategy.commission.percent, commission_value=0.03, initial_capital=1000) source = input(close, "Source") length = input.int(20, minval=1) mult = input.float(2.0, minval=0.001, maxval=50, step=0.001) stopLossFactor = input.float(1, "Stop Loss Percent", maxval = 100, minval = 0, step=0.1) basis = ta.sma(source, length) dev = mult * ta.stdev(source, length) upper = basis + dev lower = basis - dev var float lastTradePrice = na var float stopLossLow = na var float stopLossHigh = na var bool currentIsLong = na var bool nextExpectedIsLong = true var bool existedLong = false var bool existedShort = false buyEntry = ta.crossover(source, lower) sellEntry = ta.crossunder(source, upper) if (buyEntry and nextExpectedIsLong == true) strategy.entry("BBandLE", strategy.long, comment="BBandLE") nextExpectedIsLong := false if(nz(strategy.position_size[1], 0) < 0) // new position detected lastTradePrice := close stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) else strategy.cancel("BBandLE") if (sellEntry and nextExpectedIsLong == false) strategy.entry("BBandSE", strategy.short, comment="BBandSE") nextExpectedIsLong := true if(nz(strategy.position_size[1], 0) > 0) // new position detected lastTradePrice := close stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) else strategy.cancel("BBandSE") strategy.close("BBandLE", close < stopLossLow) strategy.close("BBandSE", close > stopLossHigh) // if(nz(strategy.position_size[1], 0) < 0 and close > stopLossHigh) // strategy.entry("BBandLE", strategy.long, comment="BBandLE") // lastTradePrice := close // stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) // stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) // if(nz(strategy.position_size[1], 0) > 0 and close < stopLossLow) // strategy.exit("BBandSE", strategy.short, comment="BBandSE") // lastTradePrice := close // stopLossLow := lastTradePrice * (1 - (stopLossFactor / 100)) // stopLossHigh := lastTradePrice * (1 + (stopLossFactor / 100)) plot(source, "close", color.blue) plot(lower, "lower", color.red) plot(upper, "upper", color.red) plot(stopLossLow, "StopLossLow", color.black) plot(stopLossHigh, "StopLossHigh", color.black) plot(lastTradePrice, "lastTradePrice", color.green) plotchar(strategy.position_size > 0, char="-", size=size.tiny, location=location.bottom, color=color.green) plotchar(strategy.position_size < 0, char="-", size=size.tiny, location=location.bottom, color=color.red)