이동 평균 추적 전략

저자:차오장, 날짜: 2023-10-20 17:02:52
태그:

img

전반적인 설명

이동평균 추적 전략은 단순한 이동평균에 기반한 트렌드를 따르는 전략이다. 가격 트렌드 방향을 결정하기 위해 200일 간 간단한 이동평균을 사용합니다. 가격이 이동평균을 넘으면 길게 간다. 가격이 이동평균을 넘으면 짧게 간다. 이 전략은 트렌드를 수익으로 추적합니다.

전략 논리

이 전략은 다음과 같은 원칙에 기초합니다.

  1. 가격 추세를 결정하기 위해 200일 간 간단한 이동 평균 (slowMA) 을 사용하십시오.
  2. 클로즈 가격 (클로즈) 이 슬로우MA를 넘으면 상승 추세를 나타냅니다.
  3. 닫기 가격이 slowMA 아래를 넘으면 하락 추세를 나타냅니다. 그래서 짧은 가격으로 가세요.
  4. 마지막 길고 짧은 입력 시간을 기록하기 위해 last_long와 last_short 변수를 사용하십시오.
  5. 크로스오버 함수를 사용 하 여 트레이드 신호를 생성 하는 데 last_long 및 last_short 사이의 크로스오버를 감지 합니다.
  6. 백테스트 기간에, 긴 신호를 수신할 때 긴 신호 (long_signal) 를, 짧은 신호를 수신할 때 짧은 신호 (short_signal) 를 입력합니다.

이 전략은 트렌드를 추적하여 평균 방향을 움직이며 MA 크로스오버가 발생하면 트렌드를 수익으로 전환합니다.

이점 분석

이 전략은 다음과 같은 장점을 가지고 있습니다.

  1. 전략 논리는 간단하고 이해하기 쉽고 구현하기 쉽습니다.
  2. 장기 이동 평균은 소음을 필터링하고 주요 트렌드에 잠겨 있습니다.
  3. 적시에 리버스 트레이드는 트렌드 반전 주위의 중요한 가격 변동을 포착 할 수 있습니다.
  4. 하나의 지표만 사용해서 여러 지표의 복잡성을 피합니다.
  5. 인간의 개입 없이 출입과 출입에 대한 명확한 규칙

위험 분석

또한 몇 가지 위험이 있습니다.

  1. 장기적 MA는 단기적 수정에 민감하지 않으며 단기적 기회를 놓치고 있습니다.
  2. 역전 손실로 큰 트렌드 반전을 식별하는 능력이 약하다.
  3. 스톱 로스 메커니즘이 없어 큰 마감으로 이어집니다.
  4. 고정된 매개 변수들은 다양한 제품과 시장 환경에 적응력이 약합니다.
  5. 백테스트는 전략이 역사적인 데이터에만 테스트되기 때문에 과다 적합성 위험이 있습니다.

위험은 다음과 같은 최적화로 해결할 수 있습니다.

  1. 또한 단기 트렌드를 파악하기 위해 단기 MA를 추가합니다.
  2. 가짜 신호를 피하기 위해 볼륨 필터를 추가합니다.
  3. 트렌드 뒤따르는 지표를 추가하여 트렌드 역전 식별을 개선합니다.
  4. 단일 트레이드 손실을 제어하기 위해 동적 스톱 손실을 추가합니다.
  5. 적응력을 향상시키기 위해 매개 변수 최적화 방법을 사용하십시오.
  6. 다양한 시장 환경에서 견고성 테스트

최적화 방향

이 전략은 다음 측면에서 더 이상 최적화 될 수 있습니다.

  1. 최적의 매개 변수를 찾기 위해 워크 포워드 분석과 같은 방법을 사용하여 MA 기간 매개 변수를 최적화하십시오.

  2. 장기 및 단기 트렌드를 추적하기 위해 단기 MA를 추가합니다.

  3. MACD와 같은 트렌드 지표를 통합하여 트렌드 역전 식별을 개선합니다.

  4. 단일 거래 손실을 제어하기 위해 후속 스톱 손실과 같은 스톱 손실 메커니즘을 추가하십시오.

  5. 다양한 제품과 기간에 대한 견고성 테스트

  6. 매개 변수 적응 최적화를 위해 기계 학습을 사용하세요.

결론

이동 평균 추적 전략은 단순하고 실용적인 트렌드 추적 전략이다. 그것은 명확한 논리를 가지고 있으며 트렌드를 포착하기 위해 구현하기 쉽습니다. 그러나 그것은 또한 단기 수정과 약한 위험 통제에 민감하지 않은 것과 같은 몇 가지 약점을 가지고 있습니다. 우리는 더 견고하고 더 잘 매개 변수화되어 더 강력한 위험 관리로 전략을 최적화 할 수 있습니다. 전반적으로 이동 평균 추적 전략은 좋은 응용 가치를 가지고 있으며 양적 거래에서 중요한 트렌드 거래 개념입니다.


/*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)

더 많은