다중 이동 평균 볼린저 밴드 전략


생성 날짜: 2024-02-06 15:08:26 마지막으로 수정됨: 2024-02-06 15:08:26
복사: 4 클릭수: 632
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

다중 이동 평균 볼린저 밴드 전략

개요

이 전략은 다양한 유형의 이동 평균을 입력하여 브린 띠를 구성하여 더 많은 거래 기회를 탐색합니다. 12 가지의 이동 평균 유형을 제공하여 최적의 변수를 얻기 위해 유연하게 조합 할 수 있습니다.

전략 원칙

이 전략의 핵심은 사용자가 입력한 이동 평균 유형을 활용하는 것입니다. SMA, EMA, WMA, DEMA, TMA, VAR, WWMA, ZLEMA, TSF, HULL, TILL 등 12가지가 있으며, 브린 벨트 지표와 결합하여 거래 신호를 형성합니다. 브린 벨트의 중도 라인은 선택의 이동 평균을 채택하고, 상하도로는 각각 중도선의 마이너스 1 표준 차이를 나타냅니다. 가격이 상도선을 돌파 할 때, 공백을 수행하고, 가격이 하도선을 돌파 할 때, 더 많이 수행합니다.

코드는 다음과 같은 부분으로 구성되어 있습니다.

  1. SMA, EMA, WMA 등 12가지의 이동 평균 유형을 정의하는 계산 함수
  2. getMA 함수는, mav 입력 변수에 따라 해당하는 이동 평균을 반환한다.
  3. 브린 띠의 중궤도선, 상궤도선, 하궤도선을 계산한다. 중궤도선은 getMA 함수를 사용하여 얻은 이동 평균이다.
  4. 브린 띠를 그리기
  5. 성장 신호와 빈 신호. 가격이 상회할 때 빈 머리, 하회할 때 다수 머리.

우위 분석

이 전략의 가장 큰 장점은 여러 가지 이동 평균 유형이 제공된다는 것입니다. 이동 평균은 다른 시장 환경에서 빠르게 반응합니다. 여러 종류의 이동 평균을 사용하면 전략의 적응력을 크게 향상시킬 수 있습니다. 또한, 이 전략은 이동 평균 길이 변수를 최적화하여 최적의 조합을 찾아서 더 정확한 거래를 얻을 수 있습니다.

위험 분석

이 전략의 주요 위험은 이동 평균 자체의 신호 혼란이며, 여러 번의 가짜 돌파가 발생할 수 있습니다. 또한, 브린 밴드 지표는 급격한 가격 변화에 민감하며, 중궤도선은 가격을 효과적으로 추적 할 수 없습니다. 이것은 안정성이 강한 이동 평균 유형을 채택하고, 적절한 파라미터를 조정해야합니다.

최적화 방향

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 다양한 이동 평균 조합을 테스트하여 최적의 파라미터를 찾고, 신호 안정성을 향상시킵니다.
  2. 개별적인 잘못된 신호로 인한 손실을 통제하기 위해 손실을 막는 전략을 추가하십시오.
  3. MACD, KD 등과 같은 다른 지표의 필터링 신호와 결합하여 자주 거래하는 것을 피하십시오.
  4. 자금 관리를 최적화하고, 지위를 조정한다.

요약하다

이 전략은 전체적으로 매우 혁신적이며, 부린밴드 지표에 더 풍부한 세분화 응용을 제공합니다. 포트폴리오 이동 평균을 조정하여 더 정확하고 안정적인 신호를 얻을 수 있습니다. 또한 부린밴드 전략을 최적화하는 새로운 아이디어를 제공합니다. 매개 변수를 조정하고 최적화하면 이 전략은 매우 실용적인 거래 도구가 될 수 있습니다.

전략 소스 코드
/*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)