
이 전략은 다양한 유형의 이동 평균을 입력하여 브린 띠를 구성하여 더 많은 거래 기회를 탐색합니다. 12 가지의 이동 평균 유형을 제공하여 최적의 변수를 얻기 위해 유연하게 조합 할 수 있습니다.
이 전략의 핵심은 사용자가 입력한 이동 평균 유형을 활용하는 것입니다. SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL 등 12가지가 있으며, 브린 벨트 지표와 결합하여 거래 신호를 형성합니다. 브린 벨트의 중도 라인은 선택의 이동 평균을 채택하고, 상하도로는 각각 중도선의 마이너스 1 표준 차이를 나타냅니다. 가격이 상도선을 돌파 할 때, 공백을 수행하고, 가격이 하도선을 돌파 할 때, 더 많이 수행합니다.
코드는 다음과 같은 부분으로 구성되어 있습니다.
이 전략의 가장 큰 장점은 여러 가지 이동 평균 유형이 제공된다는 것입니다. 이동 평균은 다른 시장 환경에서 빠르게 반응합니다. 여러 종류의 이동 평균을 사용하면 전략의 적응력을 크게 향상시킬 수 있습니다. 또한, 이 전략은 이동 평균 길이 변수를 최적화하여 최적의 조합을 찾아서 더 정확한 거래를 얻을 수 있습니다.
이 전략의 주요 위험은 이동 평균 자체의 신호 혼란이며, 여러 번의 가짜 돌파가 발생할 수 있습니다. 또한, 브린 밴드 지표는 급격한 가격 변화에 민감하며, 중궤도선은 가격을 효과적으로 추적 할 수 없습니다. 이것은 안정성이 강한 이동 평균 유형을 채택하고, 적절한 파라미터를 조정해야합니다.
이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.
이 전략은 전체적으로 매우 혁신적이며, 부린밴드 지표에 더 풍부한 세분화 응용을 제공합니다. 포트폴리오 이동 평균을 조정하여 더 정확하고 안정적인 신호를 얻을 수 있습니다. 또한 부린밴드 전략을 최적화하는 새로운 아이디어를 제공합니다. 매개 변수를 조정하고 최적화하면 이 전략은 매우 실용적인 거래 도구가 될 수 있습니다.
/*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)