이중 이동 평균 거래 전략 (Dual Moving Average Trading Strategy) 은 일반적인 양적 거래 전략이다. 이 전략은 서로 다른 기간을 가진 두 개의 이동 평균을 사용하여 크로스오버를 기반으로 거래 신호를 생성합니다. 구체적으로 단기 이동 평균이 장기 이동 평균보다 높을 때 구매 신호로 간주되며 단기 이동 평균이 장기 이동 평균보다 낮을 때 판매 신호로 간주됩니다.
이 전략의 핵심 원칙은: 단기 이동 평균은 자산 가격의 단기 트렌드를 반영하고, 장기 이동 평균은 자산 가격의 장기 트렌드를 반영한다. 단기 라인이 장기 라인의 위를 넘을 때, 단기 트렌드가 상승으로 전환되었다는 것을 나타냅니다. 이 때 당신은 구입할 수 있습니다. 단기 라인이 장기 라인의 아래를 넘을 때, 단기 트렌드가 하락으로 전환되었다는 것을 나타냅니다. 이 때 당신은 판매 할 수 있습니다. 트렌드를 따라, 가격 트렌드의 전환점을 캡처하십시오.
구체적으로, 전략은 두 개의 이동 평균을 정의합니다: 단기 가격 트렌드를 포착하기 위해 5 일 단기 이동 평균; 그리고 장기 가격 트렌드를 판단하기 위해 15 일 장기 이동 평균. 5 일 라인이 15 일 라인의 위로 이동하면 단기 가격이 상승하기 시작했다는 것을 나타냅니다. 이는 구매 신호입니다. 5 일 라인이 15 일 라인의 아래에 넘어가면 단기 가격이 떨어지기 시작한다는 것을 나타냅니다. 이것은 판매 신호입니다.
다른 전략에 비해 이중 이동 평균 전략은 다음과 같은 장점을 가지고 있습니다.
이중 이동 평균 전략은 또한 몇 가지 위험을 가지고 있습니다. 주로 다음과 같습니다.
해결책:
이 전략은 다음과 같은 방향으로 최적화 될 수 있습니다.
MACD, KDJ 같은 다른 지표와 결합하여 잘못된 신호를 필터합니다.
적응 가능한 이동 평균을 도입하고 안정성을 높이기 위해 시장 변동성에 기반한 매개 변수를 동적으로 조정합니다.
가장 좋은 조합을 찾기 위해 이동 평균 매개 변수를 최적화하고 전략 성능을 향상시킵니다.
손실을 제한하고 위험 통제를 강화하기 위해 스톱 로스 메커니즘을 추가합니다.
여러 시간 프레임의 조합, 안정성을 향상시키기 위해 매일 및 주간 라인의 신호를 활용합니다.
마르코프 상태 스위치, 적응력을 향상시키기 위해 다른 시장 상태에서 다른 매개 변수를 사용합니다.
일반적으로 이중 이동 평균 거래 전략은 매우 효과적이고 안정적입니다. 거래 원칙은 이해하고 구현하는 것이 간단하며 매개 변수는 시장 추세에 적응하는 데 유연합니다. 한편으로는 잘못된 신호를 생성하고 급격한 시장 변동을 처리하는 데 어려움을 겪는 것과 같은 몇 가지 제한 사항이 있습니다. 다른 도구와 매개 변수 최적화를 도입하여 해결할 수 있습니다. 전반적으로 이것은 양적 거래 초보자가 배우고 연습하기에 적합한 실용적인 전략입니다.
//@version=3 strategy("CS: 2 Moving Averages Script - Strategy (Testing)", overlay=true) // === GENERAL INPUTS === // short ma ma1Source = input(defval = close, title = "MA 1 Source") ma1Length = input(defval = 5, title = "MA 1 Period", minval = 1) // long ma ma2Source = input(defval = close, title = "MA 2 Source") ma2Length = input(defval = 15, title = "MA 2 Period", minval = 1) // === SERIES SETUP === /// a couple of ma's.. ma1 = ema(ma1Source, ma1Length) ma2 = ema(ma2Source, ma2Length) // === PLOTTING === fast = plot(ma1, title = "MA 1", color = red, linewidth = 2, style = line, transp = 30) slow = plot(ma2, title = "MA 2", color = green, linewidth = 2, style = line, transp = 30) // === LOGIC === enterLong = crossover(ma1, ma2) exitLong = crossover(ma2, ma1) // === INPUT BACKTEST RANGE === FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2018, title = "From Year", minval = 2012) ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12) ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31) ToYear = input(defval = 9999, title = "To Year", minval = 2012) // === FUNCTION EXAMPLE === start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window window() => true // create function "within window of time" // Entry // strategy.entry(id="Long Entry", long=true, when=enterLong and window()) strategy.entry(id="Short Entry", long=false, when=exitLong and window())