이동 평균 리본 전략

저자:차오장, 날짜: 2023-12-18 12:29:19
태그:

img

전반적인 설명

이동 평균 리본 전략은 여러 이동 평균에 기반한 트렌드 다음 전략이다. 빠르고 느린 이동 평균을 동시에 모니터링하고 가격이 이동 평균 리본을 넘어서면 거래 신호를 생성합니다. 전략은 트렌드 결정과 과소 구매 / 과소 판매 지표를 결합하여 중장기 트렌드를 효과적으로 파악 할 수 있습니다.

전략 논리

이 전략은 5개의 빠른 이동 평균 (5일, 8일, 13일, 20일, 30일 라인) 과 4개의 느린 이동 평균 (45일, 70일, 105일, 150일 라인) 을 사용한다. 빠른 라인은 내부 이동 평균 리본을 형성하고 느린 라인은 외부 이동 평균 리본을 형성한다. 가격이 내부 리본을 넘어서면 구매 신호가 생성되고, 가격이 내부 리본을 넘어서면 판매 신호가 생성된다. 잘못된 브레이크를 필터링하기 위해서는 가격이 3개의 연속 촛불을 통해 내부 리본을 넘어서야 하며, 대부분의 빠른 이동 평균도 거래 신호를 생성하기 전에 동기적으로 통과한다.

이 전략은 또한 장기적인 경향을 평가한다. 가격들이 200일 이동 평균보다 높을 때만 구매 신호를 생성하는 것을 고려한다. 반대로, 가격이 200일 이동 평균 이하로 떨어질 때만 판매 신호를 생성하는 것을 고려한다. 장기적인 경향을 결정함으로써 통합 과정에서 함락되는 것을 방지한다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 다중 이동 평균 설계는 트렌드 방향을 정확하게 결정할 수 있습니다. 빠른 및 느린 라인과 함께 내부 및 외부 이동 평균 리본의 조합은 중장기 트렌드를 식별하는 데 잘 작동합니다.

  2. 연속 브레이크 메커니즘은 잘못된 브레이크를 효과적으로 필터링 할 수 있습니다. 한편, 대부분의 빠른 이동 평균이 깨지는 것을 요구하면 트렌드가 변하는 것을 보장합니다.

  3. 장기 트렌드를 판단하는 것은 통합 과정에서 갇히지 않도록 합니다. 200일 라인을 사용하여 트렌드가 반전되기 시작했을 때만 포지션을 개설할 수 있습니다.

  4. 트렌드를 따르는 조건과 과잉 매입/ 과잉 판매 조건의 균형을 유지합니다. 이동 평균 자체는 트렌드를 따르는 능력을 가지고 있으며, 과잉 매입/ 과잉 판매 지표를 결합하여 스톱 로스 포인트를 설정하면 좋은 위험 통제를 보장합니다.

위험 분석

이 전략의 주요 위험은 다음과 같습니다.

  1. 실패한 탈출 위험이 있습니다. 가짜 탈출이 발생하면 전략은 손실을 완전히 피할 수 없습니다.

  2. 범위 트렌드에서 손실 위험. 시장이 장기간 범위에서 유지될 때, 스톱 로스 포인트가 자주 발생하여 더 큰 손실이 발생할 수 있습니다.

  3. 매개 변수 최적화 위험: 이동 평균 매개 변수의 잘못된 설정은 거래 신호의 오류로 이어지고 더 큰 손실을 초래할 수 있습니다.

이에 대응하는 해결책은 다음과 같습니다.

  1. 적절한 스톱 로스 포인트를 넓혀서 가격에 충분한 이동 공간을 제공하거나 스톱 로스 라인을 따라가도록 허용하는 후속 스톱 로스 방법을 채택하십시오.

  2. 추세 판단 지표를 추가하여 통합 중에 방향이 없는 포지션을 설정하지 않도록 합니다. 예를 들어 DMI, MACD 및 기타 지표로 필터링하는 것과 같습니다.

  3. 가장 좋은 매개 변수 조합을 선택하기 위해 역사적 백테스팅 및 매개 변수 최적화 방법을 사용. 또한 실제 거래에서 매개 변수 효과를 추적하고 동적 최적화를 수행합니다.

최적화 방향

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

  1. 가장 좋은 사이클 숫자를 선택하기 위해 이동 평균 매개 변수를 최적화합니다. 최적의 매개 변수 조합을 찾기 위해 다른 사이클 숫자를 가진 이동 평균의 백테스트를 실행하십시오.

  2. 필터링을 위해 트렌드 판단 지표를 추가하십시오. 과잉 구매 / 과잉 판매에 대한 RSI, 채널 브레이크에 대한 볼링거 밴드 등 트렌드가 불분명하면 맹목적으로 포지션을 설정하는 것을 피하십시오.

  3. 적응 가능한 이동 평균을 채택하십시오. 변화하는 시장 조건과 변동성에 따라 이동 평균 매개 변수를 동적으로 최적화하여 현재 시장 상태에 더 잘 맞게하십시오.

  4. 트렌드 확률을 판단하기 위해 기계 학습 모델을 결합합니다. 성공적인 브레이크오웃의 가능성을 평가하기 위해 확률 모델을 구축하여 결정 시스템을 최적의 진입 시기를 판단하는 데 도움이됩니다.

  5. 가격의 더 나은 추적을 위해 스톱 로스 전략을 최적화하십시오. 예를 들어 트레일링 스톱 로스 또는 동적 포지션 사이징 스톱 로스를 통해 스톱 로스 라인을 더 지능화하십시오.

요약

이동평균 리본 전략은 추세를 따르는 전략 중 가장 흔한 전략 중 하나입니다. 중장기 추세를 판단하기 위해 빠르고 느린 선을 결합하고 입시를 결정하기 위해 연속적인 브레이크아웃 메커니즘을 설정합니다. 전략은 추세를 따르는 것과 과잉 구매 / 과잉 판매 조건을 균형있게합니다. 매개 변수 최적화 및 지표 향상으로 성능을 더욱 향상시킬 수 있습니다. 중장기 지위를 보유한 투자자에게 적합합니다.


//@version=4
strategy(title="Moving Average Ribbon", shorttitle="MA Ribbon", overlay=true)
src = input(close, type=input.source, title="Source")
matype = input(title="Input one in lowercase: sma, ema, wma, trima, zlema, dema, tema, or hma", type=input.string, defval="trima")
// possible values: sma, ema, wma, trima, zlema, dema, tema, hma (hull ma)



trima(_src, _len) =>
    sma(sma(_src, _len), _len)
hma(_src, _len) =>
    wma(2 * wma(_src, _len / 2) - wma(_src, _len), round(sqrt(_len)))
dema(_src, _len) =>
    2 * ema(_src, _len) - ema(ema(_src, _len), _len)
tema(_src, _len) =>
    3 * ema(_src, _len) - 3 * ema(ema(_src, _len), _len) + 
       ema(ema(ema(_src, _len), _len), _len)
zlema(_src, _len) =>
    ema(_src, _len) + ema(_src, _len) - ema(ema(_src, _len), _len)

ma(_src, _len) =>
    hma__1 = hma(_src, _len)
    ema_1 = ema(_src, _len)
    sma_1 = sma(_src, _len)
    wma_1 = wma(_src, _len)
    trima__1 = trima(_src, _len)
    zlema__1 = zlema(_src, _len)
    dema__1 = dema(_src, _len)
    tema__1 = tema(_src, _len)
    matype == "hma" ? hma__1 : matype == "ema" ? ema_1 : matype == "sma" ? sma_1 : 
       matype == "wma" ? wma_1 : matype == "trima" ? trima__1 : 
       matype == "zlema" ? zlema__1 : matype == "dema" ? dema__1 : tema__1

ma05 = ma(src, 5)
ma08 = ma(src, 8)
ma13 = ma(src, 13)
ma20 = ma(src, 20)
ma30 = ma(src, 30)
ma45 = ma(src, 45)
ma70 = ma(src, 70)
ma105 = ma(src, 105)
ma150 = ma(src, 150)
ma200 = ma(src, 200)




maColor(ma, maRef) =>
    if change(ma) <= 0 and ma05 < maRef
        color.new(color.red, 20)
    else
        if change(ma) >= 0 and ma05 > maRef
            color.new(color.navy, 20)
        else
            if change(ma) < 0 and ma05 > maRef
                color.new(color.red, 20)
            else
                if change(ma) >= 0 and ma05 < maRef
                    color.new(color.navy, 20)
                else
                    color.gray


aboveConfirmed(x,maRef)=>
    above=true
    for i=1 to x
        if close[i]<maRef[i] and not (close[i]>ma200[i]*1.01) and not (ma05[i]>ma105[i]*1.015)
            above:=false
    above


aboveMost(x,len)=>
    above=0
    boolean=false
    if close[len]>ma05[len]
        above:=above+1
    if close[len]>ma08[len]
        above:=above+1
    if close[len]>ma13[len]
        above:=above+1
    if close[len]>ma20[len]
        above:=above+1
    if close[len]>ma30[len]
        above:=above+1
    if close[len]>ma45[len]
        above:=above+1
    if close[len]>ma70[len]
        above:=above+1
    if close[len]>ma105[len]
        above:=above+1
    if close[len]>ma150[len]
        above:=above+1
    if close[len]>ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
    
belowMost(x,len)=>
    above=0
    boolean=false
    if close[len]<ma05[len]
        above:=above+1
    if close[len]<ma08[len]
        above:=above+1
    if close[len]<ma13[len]
        above:=above+1
    if close[len]<ma20[len]
        above:=above+1
    if close[len]<ma30[len]
        above:=above+1
    if close[len]<ma45[len]
        above:=above+1
    if close[len]<ma70[len]
        above:=above+1
    if close[len]<ma105[len]
        above:=above+1
    if close[len]<ma150[len]
        above:=above+1
    if close[len]<ma200[len]
        above:=above+1
    if(above>=x)
        boolean:=true
    boolean
        
        
belowConfirmed(x,maRef)=>
    below=true
    for i=1 to x
        if close[i]>maRef[i] and not (close[i]<maRef[i]*0.99) and not (ma05[i]<ma105[i]*0.985)
            below:=false
    below
            
            
//plotshape(aboveConfirmed(5,ma150),color=color.navy,location=location.abovebar,style=shape.triangleup,size=size.large,title="above",text="above")
            
plot(ma05, color=maColor(ma05, ma150), style=plot.style_line, title="MMA05", linewidth=2)
plot(ma08, color=maColor(ma08, ma150), style=plot.style_line, title="MMA08", linewidth=1)
plot(ma13, color=maColor(ma13, ma150), style=plot.style_line, title="MMA13", linewidth=1)
plot(ma20, color=maColor(ma20, ma150), style=plot.style_line, title="MMA20", linewidth=1)
plot(ma30, color=maColor(ma30, ma150), style=plot.style_line, title="MMA30", linewidth=1)
plot(ma45, color=maColor(ma45, ma200), style=plot.style_line, title="MMA45", linewidth=1)
plot(ma70, color=maColor(ma70, ma200), style=plot.style_line, title="MMA70", linewidth=2)
plot(ma105, color=maColor(ma105, ma200), style=plot.style_line, title="MMA105", linewidth=2)
plot(ma150, color=maColor(ma150, ma200), style=plot.style_line, title="MMA150", linewidth=3)
plot(ma200, color=maColor(ma200, ma200), style=plot.style_line, title="MM200", linewidth=3)


closeLong=belowMost(6,1) and belowMost(6,2) and belowMost(6,3)
closeShort=aboveMost(6,1) and aboveMost(6,2) and aboveMost(6,3)

isAbove=aboveConfirmed(5,ma200)
strategy.entry("short", false, when=belowConfirmed(3,ma200) and belowMost(8,1) and belowMost(8,2) and belowMost(8,3))
strategy.entry("long", true, when=aboveConfirmed(3,ma200) and aboveMost(8,1) and aboveMost(8,2) and aboveMost(8,3))




strategy.close("long",when=closeLong)
strategy.close("short",when=closeShort)



더 많은