리소스 로딩... 로딩...

듀얼 헐 이동 평균 크로스오버 양적 전략

저자:차오장, 날짜: 2024-11-29 16:53:05
태그:HMAMAWMA

img

전반적인 설명

이 전략은 헐 이동 평균 (Hull Moving Average, HMA) 의 크로스오버 신호를 기반으로 합니다. 서로 다른 기간을 가진 두 개의 HMA 라인이 서로 횡단할 때 거래 신호를 생성합니다. HMA는 가중 이동 평균 (WMA) 의 특별한 조합을 통해 지연을 줄여 더 빠르고 부드러운 시장 트렌드 신호를 제공하는 고급 이동 평균 지표입니다.

전략 원칙

전략의 핵심은 다른 기간의 HMA 크로스오버를 사용하여 시장 트렌드 역전 지점을 캡처하는 데 있습니다. HMA 계산은 세 단계로 이루어집니다: 먼저 반기 WMA를 계산하고, 그 다음 전체 기간 WMA를 계산하고, 마지막으로 첫 두 WMA의 특수 조합을 사용하여 원래 기간의 제곱근에 해당하는 기간을 가진 다른 WMA를 계산합니다. 빠른 HMA (전환 9 기간) 이 느린 HMA (전환 16 기간) 을 넘을 때 구매 신호가 생성되며, 빠른 HMA가 느린 HMA (전환 16 기간) 을 넘을 때 판매 신호가 생성됩니다.

전략적 장점

  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)

관련

더 많은