이동 평균 크로스오버 거래 전략은 비교적 일반적인 양적 거래 전략이다. 이 전략은 서로 다른 기간의 이동 평균을 계산하여 그들의 교차 상황에 따라 거래 신호를 생성한다. 구체적으로, 4 기간, 8 기간 및 20 기간의 기하급수적인 이동 평균 (EMA) 을 계산한다. 단기 EMA가 장기 EMA를 넘을 때, 길게 가; 단기 EMA가 장기 EMA를 넘을 때, 짧게 가.
이 전략의 핵심 논리는 다음과 같습니다.
이 방법을 통해 우리는 시장 신호를 판단하기 위해 다른 기간 이동 평균 사이의 교차점을 활용하고 가장 긴 기간 이동 평균의 방향을 사용하여 잘못된 신호를 필터하여 안정적인 거래 전략을 구축합니다.
이 전략의 주요 장점은 다음과 같습니다.
이 전략에는 몇 가지 위험도 있습니다.
주요 해결책은 다음과 같습니다.
이 전략은 다음과 같은 측면에서 최적화 될 수 있습니다.
기간 최적화: 다양한 품종에 따라 최적의 MA 기간 조합을 결정합니다.
스톱 손실 최적화: 단일 손실을 제어하기 위해 합리적으로 스톱 손실 지점을 설정하십시오.
매개 변수 최적화: 유전 알고리즘, 마르코프 체인 등을 사용하여 매개 변수를 동적으로 최적화합니다.
모델 융합: 더 많은 알파를 추출하기 위해 LSTM, RNN 및 다른 딥 러닝 모델과 통합합니다.
포트폴리오 최적화: 다른 기술 지표 전략과 결합하여 전략 포트폴리오를 구성합니다.
일반적으로, 이동 평균 크로스오버 전략은 비교적 고전적이고 일반적으로 사용되는 양적 거래 전략이다. 이 전략은 간단한 논리를 가지고 있으며, 특정 안정성을 가지고 이해하기 쉽고 구현할 수 있습니다. 그러나 잘못된 신호를 생성하는 것, 시장 변화에 적응할 수 없는 것 등과 같은 몇 가지 문제도 있습니다. 이러한 문제는 매개 변수 최적화, 스톱 로스 최적화, 모델 융합 및 기타 방법을 통해 개선 될 수 있습니다. 전반적으로, 이동 평균 전략은 강력한 복잡한 전략을 구축하기 위해 더 복잡한 전략과 결합하여 전략 도구 상의 기본 모듈로 사용될 수 있습니다.
/*backtest start: 2023-12-01 00:00:00 end: 2023-12-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=3 //future strategy //strategy(title = "stub", default_qty_type = strategy.fixed, default_qty_value = 1, overlay = true, commission_type=strategy.commission.cash_per_contract,commission_value=2.05) //stock strategy strategy(title = "stub", overlay = true) //forex strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true) //crypto strategy //strategy(title = "stub", default_qty_type = strategy.percent_of_equity, default_qty_value = 100, overlay = true, commission_type=strategy.commission.percent,commission_value=.0,default_qty_value=10000) testStartYear = input(1900, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testEndYear = input(2018, "Backtest Start Year") testEndMonth = input(12, "Backtest Start Month") testEndDay = input(1, "Backtest Start Day") testPeriodEnd = timestamp(testStartYear,testStartMonth,testStartDay,0,0) testPeriod() => true ema1 = ema(close,4) ema2 = ema(close,8) ema3 = ema(close,20) go_long = ema1[0] > ema2[0] and ema3[0] > ema3[1] exit_long = ema1[0] < ema2[0] or ema3[0] < ema3[1] go_short = ema1[0] < ema2[0] and ema3[0] < ema3[1] exit_short = ema1[0] > ema2[0] or ema3[0] > ema3[1] if testPeriod() strategy.entry("simpleBuy", strategy.long, when=go_long) strategy.exit("simpleBuy", "simpleSell",when=exit_long) strategy.entry("simpleSell", strategy.short,when=go_short) strategy.exit("simpleSell", "simpleSell",when=exit_short)