Chiến lược này xây dựng Bollinger Bands với các loại trung bình động khác nhau như là đầu vào để khám phá thêm các cơ hội giao dịch. Nó cung cấp 12 loại trung bình động để lựa chọn, cho phép kết hợp linh hoạt cho các thông số tối ưu.
Cốt lõi của chiến lược này nằm trong việc sử dụng các loại trung bình động được chọn theo đầu vào của người dùng, bao gồm SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL vv, tổng cộng 12, kết hợp với Bollinger Bands để tạo ra tín hiệu giao dịch. Dải giữa của Bollinger Bands áp dụng trung bình động được chọn, trong khi các dải trên và dưới là một sai lệch chuẩn dương / âm từ dải giữa. ngắn khi giá phá vỡ dải trên, dài khi giá phá vỡ dải dưới. Bằng cách kết hợp các loại trung bình động khác nhau, các thông số có thể được tối ưu hóa cho các tín hiệu giao dịch ổn định và chính xác hơn.
Các thành phần chính của mã là:
Lợi thế lớn nhất của chiến lược này là cung cấp nhiều loại đường trung bình động. Môi trường thị trường khác nhau phù hợp với các đường trung bình động khác nhau về độ nhạy phản ứng. Việc áp dụng nhiều loại đường trung bình động làm tăng đáng kể khả năng thích nghi của chiến lược. Ngoài ra, chiến lược này cho phép tối ưu hóa tham số cho chiều dài của đường trung bình động, để tìm kết hợp tối ưu và do đó có được các tín hiệu giao dịch chính xác hơn.
Rủi ro chính của chiến lược này nằm ở các tín hiệu hỗn loạn từ chính các đường trung bình động, với khả năng đột phá sai nhiều lần. Ngoài ra, chỉ số Bollinger Bands khá nhạy cảm với biến động giá hoang dã, khiến cho băng trung gian khó theo dõi giá hiệu quả. Điều này đòi hỏi phải sử dụng các loại đường trung bình động ổn định hơn, cùng với điều chỉnh tham số thích hợp.
Chiến lược có thể được tối ưu hóa từ các khía cạnh sau:
Chiến lược này là khá sáng tạo nói chung, làm phong phú cho chỉ số Bollinger Bands với các ứng dụng phức tạp hơn. Bằng cách điều chỉnh các đường trung bình động kết hợp, có thể có được các tín hiệu chính xác và ổn định hơn. Nó cũng mở ra những ý tưởng mới để tối ưu hóa các chiến lược Bollinger Bands. Với điều chỉnh tham số và tối ưu hóa, chiến lược này có thể trở thành một công cụ giao dịch rất thực tế.
/*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)