이동평균을 기반으로 한 양적 거래 전략


생성 날짜: 2024-01-16 17:37:13 마지막으로 수정됨: 2024-01-16 17:37:13
복사: 0 클릭수: 711
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

이동평균을 기반으로 한 양적 거래 전략

개요

이 전략은 서로 다른 주기의 이동 평균을 계산하고, 그들의 골드 포크와 데드 포크가 거래 신호를 형성하는 것을 판단하여, 전형적인 트렌드 추적 전략에 속한다. 주로 가중 이동 평균 WMA와 적응 이동 평균 ALMA를 사용한다.

전략 원칙

이 전략은 우선 가격의 중장기 이동 평균 ma1과 ma2를 계산하는데, ma1의 주기가 짧고, ma2의 주기가 길다. 그 다음에는 ma1과 ma2의 차이를 계산하고, ma3에 대해 평평한 이동 평균 ma4를 계산한다. ma3 위에 ma4를 통과하면 구매 신호가 발생하고, 아래로 통과하면 판매 신호가 발생한다.

이렇게, ma3는 가격의 중장기 트렌드 방향을 반영하고, ma4는 ma3의 일부 노이즈를 필터링하여, 보다 신뢰할 수 있는 거래 신호를 형성한다. ma1과 ma2의 주기율은 파라미터 maLen을 통해 설정되며, 사용자는 서로 다른 시장 조정 사이클에 따라 최적의 파라미터 조합을 얻을 수 있다.

전략적 이점

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

  1. 적응형 이동 평균 ALMA와 가중 이동 평균 WMA를 사용하여 시장 변화에 더 잘 적응할 수 있다.

  2. 다주기 가격 평균을 적용하여 거래 신호를 더욱 신뢰하게 한다.

  3. 매개 변수는 조정할 수 있으며, 사용자가 다른 시장에 대해 최적화 할 수 있으며, 적용 범위는 넓다.

  4. 전략은 명확하고 이해하기 쉽고, 실행하기 쉽습니다.

  5. 트렌드형 시장과 변동형 시장 모두에서 좋은 효과를 얻을 수 있다.

위험과 해결

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

  1. 급격하게 변하는 상황에서, 이동 평균 전략은 거래 신호의 불확실성, 지연 등의 문제를 일으킬 수 있다. 이동 평균 주기 및 파라미터를 조정하여 최적화 할 수 있다.

  2. 순수 트렌드 추적 전략으로, 충격적 평정 단계에서 손실이 발생할 수 있습니다. 다른 지표와 결합하여 필터링 조건으로 사용할 수 있습니다.

  3. 매개 변수 설정이 잘못되면 과도한 거래가 발생할 수 있습니다. 적절한 매개 변수를 신중하게 선택하십시오.

전략 최적화

이 전략은 다음과 같은 부분에서 최적화될 수 있습니다.

  1. 더 많은 종류의 이동 평균을 테스트합니다. 예를 들어, 선형 이동 평균, 가중 이동 평균 등이죠.

  2. 변동률, 가격 통로 등의 지표에 기반한 손실 제도를 추가한다.

  3. 여러 시간 주기의 분석과 함께 롤링 최적화 파라미터를 사용한다.

  4. 기계 학습 알고리즘을 추가하여 매개 변수의 자동 최적화를 구현한다.

요약하다

이 전략은 이동 평균의 금叉死叉을 기반으로 거래 신호를 형성한다. 적응된 이동 평균과 다중 시간 주기 가격 평균을 적용하여 신호를 더 정확하고 신뢰할 수 있게 한다. 이 전략의 매개 변수는 조정 가능하며, 적용 범위는 넓고, 아이디어는 간단하고 명확하며, 트렌드 시장에서 효과가 좋으며, 높은 실전 가치가 있다.

전략 소스 코드
/*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)