Strategi ini membina Bollinger Bands dengan pelbagai jenis purata bergerak sebagai input untuk menemui lebih banyak peluang perdagangan.
Inti strategi ini terletak pada menggunakan jenis purata bergerak yang dipilih oleh input pengguna, termasuk SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL dan lain-lain, 12 secara keseluruhan, digabungkan dengan Bollinger Bands untuk membentuk isyarat dagangan. Band tengah Bollinger Bands mengadopsi purata bergerak yang dipilih, sementara band atas dan bawah adalah satu penyimpangan standard positif / negatif dari band tengah. Pendek apabila harga memecahkan band atas, panjang apabila harga memecahkan band bawah. Dengan menggabungkan pelbagai jenis purata bergerak, parameter dapat dioptimumkan untuk isyarat dagangan yang lebih stabil dan tepat.
Komponen utama kod adalah:
Kelebihan terbesar strategi ini adalah menyediakan pelbagai jenis purata bergerak. persekitaran pasaran yang berbeza sesuai dengan purata bergerak yang berbeza dari segi kepekaan tindak balas. Mengadopsi pelbagai jenis purata bergerak sangat meningkatkan kebolehsesuaian strategi. Di samping itu, strategi ini membolehkan pengoptimuman parameter untuk panjang purata bergerak, untuk mencari kombinasi yang optimum dan dengan itu mendapatkan isyarat perdagangan yang lebih tepat.
Risiko utama strategi ini terletak pada isyarat huru-hara dari purata bergerak itu sendiri, dengan kemungkinan pelbagai pecah palsu. Juga, penunjuk Bollinger Bands agak sensitif terhadap turun naik harga liar, yang menjadikannya sukar bagi jalur tengah untuk mengesan harga dengan berkesan. Ini memerlukan jenis purata bergerak yang lebih stabil untuk digunakan, bersama-sama dengan penyesuaian parameter yang betul.
Strategi ini boleh dioptimumkan dari aspek berikut:
Strategi ini agak inovatif secara keseluruhan, memperkaya penunjuk Bollinger Bands dengan aplikasi yang lebih canggih. Dengan menyesuaikan purata bergerak gabungan, isyarat yang lebih tepat dan stabil boleh diperoleh. Ia juga membuka idea baru untuk mengoptimumkan strategi Bollinger Bands. Dengan penyesuaian parameter dan pengoptimuman, strategi ini boleh menjadi alat perdagangan yang sangat praktikal.
/*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)