Strategi ini membangun Bollinger Bands dengan berbagai jenis moving average sebagai input untuk menemukan lebih banyak peluang trading.
Inti dari strategi ini terletak pada penggunaan jenis rata-rata bergerak yang dipilih oleh input pengguna, termasuk SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL dll, total 12, dikombinasikan dengan Bollinger Bands untuk membentuk sinyal perdagangan. Band tengah Bollinger Bands mengadopsi rata-rata bergerak yang dipilih, sementara band atas dan bawah adalah satu deviasi standar positif / negatif dari band tengah. Pendek ketika harga melanggar band atas, panjang ketika harga melanggar band bawah. Dengan menggabungkan berbagai jenis rata-rata bergerak, parameter dapat dioptimalkan untuk sinyal perdagangan yang lebih stabil dan akurat.
Komponen utama kode adalah:
Keuntungan terbesar dari strategi ini adalah menyediakan beberapa jenis rata-rata bergerak. Lingkungan pasar yang berbeda sesuai dengan rata-rata bergerak yang berbeda dalam hal sensitivitas reaksi. Mengadopsi beberapa jenis rata-rata bergerak sangat meningkatkan kemampuan beradaptasi strategi. Selain itu, strategi ini memungkinkan optimasi parameter untuk panjang rata-rata bergerak, untuk menemukan kombinasi yang optimal dan dengan demikian mendapatkan sinyal perdagangan yang lebih akurat.
Risiko utama dari strategi ini terletak pada sinyal kacau dari rata-rata bergerak sendiri, dengan kemungkinan beberapa false breakout. Juga, indikator Bollinger Bands cukup sensitif terhadap perubahan harga liar, sehingga sulit bagi band tengah untuk melacak harga secara efektif. Ini membutuhkan jenis rata-rata bergerak yang lebih stabil untuk digunakan, bersama dengan penyesuaian parameter yang tepat.
Strategi dapat dioptimalkan dari aspek berikut:
Strategi ini cukup inovatif secara keseluruhan, memperkaya indikator Bollinger Bands dengan aplikasi yang lebih canggih. Dengan menyesuaikan rata-rata bergerak yang dikombinasikan, sinyal yang lebih akurat dan stabil dapat diperoleh. Ini juga membuka ide-ide baru untuk mengoptimalkan strategi Bollinger Bands.
/*backtest start: 2023-01-30 00:00:00 end: 2023-10-13 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("Bollinger Bands Strategy (MA type)", overlay=true) src = input(close, title="Source") length = input(20,step=10, minval=1) mult = input(1,type=input.float, minval=0.001, maxval=50, title="StdDev") length1=input(26, "Long Moving Average Length", minval=1) length2=input(9, "Trigger Length", minval=1) T3a1 = input(0.7, "TILLSON T3 Volume Factor", step=0.1) //////////// mav = input(title="Moving Average Type", defval="VAR", options=["SMA", "EMA", "WMA", "DEMA", "TMA", "VAR", "WWMA", "ZLEMA", "TSF", "HULL", "TILL"]) Var_Func(src,length)=> valpha=2/(length+1) vud1=src>src[1] ? src-src[1] : 0 vdd1=src<src[1] ? src[1]-src : 0 vUD=sum(vud1,9) vDD=sum(vdd1,9) vCMO=nz((vUD-vDD)/(vUD+vDD)) VAR=0.0 VAR:=nz(valpha*abs(vCMO)*src)+(1-valpha*abs(vCMO))*nz(VAR[1]) VAR=Var_Func(src,length) DEMA = ( 2 * ema(src,length)) - (ema(ema(src,length),length) ) Wwma_Func(src,length)=> wwalpha = 1/ length WWMA = 0.0 WWMA := wwalpha*src + (1-wwalpha)*nz(WWMA[1]) WWMA=Wwma_Func(src,length) Zlema_Func(src,length)=> zxLag = length/2==round(length/2) ? length/2 : (length - 1) / 2 zxEMAData = (src + (src - src[zxLag])) ZLEMA = ema(zxEMAData, length) ZLEMA=Zlema_Func(src,length) Tsf_Func(src,length)=> lrc = linreg(src, length, 0) lrc1 = linreg(src,length,1) lrs = (lrc-lrc1) TSF = linreg(src, length, 0)+lrs TSF=Tsf_Func(src,length) HMA = wma(2 * wma(src, length / 2) - wma(src, length), round(sqrt(length))) T3e1=ema(src, length) T3e2=ema(T3e1,length) T3e3=ema(T3e2,length) T3e4=ema(T3e3,length) T3e5=ema(T3e4,length) T3e6=ema(T3e5,length) T3c1=-T3a1*T3a1*T3a1 T3c2=3*T3a1*T3a1+3*T3a1*T3a1*T3a1 T3c3=-6*T3a1*T3a1-3*T3a1-3*T3a1*T3a1*T3a1 T3c4=1+3*T3a1+T3a1*T3a1*T3a1+3*T3a1*T3a1 T3=T3c1*T3e6+T3c2*T3e5+T3c3*T3e4+T3c4*T3e3 getMA(src, length) => ma = 0.0 if mav == "SMA" ma := sma(src, length) ma if mav == "EMA" ma := ema(src, length) ma if mav == "WMA" ma := wma(src, length) ma if mav == "DEMA" ma := DEMA ma if mav == "TMA" ma := sma(sma(src, ceil(length / 2)), floor(length / 2) + 1) ma if mav == "VAR" ma := VAR ma if mav == "WWMA" ma := WWMA ma if mav == "ZLEMA" ma := ZLEMA ma if mav == "TSF" ma := TSF ma if mav == "HULL" ma := HMA ma if mav == "TILL" ma := T3 ma ma ////////// basis = getMA(src, length) dev = mult * stdev(src, length) upper = basis + dev lower = basis - dev offset = input(0, "Offset",minval = -500, maxval = 500) plot(basis, "Basis",color=#FF6D00, offset = offset) p1 = plot(upper, "Upper", color=#2962FF, offset = offset) p2 = plot(lower, "Lower", color=#2962FF, offset = offset) fill(p1, p2, title = "Background", color=color.rgb(33, 150, 243, 95)) ///////// buyEntry = crossover(src, lower) sellEntry = crossunder(src, upper) if (crossover(src, lower)) strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands", comment="BBandLE") else strategy.cancel(id="BBandLE") if (crossunder(src, upper)) strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands", comment="BBandSE") else strategy.cancel(id="BBandSE") //plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_areabr)