다중 이동 평균 대역을 기반으로 한 전략


생성 날짜: 2023-12-18 12:29:19 마지막으로 수정됨: 2023-12-18 12:29:19
복사: 1 클릭수: 807
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

다중 이동 평균 대역을 기반으로 한 전략

개요

이동 평균 반지 전략은 여러 이동 평균을 기반으로 한 트렌드 추적 전략이다. 그것은 동시에 빠른 이동 평균과 느린 이동 평균을 모니터링하고, 가격이 이동 평균 반지를 뚫을 때 거래 신호를 발생시킨다. 이 전략은 동시에 추세 판단과 과매매 과매매 지표를 결합하여 중장선 트렌드를 효과적으로 포착할 수 있다.

전략 원칙

이 전략은 동시에 5개의 빠른 이동 평균 ((5, 8, 13, 20, 30 일선) 과 4개의 느린 이동 평균 ((45, 70, 105, 150 일선) 을 사용하며, 빠른 선은 내부의 이동 평균을 구성하며, 느린 선은 외부의 이동 평균을 구성한다. 내부의 평균을 넘어서면 구매 신호가 발생하고, 내부의 평균을 넘어서면 판매 신호가 발생한다. 가짜 돌파구를 필터링하기 위해, 3개의 연속적인 K 선의 내부의 이동 평균을 깨는 것이 필요하며, 대부분의 빠른 이동 평균은 동시에 돌파되어 거래 신호가 발생한다.

또한, 이 전략은 장기적인 추세를 판단한다. 가격이 200일 이동 평균 위에 있을 때만 구매 신호를 생성하는 것을 고려한다. 반대로, 가격이 200일 이동 평균 아래로 떨어질 때만 판매 신호를 생성하는 것을 고려한다. 장기적인 추세를 판단함으로써, 정리 기간 동안 포착을 피할 수 있다.

우위 분석

이 전략에는 다음과 같은 장점이 있습니다.

  1. 다중 이동 평균 설계, 트렌드 방향을 정확하게 판단할 수 있다. 내외 이동 평균 띠는 빠른 느린 평균 선과 결합하여 중장선 트렌드를 식별하는 효과가 좋다.

  2. 연속적인 브레이크 메커니즘은 가짜 브레이크를 효과적으로 필터링 할 수 있습니다. 동시에 대부분의 빠른 평행선 브레이크를 요구하여 트렌드 변화를 보장합니다.

  3. 장기적인 추세를 판단하여 정리에서 피하는 것이다. 200 일선 판단과 함께, 추세가 전환될 때만 포지션을 고려한다.

  4. 트렌드 추적과 오버 바이 오버 세드를 병행한다. 이동 평균 자체는 트렌드 추적 기능을 가지고 있으며, 오버 바이 오버 세드 지표와 결합하여 중지 지점을 설정하여 위험을 제어한다.

위험 분석

이 전략에는 다음과 같은 위험들이 있습니다.

  1. 브레이크 실패 위험. 가격에서 가짜 브레이크가 발생하면, 이 전략은 손실을 완전히 피할 수 없습니다.

  2. 흔들리는 경향에 따른 손실 위험. 시장이 장기적으로 흔들릴 때, 중지 손실 지점은 종종 타격되어 손실이 증가 할 수 있습니다.

  3. 매개 변수 최적화 위험. 이동 평균 매개 변수 설정이 잘못되면 거래 신호에 오류가 발생하여 손실이 증가합니다.

대응방법:

  1. 적절히 느슨한 스톱포인트를 사용해서 가격에 충분한 공간을 주거나 ljetrail의 스톱포인트를 사용해서 가격에 따라 스톱포인트를 주거나

  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)