이 전략은 이중 이동 평균, 특히 8 기간 및 21 기간을 사용합니다. 짧은 MA가 더 긴 MA를 넘을 때 긴 신호를 생성하고 짧은 MA가 더 긴 MA를 넘을 때 짧은 신호를 생성합니다.
이 전략은 또한 유동 평균 라인의 기울기를 통합하여 트렌드가 아닌 기간을 필터링하고 트렌드가 더 명백할 때 신호를 생성합니다.
이 전략의 핵심은 단기 및 장기 이동 평균의 교차에 있다. 더 짧은 MA는 트렌드 변화를 더 빨리 포착할 수 있으며, 더 긴 MA는 더 나은 노이즈 필터링 효과를 가지고 있다. 더 짧은 MA가 더 긴 MA를 넘어서면 긴 신호로 이어질 때 상승 추세가 제안된다. 더 짧은 MA가 더 긴 MA를 넘어서면 짧은 신호로 이어질 때 하락 추세가 제안된다.
이 전략은 또한 기울기 문턱을 설정합니다. 기울기가 긍정적 인 문턱 값보다 크면만 긴 신호가 생성됩니다. 기울기가 부정적인 문턱 값보다 작을 때만 짧은 신호가 생성됩니다. 이것은 두드러진 추세가 존재하지 않는 구역을 필터링하는 데 도움이되며 더 높은 품질의 거래 신호가 발생합니다.
특히, 거래 신호를 생성하는 논리는 다음과 같습니다.
이 전략의 장점은 다음과 같습니다.
이 전략에는 몇 가지 위험이 있습니다.
이러한 위험을 기반으로 최적화 할 수있는 몇 가지 방법:
전략 최적화를 위한 몇 가지 방향:
요약하자면, 이 이중 MA 전략은 간단하고 실용적입니다. 두 기간 매개 변수를 통해 다른 트렌드 특성을 캡처하고 거래 신호를 생성하기 위해 결합함으로써. 한편, 기울기 문턱을 통합하면 신호 품질이 향상됩니다. 이 전략은 광범위한 최적화 공간과 잠재력으로 확장을위한 기본으로 사용될 수 있습니다.
/*backtest start: 2024-01-09 00:00:00 end: 2024-01-16 00:00:00 period: 10m basePeriod: 1m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //written by sixpathssenin //@version=4 strategy(title="Dual Moving Average",initial_capital=10000,overlay=true) ma1= sma(close,8) ma2= sma(close,21) angleCriteria = input(title="Angle", type=input.integer, defval=7, minval=1, maxval=13) i_lookback = input(2, "Angle Period", input.integer, minval = 1) i_atrPeriod = input(10, "ATR Period", input.integer, minval = 1) i_angleLevel = input(6, "Angle Level", input.integer, minval = 1) i_maSource = input(close, "MA Source", input.source) f_angle(_src, _lookback, _atrPeriod) => rad2degree = 180 / 3.141592653589793238462643 //pi ang = rad2degree * atan((_src[0] - _src[_lookback]) / atr(_atrPeriod)/_lookback) ang _angle = f_angle(ma2, i_lookback, i_atrPeriod) plot(ma1,color=#FF0000) plot(ma2,color=#00FF00) crosso=crossover(ma1,ma2) crossu=crossunder(ma1,ma2) _lookback = 15 f_somethingHappened(_cond, _lookback) => bool _crossed = false for i = 1 to _lookback if _cond[i] _crossed := true _crossed longcrossed = f_somethingHappened(crosso,_lookback) shortcrossed = f_somethingHappened(crossu,_lookback) long = longcrossed and _angle > angleCriteria short= shortcrossed and _angle < -(angleCriteria) if(long) strategy.entry("Long",strategy.long) if(short) strategy.entry("short",strategy.short)