
이동 평균 크로스 오버 전략 (영어: Moving Average Crossover Strategy) 은 간단한 이동 평균을 기반으로 한 양적 거래 전략이다. 이 전략은 서로 다른 주기의 간단한 이동 평균을 계산하여 그들이 교차 할 때 구매 및 판매 신호를 생성한다.
구체적으로, 이 전략은 9일선과 45일선에서 간단한 이동 평균을 계산한다. 가격이 9일선과 45일선을 넘어서면 구매 신호를 발생시키고, 가격이 9일선과 45일선을 넘어서면 판매 신호를 발생시킨다.
이 전략의 핵심 논리는 이동 평균의 금강 포크 데드 포크 원칙에 기초한다. 이동 평균은 시장의 소음을 효과적으로 필터링하여 큰 추세의 변화를 나타냅니다. 단기 평균 위에 장기 평균을 뚫을 때 가격이 상승 추세에 들어간다는 것을 나타냅니다. 단기 평균 아래에 장기 평균을 뚫을 때 가격이 하향 추세에 들어간다는 것을 나타냅니다.
구체적으로, 이 전략은 9일선과 45일선의 간단한 이동 평균을 사용합니다. 9일선은 단기 경향을 나타내고, 45일선은 장기 경향을 나타냅니다. 9일선과 45일선을 넘어서면, 주가가 단기 및 장기간에 걸쳐 상승 채널에 있다는 것을 나타냅니다. 따라서 구매 신호를 생성합니다. 9일선과 45일선을 넘어서면, 주가 상승세가 점차 약해지면서 판매 신호를 생성합니다.
코드 논리적으로 보면, 이 전략은 먼저 9일선과 45일선의 간단한 이동 평균을 계산하고, 그 다음에는 ta.crossover와 ta.crossunder 함수를 통해 평행선의 황금 포크와 죽은 포크를 판단한다. 구매 및 판매 신호를 생성할 때, plotshape 함수를 사용하여 K선 그래프에 삼각형과 역삼각형의 신호 그래프를 그리는다.
또한, 이 전략은 긴 포지션과 짧은 포지션의 중지 손실 논리를 설정한다. 구체적으로, 포지션을 열 때, 전 K 라인의 최고 가격과 최저 가격을 중지 손실 가격으로 추출한다. 이것은 수익을 잠금하고 큰 손실을 방지 할 수 있다.
대책:
이 전략에는 더 많은 최적화 가능성이 있습니다:
적응형 이동 평균 또는 지수 이동 평균을 사용하면 트렌드 변화를 더 잘 포착 할 수 있습니다.
변동률 지표와 같은 필터 신호를 증가시켜 흔들림 상황에서 잘못된 신호를 피한다.
변수 최적화 방법을 사용하여 최적의 변수 조합을 찾습니다.
스톱 로직에 트렌드 추적 메커니즘을 추가하여 스톱 라인이 가격을 유연하게 추적 할 수 있도록합니다.
주요 가격 영역에서 잘못된 신호를 피하기 위해 큰 수준의 지원 저항에 대한 판단을 높여줍니다.
기계 학습 모델과 결합하여 신호 품질을 더욱 필터링합니다.
평선 교차 전략은 간단한 실용적인 트렌드 추적 전략이다. 그것은 효과적으로 소음을 필터링하고, 가격의 중·장기 트렌드의 변화를 포착한다. 적절한 스톱 로직과 결합한 후, 위험을 통제하는 기초에 트렌드 거래를 할 수 있다. 이 전략 논리는 간단하고 실행하기 쉽고, 양자 거래 초보자에게 적합하다. 추가적인 최적화 및 개선으로 이 전략은 양자 거래 시스템의 효과적인 구성 요소가 될 수 있다.
/*backtest
start: 2022-12-15 00:00:00
end: 2023-12-21 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("SMA Crossover Strategy", overlay=true)
// Input parameters
fast_length = input(9, title="Fast SMA Length")
slow_length = input(45, title="Slow SMA Length")
// Calculate moving averages
fast_sma = ta.sma(close, fast_length)
slow_sma = ta.sma(close, slow_length)
// Buy condition
buy_condition = ta.crossover(close, fast_sma) and ta.crossover(close, slow_sma)
// Sell condition
sell_condition = ta.crossunder(close, fast_sma) and ta.crossunder(close, slow_sma)
// Calculate stop loss levels
prev_low = request.security(syminfo.tickerid, "1D", low[1], lookahead=barmerge.lookahead_on)
prev_high = request.security(syminfo.tickerid, "1D", high[1], lookahead=barmerge.lookahead_on)
// Plot signals on the chart
plotshape(buy_condition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(sell_condition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)
// Strategy exit conditions
long_stop_loss = sell_condition ? prev_low : na
short_stop_loss = buy_condition ? prev_high : na
strategy.exit("Long Exit", from_entry="Long", when=sell_condition, stop=long_stop_loss)
strategy.exit("Short Exit", from_entry="Short", when=buy_condition, stop=short_stop_loss)
strategy.entry("Long", strategy.long, when=buy_condition)
strategy.entry("Short", strategy.short, when=sell_condition)