
이중 헐 이동 평균 (Hull Moving Average, HMA) 은 헐 이동 평균 (Hull Moving Average, HMA) 에 기반한 트렌드 추적 시스템이다. 이 전략은 표준 HMA와 평평한 버전인 HMA (HMA3) 의 관계를 사용하여 시장의 추세 변화를 식별하고, 황새와 곰 시장 조건에서 지속 및 반전의 높은 확률을 생성한다.
이 전략의 핵심 원칙은 두 가지 다른 계산 방법의 헐 이동 평균 사이의 상대적 위치와 그 교차 상황을 비교하는 것이다. 구체적으로 구현하는 방법은 다음과 같다:
표준 HMA ((변수 a): 윌리엄 헐 (William Hull) 이 개발한 원시 알고리즘을 사용하여 3단계 계산 과정을 통해 더 민감한 이동 평균을 구현합니다.
부드러운 HMA3 ((변수 b): 더 복잡한 부드러운 알고리즘을 사용하여 여러 WMA 조합을 통해 구현:
신호 생성 논리:
정책 실행 논리:
전략은 또한 트렌드 방향에 따라 변하는 이동 평균과 명확한 구매 신호 표시와 같은 시각적 구성 요소를 포함합니다. 이는 거래자가 시장 상태를 직관적으로 이해할 수 있도록 도와줍니다.
시장 소음을 줄이십시오: 쌍 HMA 시스템은 단기 가격 변동을 효과적으로 필터링하여 가짜 신호를 줄이면서 실제 트렌드 변동에 대한 감수성을 유지합니다. 표준 HMA는 기존의 이동 평균보다 더 민감하며, 평형 HMA와 결합하면 신호 품질이 더욱 향상됩니다.
트렌드 조기 식별: 헐 이동 평균 알고리즘의 특성으로 인해, 이 전략은 전통적인 이동 평균보다 더 일찍 트렌드 변화를 식별하여 더 나은 진입 시간을 제공합니다.
명확한 시각적 피드백: 전략은 직관적인 컬러 코딩을 제공합니다 (소자 시장은 녹색이고, 곰 시장은 빨간색) 그리고 거래 신호 표시를 통해 거래자가 시장 상태를 신속하게 평가할 수 있습니다.
완전한 거래 메커니즘: 전략은 신호를 제공하는 것뿐만 아니라 전체 포지션 관리 논리를 포함하고 있으며, 포지션을 자동으로 처리하여 진정한 자동화 거래를 실현합니다.
유연한 매개 변수 구성: 사용자는 개인 선호도와 시장 특성에 따라 HMA 길이와 가격 원천을 조정할 수 있으며, 이는 다른 거래 스타일과 시장 환경에 적합합니다.
계산 효율성: 복잡한 다중 지표 시스템과 비교할 때, 이 전략은 비교적 간단한 수학 계산을 사용하여 과잉 적합의 위험을 줄이면서도 실행 효율성을 유지한다.
흔들리는 시장의 가짜 신호: 쌍 HMA 시스템은 소음을 줄였음에도 불구하고, 명확한 추세가 없는 가로 수평 시장에서, 연속적인 손실 거래로 이어지는 빈번한 교차 신호가 발생할 수 있습니다. 변동률 지표 또는 추세 강도 확인과 같은 추가 필터링 조건을 추가하는 것을 고려할 수 있습니다.
지연성 문제: HMA는 전통적인 이동 평균보다 지연성이 작지만, 이동 평균을 기반으로 한 모든 시스템에는 지연성이 존재하며, 이는 극도로 변동하는 시장에서 최적의 진입 지점이나 출구 지점을 놓칠 수 있습니다.
변수 감수성: 전략 성능은 선택된 HMA 길이 변수에 크게 의존하며, 다른 시장과 시간 프레임에 따라 다른 최적의 변수가 필요할 수 있습니다. 특정 시장 환경에 대한 최적의 변수를 결정하기 위해 포괄적인 재검토를 수행하는 것이 좋습니다.
스톱 메커니즘의 부재: 현재 전략은 통합된 스톱 기능을 구현하지 않으며, 트렌드가 갑자기 역전되면, 큰 회수로 이어질 수 있다. ATR 기반의 스톱 또는 시간 스톱과 같은 스톱 조건을 추가하는 것이 고려되어야 한다.
단일 지표 의존: 전략은 HMA 지표에만 의존하고, 다차원 시장 분석이 부족하며, 특정 시장 조건에서 좋지 않을 수 있습니다. 전략의 안정성을 높이기 위해 운동량 지표 또는 변동률 지표와 같은 다른 유형의 지표와 결합하는 것을 고려하십시오.
트렌드 필터를 추가: ADX ((평균 방향 지수) 와 같은 추가적인 트렌드 확인 지표를 도입하여 강력한 트렌드가 확인되었을 때만 거래를 수행하고横盘 시장의 빈번한 거래를 피하십시오. 구현 방법은 다음과 같습니다: ADX 값이 어떤 하위 값 (예: 25) 보다 크면 HMA 교차 신호를 고려하십시오.
통합 변동율 적응 메커니즘: 시장 변동율에 따라 HMA 파라미터를 조정하여 높은 변동율 환경에서 더 긴 주기를 사용하고 낮은 변동율 환경에서 더 짧은 주기를 사용합니다. 이것은 ATR을 계산하여 HMA 길이 파라미터에 매핑하여 구현할 수 있습니다.
스마트 스톱 메커니즘을 구현: ATR 기반의 스톱을 추가하거나 HMA의 역동적인 스톱을 추적하는 것과 같은 모바일 스톱을 사용하여 이미 수익을 보호하고 잠재적 인 손실을 제한하십시오.
거래량 확인을 도입: 거래량 지표를 신호 생성 논리에 포함하고, 거래량이 증가함에 따라 구매 신호를 요구하여 신호의 신뢰성을 강화합니다. 거래량이 n 일 평균보다 높지 않은지 확인할 수 있습니다.
포지션 관리를 최적화: 고정된 비율 투입이 아닌 리스크에 기반한 포지션 크기를 조정할 수 있다. ATR에 따라 각 거래의 리스크 을 계산할 수 있어 각 거래의 리스크가 일치하도록 한다.
시간 필터를 추가: 시장의 시간적 특성을 고려하여 아시아 점심 시간이나 미국 비농업 데이터 발표 전후의 높은 변동 기간과 같은 알려진 저효율 거래 시간을 피하십시오.
추가된 회귀 입구 논리: 트렌드 방향을 확인한 후, 교차점에서 직접 입구하는 대신, 작은 회귀를 기다린다면, 더 나은 입구 가격을 얻을 수 있다. 이것은 가격과 HMA 사이의 거리를 탐지함으로써 실현될 수 있다.
이중 헐 이동 평균의 교차 운동량을 측정하는 전략은 두 가지 계산 방법의 HMA 지표 사이의 관계를 이용한 정교하게 설계된 트렌드 추적 시스템으로, 명확한 다공간 신호를 제공합니다. 표준 HMA와 평형 HMA3의 상대적 위치와 교차 상황을 비교함으로써, 전략은 시장의 잡음을 효과적으로 줄일 수 있으며, 가격 동력에 대한 민감성을 유지합니다. 전략의 장점은 명확한 신호 생성 논리, 직관적인 시각적 피드백 및 완전한 거래 메커니즘입니다.
그러나, 이 전략은 또한 위기 시장의 잘못된 신호가 많고, 파라미터의 민감도가 높고, 스톱 메커니즘이 부족한 등의 위험에 직면해 있습니다. 트렌드 필터를 추가하고, 변동률 적응 메커니즘을 통합하고, 스마트 스톱을 구현하고, 거래량 확인을 도입하는 등의 최적화 방향을 통해 전략의 안정성과 수익성을 크게 향상시킬 수 있습니다. 무엇보다도, 거래자는 자신의 위험 수용 능력과 거래 목표에 따라 전략에 대한 전체적인 피드백과 파라미터를 최적화하여 특정 시장 환경에 가장 적합한 구성을 찾아야합니다.
전반적으로, 이것은 중기 및 장기 동향을 추적하는 거래자가 사용할 수있는 기본적이고 잘 확장 가능한 양적 전략 프레임워크이며, 더 복잡한 거래 시스템의 핵심 구성 요소로 사용할 수 있습니다.
/*backtest
start: 2024-08-04 00:00:00
end: 2025-08-02 08:00:00
period: 2d
basePeriod: 2d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=6
strategy("HMA Strat", shorttitle="HMAstrat", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=1)
// === INPUTS ===
length = input.int(24, minval=1, title="HMA Length")
src = input.source(hl2, "Source")
showSignals = input.bool(true, "Show Buy/Sell Signals")
// === FUNCTIONS ===
hma(_src, _length) =>
wma1 = ta.wma(_src, _length)
wma2 = ta.wma(_src, _length / 2)
rawHMA = 2 * wma2 - wma1
ta.wma(rawHMA, math.round(math.sqrt(_length)))
hma3(_src, _length) =>
p = _length / 2
ta.wma(ta.wma(close, p / 3) * 3 - ta.wma(close, p / 2) - ta.wma(close, p), p)
// === HMA CALCULATIONS ===
a = hma(src, length)
b = hma3(src, length)
// === COLOR LOGIC ===
isBull = b > a
colorLine = isBull ? color.lime : color.red
fillColor = color.new(colorLine, 80)
// === PLOTTING ===
p1 = plot(a, color=colorLine, linewidth=1)
p2 = plot(b, color=colorLine, linewidth=1)
fill(p1, p2, color=fillColor)
// === SIGNALS ===
crossUp = b > a and b[1] < a[1]
crossDown = a > b and a[1] < b[1]
plotshape(showSignals and crossUp, title="Buy Signal", location=location.belowbar, style=shape.labelup, size=size.tiny, color=color.green, text="Buy")
plotshape(showSignals and crossDown, title="Sell Signal", location=location.abovebar, style=shape.labeldown, size=size.tiny, color=color.red, text="Sell")
// === STRATEGY LOGIC ===
// Close opposite position before opening a new one
if crossUp
strategy.close("Short")
strategy.entry("Long", strategy.long)
if crossDown
strategy.close("Long")
strategy.entry("Short", strategy.short)