동적 이동 평균을 기반으로 한 추세 추종 전략


생성 날짜: 2024-01-02 10:44:53 마지막으로 수정됨: 2024-01-02 10:44:53
복사: 0 클릭수: 559
avatar of ChaoZhang ChaoZhang
1
집중하다
1621
수행원

동적 이동 평균을 기반으로 한 추세 추종 전략

개요

이 전략은 동적 평평선 지표에 기반하여 가격 추세를 실시간으로 추적하고, 평평선의 돌파구를 통해 거래 신호를 발산한다. 전략의 장점은 매개 변수 설정이 간단하고, 신호 판단이 명확하며, 중장선 지위를 보유하기에 적합하다.

전략 원칙

이 전략은 동적 평평선 지표, ALMA, EMA, SMA 등 여러 종류의 평평선을 사용합니다. 기본 원칙은, 가격이 상위 평평선을 통과할 때, 더 많이 하고, 가격이 하위 평평선을 통과할 때, 공백을 한다는 것입니다. 즉, 평평선을 가격 경향의 태풍표로 사용하여 방향 전환이 발생할 때 거래 신호를 발산할 수 있습니다.

구체적으로 말하면, 전략은 높은 낮은 지점을 형성한 평균선을 사용하고, 그 다음 낮은 평균선을 다중 신호선으로 하고, 높은 평균선을 다중 신호선으로 한다. 종전 가격이 낮은 평균선보다 높을 때, 더 많이 하고, 종전 가격이 높은 평균선보다 낮을 때, 다중한다.

이렇게 평평선 지표를 사용하여 가격 추세를 판단하고, 돌파 원칙과 결합하여 신호를 발산하여 간단한 실용적인 추세 추적 전략을 형성한다.

전략적 이점

  • 평균선 지표 판단, 변수 설정은 간단, 조작이 쉽다
  • 신호 판단 규칙이 명확하고, 가짜 신호가 발생하지 않습니다.
  • 자유로이 선택할 수 있는 일직선 알고리즘, 시장 변화에 유연하게 대응할 수 있다
  • 다른 주기적 추세에 적응할 수 있는 평균선 변수
  • 여러 시간 프레임에 걸쳐 신호를 검증하여 신뢰성을 높일 수 있습니다.

위험과 해결

  • 평균자책점 지표가 늦어지고, 일부 기회를 놓칠 수 있다
    • 적당히 줄인 평균주기, 또는 지수 이동 평균 EMA를 사용
  • 단기간에 큰 흔들림, 상쇄 위험
    • 적당히 느슨한 정지폭을 사용하여 충분한 이동 공간을 확보하십시오.
  • 장기적으로 위험을 감수할 수 있고, 제때는 막을 수 없습니다.
    • 다른 지표와 함께 판단하여, 고아를 쫓는 것을 피하십시오.

전략 최적화

  • 다양한 품종 특성에 따라 평균선 알고리즘과 변수를 조정
  • 부-지표 판단을 높여서 전략 효과를 높여라
  • 더 많은 손해 방지 장치
  • 다중 시간 프레임에서 신호 신뢰성을 평가
  • 더 나은 변수를 찾기 위한 기계 학습 기술

요약하다

이 전략은 평평선 지표를 사용하여 가격 추세 방향을 판단하고, 돌파 이론에 기반한 거래 신호를 발산한다. 이 전략은 간단하고 사용하기 쉽고, 중장선 포지션에 적합하며, 파라미터를 통해 시장 변화에 적응할 수 있다. 단기 충격과 장기 보유로 인한 위험을 예방하는 데 주의를 기울여야 하며, 손해 스톱을 통해 해결할 수 있다. 전략의 효과를 높이기 위해 더 많은 지표를 이용하고, 더 우수한 파라미터를 찾기 위해 기계 학습을 사용하는 데 최적화 할 여지가 있다.

전략 소스 코드
/*backtest
start: 2023-12-02 00:00:00
end: 2024-01-01 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Baseline Strategy - evo", shorttitle="Baseline", overlay=true)

//INPUTS
mat =               input("ALMA", "MA Type", options=["SMA", "EMA", "WMA", "HMA", "VWMA", "RMA", "ALMA"])
baseline =          input(55, title="MA Length")
src =               input(ohlc4, title="Closing Source")

offset =            input(0.85, step=0.05, title="Offset (alma only)")
sigma =             input(10, title="Sigma (alma only)")

useCurrentRes =     input(true, title="Use Current Resolution")
resCustom =         input("1440", title="Timeframe")

showsignals =       input(false, title="Show Signals ?")

//BASELINE
baselinehigh = 

 mat=="SMA" ? sma(high,baseline) : 
 mat=="EMA" ? ema(high,baseline) : 
 mat=="WMA" ? wma(high,baseline) : 
 mat=="HMA" ? wma(2*wma(high, baseline/2)-wma(high, baseline), round(sqrt(baseline))) : 
 mat=="VWMA" ? vwma(high,baseline) : 
 mat=="RMA" ? rma(high,baseline) :
 mat=="ALMA" ? alma(high, baseline, offset, sigma) : na

baselinelow = 

 mat=="SMA" ? sma(low,baseline) : 
 mat=="EMA" ? ema(low,baseline) : 
 mat=="WMA" ? wma(low,baseline) : 
 mat=="HMA" ? wma(2*wma(low, baseline/2)-wma(low, baseline), round(sqrt(baseline))) : 
 mat=="VWMA" ? vwma(low,baseline) : 
 mat=="RMA" ? rma(low,baseline) : 
 mat=="ALMA" ? alma(low, baseline, offset, sigma) : na

//RESOLUTION
res =               useCurrentRes ? timeframe.period : resCustom

mtfhigh =           security(syminfo.tickerid, res, baselinehigh)
mtflow =            security(syminfo.tickerid, res, baselinelow)

//PLOTS
plot(mtfhigh, color=color.navy, linewidth=2, transp=0, title="Baseline High")
plot(mtflow, color=color.navy, linewidth=2, transp=0, title="Baseline Low")

long =              src > mtfhigh
short =             src < mtflow

barcolor(long ? #ffe0b2 : short ? #2a2e39 : not long and not short ? #b09e82 : na, title="BaseLine BarColor")

signal = 0
signal := long ? 1 : short ? 2 : nz(signal[1])

plotshape(showsignals ? (signal != signal[1] and long ? mtflow : na) : na, title="Long", location=location.absolute, size=size.small, style=shape.labelup, text="Long", textcolor=color.black, transp=40, color=#00ff00)
plotshape(showsignals ? (signal != signal[1] and short ? mtfhigh : na) : na, title="Short", location=location.absolute, size=size.small, style=shape.labeldown, text="Short", textcolor=color.white, transp=40, color=#ff0000)

alertcondition(signal != signal[1], title="Trend Change !", message="Trend Change !")

if (long)
    strategy.entry("Long", strategy.long)
if (short)
    strategy.entry("Short", strategy.short)