Strategi Stop Loss Bollinger Bands

Penulis:ChaoZhang, Tarikh: 2023-11-23 15:49:12
Tag:

img

Ringkasan

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.

Prinsip-prinsip

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.

Kelebihan

  1. Mengenali tahap overbought/oversold dengan Bollinger Bands untuk setup pembelian rendah-penjualan tinggi yang dinilai oleh crossover band.

  2. Mencatatkan trend melalui sifat turun naik Bollinger Bands.

  3. Mekanisme Stop Loss secara berkesan mengehadkan kerugian maksimum setiap perdagangan.

  4. Menggabungkan trend tracking dan stop loss membawa kepada keuntungan yang stabil.

Risiko dan Pengoptimuman

  1. 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.

  2. 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.

  3. Penapis tambahan dengan penunjuk lain boleh meningkatkan ketepatan isyarat.

  4. 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.

Kesimpulan

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)




Lebih lanjut