
Strategi gelombang (Bollinger Bands Strategy) adalah strategi klasik yang menggunakan jalur turun naik Bollinger untuk mengikuti trend dan melangkaui isyarat jual beli. Versi ini menambah mekanisme hentian kerugian untuk mengawal risiko berdasarkan strategi asal.
Strategi ini menilai keadaan jual beli yang berlebihan di pasaran melalui garpu emas di atas dan di bawah jalur Brin, dan trend dijejaki dengan mengesan jalur Brin. Kawasan antara jalur Brin atas dan bawah mencerminkan jangkauan pergerakan pasaran semasa.
Brin Belt adalah penunjuk teknikal yang mencerminkan kadar turun naik dan kelembapan pasaran. Apabila harga baru sahaja menyentuh Brin Belt, ia menunjukkan bahawa pasaran berada dalam keadaan oversold, dan pada masa itu terdapat kemungkinan besar untuk mengisi kekosongan yang muncul, dan anda harus mempertimbangkan untuk membuat kedudukan berganda berdasarkan ciri-ciri regresi. Apabila harga baru sahaja menyentuh Brin Belt, ia menunjukkan bahawa pasaran mungkin berada dalam keadaan overbought, dan pada masa itu harga mungkin berlaku.
Strategi ini digabungkan dengan isyarat overbought dan oversold yang dihasilkan oleh Brin Belt untuk mewujudkan kedudukan trend-follow dan menambah mekanisme stop-loss untuk mengawal risiko.
Apabila harga naik melintasi Bollinger Bands ke bawah, ia menunjukkan bahawa pasaran memasuki kawasan yang wajar dari kawasan oversell. Dalam kes ini, kedudukan bertopeng boleh ditubuhkan. Apabila harga turun melintasi Bollinger Bands ke bawah, ia menunjukkan bahawa pasaran memasuki kawasan yang terlalu banyak, dan dalam kes ini, kedudukan kosong boleh ditubuhkan.
Selepas membina kedudukan, tetapkan titik stop loss peratusan untuk mengawal risiko. Apabila kerugian melebihi margin stop loss yang ditetapkan, stop loss keluar dari kedudukan semasa, untuk mengelakkan kerugian yang terlalu besar.
Strategi ini digabungkan dengan Bollinger Bands untuk menilai kawasan overbought dan oversold, dengan menilai harga yang bercampur dengan rantaian atas dan bawah untuk mencapai harga rendah dan tinggi.
Menggunakan ciri-ciri turun naik Brin untuk mengikuti trend perdagangan
Menambah mekanisme penangguhan kerugian untuk mengawal kerugian maksimum dalam satu dagangan
Menggabungkan trend tracking dan stop loss untuk mendapatkan keuntungan yang stabil
Tetapan parameter Brinband mempengaruhi kualiti isyarat perdagangan. Panjang lintasan n dan perkalian standard k perlu disesuaikan dengan pasaran yang berbeza, jika tidak, ia akan mempengaruhi ketepatan isyarat perdagangan.
Tetapan henti terlalu besar atau terlalu kecil akan menjejaskan kestabilan keuntungan. Tetapan henti terlalu besar akan meningkatkan risiko kerugian tunggal. Tetapan henti terlalu kecil akan meningkatkan kebarangkalian henti akan dicetuskan.
Penapisan isyarat dalam kombinasi dengan petunjuk lain boleh dipertimbangkan untuk meningkatkan ketepatan isyarat perdagangan.
Anda boleh menguji pelbagai tetapan jangka masa pegangan, seperti berpasangan dengan skala jam atau jangka masa yang lebih pendek untuk melakukan perdagangan lebih kerap dan meningkatkan kecekapan penggunaan dana.
Strategi ini adalah strategi trend-following yang biasa digunakan untuk membina kedudukan di kawasan overbought dan oversold di bawah Brin, dan meningkatkan stop loss untuk mengawal risiko. Dengan menetapkan parameter yang dioptimumkan, anda boleh memperoleh keuntungan yang stabil dengan menggunakan isyarat perdagangan yang lebih tepat dan tahap stop loss.
/*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)