이동 평균에 기초한 양적 거래 전략

저자:차오장, 날짜: 2024-01-16 17:37:13
태그:

img

전반적인 설명

이 전략은 서로 다른 사이클의 이동 평균의 황금 십자 및 죽은 십자 기반의 거래 신호를 생성합니다. 이것은 전형적인 트렌드 추종 전략에 속합니다. 중량 이동 평균 (WMA) 및 적응 이동 평균 (ALMA) 이 주로 사용됩니다.

전략 논리

이 전략은 먼저 ma1이 짧은 주기를 가지고 ma2가 긴 주기를 가진 가격의 중장기 및 단기 이동 평균, ma1과 ma2를 계산합니다. 그 다음 ma1과 ma2 사이의 차이를 ma3로 계산하고 ma3의 평형 이동 평균 ma4를 계산합니다. ma3가 ma4를 위로 넘을 때 구매 신호가 생성됩니다. 하향으로 넘을 때 판매 신호가 생성됩니다.

따라서, ma3는 가격의 중장기 트렌드를 반영하고, ma4는 ma3에서 약간의 소음을 필터하여 더 신뢰할 수있는 거래 신호를 형성합니다. ma1과 ma2의 주기는 매개 변수 maLen에 의해 설정됩니다. 사용자는 다른 시장에 대한 최상의 설정을 달성하기 위해 매개 변수를 최적화 할 수 있습니다.

장점

이 전략의 장점은 다음과 같습니다.

  1. ALMA와 WMA를 이용해서 시장 변화에 더 잘 적응할 수 있습니다.
  2. 거래 신호를 더 신뢰할 수 있도록 다주기 가격 평균을 적용합니다.
  3. 조정 가능한 매개 변수는 다양한 시장에 최적화 될 수 있으며 광범위한 적용이 가능합니다.
  4. 전략 논리는 간단하고 쉽게 구현할 수 있습니다.
  5. 트렌딩 시장과 마이너스 시장에서 모두 좋은 성과를 낼 수 있습니다.

위험 과 해결책

이 전략에는 몇 가지 위험도 있습니다.

  1. 신호가 불분명하고 변동적인 시장 조건으로 지연 될 수 있습니다. 이것은 이동 평균의 주기와 매개 변수를 최적화하여 해결할 수 있습니다.
  2. 순수한 트렌드를 따르는 전략으로서, 범위 제한 시장에서 손실로 이어질 수 있습니다. 필터로 다른 지표를 추가 할 수 있습니다.
  3. 부적절한 매개 변수 설정은 극히 짧은 주기로 인해 과도한 거래로 이어질 수 있습니다. 적절한 매개 변수를 신중하게 선택해야합니다.

최적화

전략은 다음 측면에서 최적화 될 수 있습니다:

  1. LMA, WMA 등과 같은 더 많은 종류의 이동 평균을 테스트합니다.
  2. 변동성, 가격 채널 등에 기반한 스톱 로스 메커니즘을 추가합니다.
  3. 매개 변수 최적화를 위한 멀티 타임프레임 분석을 채택한다.
  4. 자동 매개 변수 최적화를 위한 기계 학습 알고리즘을 강화합니다.

결론

이 전략은 이동 평균의 황금 십자 및 죽은 십자 기반의 거래 신호를 생성합니다. ALMA 및 다중 주기 가격 평균화를 사용하여 신호가 더 정확하고 신뢰할 수 있습니다. 조정 가능한 매개 변수는 널리 적용되도록합니다. 또한 논리는 간단하고 명확하며 트렌딩 시장에서 잘 수행됩니다. 따라서 실용적 가치가 높습니다.


/*backtest
start: 2024-01-08 00:00:00
end: 2024-01-15 00:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Oracle Move Strategy", overlay=true)

maLen = input(30, "ma period")
mode =  input(defval="wma", options=["alma", "ema", "wma"])
price = close

ma(src, len) =>
     mode=="alma"  ? alma(src, len, 0.85, 6) :
     mode=="ema"? ema(src, len) : 
     wma(src, len)
    

ma1 = ma(price, floor(maLen / 2))
ma2 = ma(price, maLen)
ma3 = 2.0 * ma1 - ma2
ma4 = ma(ma3, floor(sqrt(maLen)))

//plot(ma1, color = red)
//plot(ma2, color = green)
plot(ma3, color = blue)
plot(ma4, color = orange)


mafast = ma3
maslow = ma4

if (crossover(mafast, maslow))
    strategy.entry("MA2CrossLE", strategy.long, comment="MA2CrossLE")

if (crossunder(mafast, maslow))
    strategy.entry("MA2CrossSE", strategy.short, comment="MA2CrossSE")

//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

더 많은