
이중 이동 평균 거래 전략 (Dual Moving Average Trading Strategy) 은 일반적인 양적 거래 전략이다. 이 전략은 두 개의 다른 시간 주기 이동 평균을 사용하여 교차 상황에 따라 거래 신호를 생성한다. 구체적으로, 단기 이동 평균 상에서 장기 이동 평균을 통과하면 구매 신호로 간주되며, 단기 이동 평균 아래에서 장기 이동 평균을 통과하면 판매 신호로 간주된다.
이 전략의 핵심 원칙은: 단기 이동 평균은 자산 가격의 단기 경향을 반영할 수 있고, 장기 이동 평균은 자산 가격의 장기 경향을 반영할 수 있다. 단기 라인을 가로질러서는 장기 라인을 가로질러서는 단기 경향이 상승으로 바뀌어 구매할 수 있으며, 단기 라인을 가로질러서는 장기 라인을 가로질러서는 단기 경향이 하락으로 바뀌어 판매할 수 있다. 이 방법으로 순차적으로 가격 경향의 전환점을 잡을 수 있다.
구체적으로, 이 전략은 두 개의 이동 평균을 정의합니다. 하나는 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())