이 전략은 더 많은 거래 기회를 발견하기 위해 다양한 유형의 이동 평균을 입력으로 볼링거 밴드를 구성합니다. 최적 매개 변수를위한 유연한 조합을 허용하여 선택할 수있는 12 가지 유형의 이동 평균을 제공합니다.
이 전략의 핵심은 사용자 입력에 의해 선택 된 이동 평균 유형을 사용하여, SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL 등 총 12개, 볼링거 밴드와 결합하여 거래 신호를 형성하는 데 있습니다. 볼링거 밴드의 중간 밴드는 선택 된 이동 평균을 채택하고, 상부 및 하부 밴드는 중부 밴드에서 긍정적 / 부정적 표준 편차입니다. 가격이 상부 밴드를 깨면 짧고 가격이 하부 밴드를 깨면 길습니다. 다른 유형의 이동 평균을 결합함으로써 매개 변수를 최적화하여 더 안정적이고 정확한 거래 신호를 얻을 수 있습니다.
코드의 주요 구성 요소는 다음과 같습니다.
이 전략의 가장 큰 장점은 여러 유형의 이동 평균을 제공하는 것입니다. 다른 시장 환경은 반응 민감성 측면에서 다른 이동 평균에 적합합니다. 여러 이동 평균 유형을 채택하면 전략의 적응력이 크게 향상됩니다. 또한이 전략은 최적의 조합을 찾고 더 정확한 거래 신호를 얻기 위해 이동 평균의 길이를위한 매개 변수 최적화를 허용합니다.
이 전략의 주요 위험은 이동 평균 자체로부터의 혼란스러운 신호에 있으며, 여러 가지 잘못된 브레이크오웃의 가능성이 있습니다. 또한 볼링거 밴드 지표는 야생 가격 변동에 매우 민감하므로 중간 밴드가 가격을 효과적으로 추적하기가 어렵습니다. 이것은 적절한 매개 변수 조정과 함께 더 안정적인 유형의 이동 평균을 사용해야합니다.
전략은 다음 측면에서 최적화 될 수 있습니다:
이 전략은 전반적으로 상당히 혁신적이며, 더 정교한 응용 프로그램으로 볼링거 밴드 지표를 풍부하게합니다. 결합 이동 평균을 조정함으로써 더 정확하고 안정적인 신호를 얻을 수 있습니다. 또한 볼링거 밴드 전략을 최적화하는 새로운 아이디어를 제공합니다. 매개 변수 조정 및 최적화로,이 전략은 매우 실용적인 거래 도구가 될 수 있습니다.
/*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)