Hull 이동 평균 양적 전략과 결합된 이중 이동 평균 교차

HMA MA WMA
생성 날짜: 2024-11-29 16:53:05 마지막으로 수정됨: 2024-11-29 16:53:05
복사: 2 클릭수: 514
avatar of ChaoZhang ChaoZhang
1
집중하다
1617
수행원

Hull 이동 평균 양적 전략과 결합된 이중 이동 평균 교차

개요

이 전략은 헐 이동 평균 (Hull Moving Average, HMA) 의 교차 신호를 기반으로 거래한다. HMA는 고급 이동 평균 지표로, WMA의 특수한 조합을 가중화하여 뒤처짐을 줄이고, 더 빠르고 부드러운 시장 추세 신호를 제공합니다.

전략 원칙

이 전략의 핵심은 다른 주기 HMA의 교차점을 활용하여 시장의 흐름을 포착하는 전환점이다. HMA의 계산 과정은 세 단계로 이루어져 있다: 먼저 반기 WMA를 계산하고, 그 다음에는 전체 주기 WMA를 계산하고, 마지막으로 이 두 WMA의 특수한 조합을 통해 원주기 WMA의 제곱근으로 한 주기를 다시 계산한다. 빠른 HMA (기본 9주기) 가 느린 HMA (기본 16주기) 를 상향으로 통과하면 다중 신호가 발생하며, 빠른 HMA가 느린 HMA를 하향으로 통과하면 공백 신호가 발생한다.

전략적 이점

  1. 신호 반응 속도: HMA는 특별한 계산 방법을 통해 전통적인 이동 평균의 지연성을 크게 줄여 시장 추세의 변화를 더 빨리 포착할 수 있다.
  2. 노이즈 필터링: 두 개의 평행선의 교차 확인을 통해 시장의 노이즈를 효과적으로 필터링하여 거짓 신호를 줄일 수 있습니다.
  3. 매개 변수 유연성: 전략은 빠른 느린 선의 주기 매개 변수를 조정하여 다른 시장 환경에 적응 할 수 있습니다.
  4. 시각화 명확성: 전략은 분석 및 최적화를 위해 차트에 두 개의 평균선과 거래 신호를 명확하게 표시합니다.

전략적 위험

  1. 변동성 시장 위험: 변동성 시장에서, 자주 교차하는 것은 과도한 거래와 연속적인 손실을 초래할 수 있습니다.
  2. 뒤떨어진 위험: HMA는 전통적인 평균선보다 덜 뒤떨어져 있지만, 여전히 약간의 뒤떨어진 부분이 있으며, 최적의 입구 지점을 놓칠 수 있습니다.
  3. 변수 민감성: 다른 변수 조합은 매우 다른 거래 결과를 초래할 수 있으며, 신중한 변수 최적화가 필요합니다.
  4. 가짜 브레이크 위험: 시장에서 가짜 브레이크가 발생할 수 있으며, 이는 잘못된 거래 신호로 이어질 수 있습니다.

전략 최적화 방향

  1. 트렌드 필터를 도입: ADX 또는 트렌드 강도 지표를 추가하여 트렌드가 명확한 경우에만 거래하십시오.
  2. 최적화 중지 메커니즘: ATR 또는 변동률 기반의 중지 전략과 같은 동적 중지 설계.
  3. 거래 확인 조건을 추가: 합성 수량, 동력 지표 등이 보조 확인 신호로.
  4. 변수 적응: 시장의 변동성에 기반한 역동적인 변수 조정 메커니즘을 개발한다.
  5. 리스크 관리 최적화: 포지션 관리 및 자금 관리 모듈 추가.

요약하다

이것은 HMA 크로스 기반의 양적 거래 전략으로, 전통적인 이동 평균의 지연을 줄임으로써 보다 적시에 거래 신호를 제공합니다. 전략은 간결하고 이해하기 쉽고 구현되지만 실제 적용에서는 시장 환경에 대한 적응성과 위험 관리에 주의를 기울입니다. 이 전략은 지속적인 최적화와 개선으로 인해 안정적인 거래 시스템으로 발전할 잠재력이 있습니다.

전략 소스 코드
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-28 00:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Hull Moving Average Crossover", overlay=true)


fastLength = input.int(9, "Fast HMA Length", minval=1)
slowLength = input.int(16, "Slow HMA Length", minval=1)


hma(src, length) =>
    wma1 = ta.wma(src, length / 2)
    wma2 = ta.wma(src, length)
    ta.wma(2 * wma1 - wma2, math.floor(math.sqrt(length)))


fastHMA = hma(close, fastLength)
slowHMA = hma(close, slowLength)


plot(fastHMA, color=color.blue, title="Fast HMA")
plot(slowHMA, color=color.red, title="Slow HMA")


longCondition = ta.crossover(fastHMA, slowHMA)
shortCondition = ta.crossunder(fastHMA, slowHMA)


if (longCondition)
    strategy.entry("Long", strategy.long)

if (shortCondition)
    strategy.entry("Short", strategy.short)


plotshape(longCondition, style=shape.triangleup, location=location.belowbar, color=color.green, size=size.small)
plotshape(shortCondition, style=shape.triangledown, location=location.abovebar, color=color.red, size=size.small)