이동평균 추적 전략은 단순한 이동평균에 기반한 트렌드를 따르는 전략이다. 가격 트렌드 방향을 결정하기 위해 200일 간 간단한 이동평균을 사용합니다. 가격이 이동평균을 넘으면 길게 간다. 가격이 이동평균을 넘으면 짧게 간다. 이 전략은 트렌드를 수익으로 추적합니다.
이 전략은 다음과 같은 원칙에 기초합니다.
이 전략은 트렌드를 추적하여 평균 방향을 움직이며 MA 크로스오버가 발생하면 트렌드를 수익으로 전환합니다.
이 전략은 다음과 같은 장점을 가지고 있습니다.
또한 몇 가지 위험이 있습니다.
위험은 다음과 같은 최적화로 해결할 수 있습니다.
이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.
최적의 매개 변수를 찾기 위해 워크 포워드 분석과 같은 방법을 사용하여 MA 기간 매개 변수를 최적화하십시오.
장기 및 단기 트렌드를 추적하기 위해 단기 MA를 추가합니다.
MACD와 같은 트렌드 지표를 통합하여 트렌드 역전 식별을 개선합니다.
단일 거래 손실을 제어하기 위해 후속 스톱 손실과 같은 스톱 손실 메커니즘을 추가하십시오.
다양한 제품과 기간에 대한 견고성 테스트
매개 변수 적응 최적화를 위해 기계 학습을 사용하세요.
이동 평균 추적 전략은 단순하고 실용적인 트렌드 추적 전략이다. 그것은 명확한 논리를 가지고 있으며 트렌드를 포착하기 위해 구현하기 쉽습니다. 그러나 그것은 또한 단기 수정과 약한 위험 통제에 민감하지 않은 것과 같은 몇 가지 약점을 가지고 있습니다. 우리는 더 견고하고 더 잘 매개 변수화되어 더 강력한 위험 관리로 전략을 최적화 할 수 있습니다. 전반적으로 이동 평균 추적 전략은 좋은 응용 가치를 가지고 있으며 양적 거래에서 중요한 트렌드 거래 개념입니다.
/*backtest start: 2023-09-19 00:00:00 end: 2023-10-19 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("MA X 200 BF", overlay=true, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=100, commission_type=strategy.commission.percent, commission_value=0.0) /////////////// Time Frame /////////////// testStartYear = input(2012, "Backtest Start Year") testStartMonth = input(1, "Backtest Start Month") testStartDay = input(1, "Backtest Start Day") testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay, 0, 0) testStopYear = input(2019, "Backtest Stop Year") testStopMonth = input(12, "Backtest Stop Month") testStopDay = input(31, "Backtest Stop Day") testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay, 0, 0) testPeriod() => true ///////////// MA 200 ///////////// slowMA = sma(close, input(200)) /////////////// Strategy /////////////// long = close > slowMA short = close < slowMA last_long = 0.0 last_short = 0.0 last_long := long ? time : nz(last_long[1]) last_short := short ? time : nz(last_short[1]) long_signal = crossover(last_long, last_short) short_signal = crossover(last_short, last_long) /////////////// Execution /////////////// if testPeriod() strategy.entry("Long Entry", strategy.long, when=long_signal) strategy.entry("Short Entry", strategy.short, when=short_signal) strategy.exit("Long Ex", "Long Entry") strategy.exit("Short Ex", "Short Entry") /////////////// Plotting /////////////// plot(slowMA, color = long ? color.lime : color.red, linewidth=2) bgcolor(strategy.position_size > 0 ? color.lime : strategy.position_size < 0 ? color.red : color.white, transp=80) bgcolor(long_signal ? color.lime : short_signal ? color.red : na, transp=30)