Bollinger Bands Stop Loss Strategi

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

img

Gambaran umum

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.

Prinsip-prinsip

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.

Keuntungan

  1. Mengidentifikasi tingkat overbought/oversold dengan Bollinger Bands untuk low buy-high sell setup berdasarkan crossover band.

  2. Menangkap tren melalui properti volatilitas Bollinger Bands.

  3. Mekanisme stop loss secara efektif membatasi kerugian maksimum per perdagangan.

  4. Menggabungkan trend tracking dan stop loss mengarah pada keuntungan yang stabil.

Risiko dan Optimalisasi

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

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

  3. Filter tambahan dengan indikator lain dapat meningkatkan akurasi sinyal.

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

Kesimpulan

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)




Lebih banyak