Strategi Bollinger Bands adalah strategi klasik yang menggunakan Bollinger Bands untuk mengesan trend dan isyarat overbought / oversold.
Strategi ini menilai keadaan overbought / oversold melalui persilangan emas / mati Bollinger Bands atas / bawah untuk menubuhkan kedudukan. Kawasan di antara band mencerminkan julat turun naik pasaran semasa. Band terdiri daripada pertengahan, atas dan bawah band, di mana band tengah adalah purata mudah bergerak N-hari dan band atas / bawah adalah band tengah +/- deviasi standard K.
Bollinger Bands mencerminkan turun naik pasaran dan julat turun naik. menyentuh band bawah bermakna status quo oversold - jurang mempunyai kebarangkalian yang lebih tinggi untuk diisi. Oleh itu, kedudukan panjang harus dipertimbangkan berdasarkan prinsip pembalikan purata. Begitu juga, menyentuh band atas mewakili keadaan overbought yang berpotensi dan pembalikan harga yang mungkin, jadi kedudukan pendek boleh ditubuhkan untuk mendapat keuntungan dari pergerakan ke bawah.
Strategi ini menggabungkan isyarat overbought / oversold dari Bollinger Bands untuk entri penjejakan trend.
Apabila harga melintasi di atas band bawah, pasaran keluar dari kawasan oversold ke dalam julat yang munasabah. Posisi panjang boleh dibuka. Apabila harga melintasi di bawah band atas, pasaran menjadi overbought.
Selepas pesanan dipenuhi, paras stop loss peratusan tetap ditetapkan untuk menguruskan risiko. Apabila kerugian melebihi peratusan stop loss, kedudukan semasa dihentikan untuk mengehadkan kerugian lanjut.
Mengenali tahap overbought/oversold dengan Bollinger Bands untuk setup pembelian rendah-penjualan tinggi yang dinilai oleh crossover band.
Mencatatkan trend melalui sifat turun naik Bollinger Bands.
Mekanisme Stop Loss secara berkesan mengehadkan kerugian maksimum setiap perdagangan.
Menggabungkan trend tracking dan stop loss membawa kepada keuntungan yang stabil.
Tetapan parameter memberi kesan kepada kualiti isyarat. Panjang jalur tengah N dan pengganda penyimpangan standard K harus ditetapkan secara rasional untuk pasaran yang berbeza, atau ketepatan akan mengalami masalah.
Stop loss yang terlalu besar atau terlalu kecil menjejaskan kestabilan pulangan. Peratusan yang terlalu besar berisiko kerugian yang lebih besar setiap perdagangan, sementara risiko peratusan yang terlalu kecil mencetuskan stop loss yang lebih awal. Peratusan yang munasabah harus ditetapkan berdasarkan produk yang berbeza.
Penapis tambahan dengan penunjuk lain boleh meningkatkan ketepatan isyarat.
Tetapan tempoh pegangan yang berbeza boleh diuji, seperti menggabungkan rentang tempoh sejam atau lebih pendek untuk peningkatan perdagangan frekuensi yang lebih tinggi dan peningkatan kecekapan penggunaan modal.
Strategi ini menggunakan Bollinger Bands untuk isyarat overbought / oversold dan menggabungkan stop loss untuk kawalan risiko. Ia adalah strategi penjejakan trend yang biasa. Melalui pengoptimuman parameter, mengintegrasikan isyarat yang lebih tepat dan tahap 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)