Python으로 Hull 이동평균 (HMA) 구현하기

HMA(Hull Moving Average)는 알랜 헐(Alan Hull)이 개발한 이동평균선으로, 기존 이동평균보다 더 부드러우며 효율성에 초점을 맞춘 지표입니다.

1️⃣ WMA(n/2) 값 구하기 – 먼저, n을 절반(n/2) 길이로 줄인 가중 이동평균(WMA)을 구합니다.
2️⃣ 2배 가중 & WMA(n) 값 빼기 – WMA(n/2) 값을 2배로 증가시킵니다. 그리고 전체 길이(n)로 구한 WMA 값을 뺍니다.
3️⃣ √n 기간으로 WMA 적용 – 위에서 구한 데이터에 WMA를 적용하는데, 기간을 √n(제곱근)로 설정합니다.

pip install pandas ccxt numpy

import pandas as pd
import ccxt
import numpy as np

# 예시) 바이낸스 선물 BTCUSDT, 1시간 봉 
bnb = ccxt.binance({'options': { 'defaultType': 'future' }}) 

def wma(series, length):
    weights = np.arange(1, length + 1)
    return series.rolling(length).apply(lambda x: np.dot(x, weights) / weights.sum(), raw=True)

def HMA(length=9):
    ohlcv = bnb.fetch_ohlcv(symbol="BTC/USDT", timeframe="1h", limit=500)
    df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
    
    wma_half = wma(df['close'], int(length / 2))
    wma_full = wma(df['close'], length)
    df['HMA'] = wma(2 * wma_half - wma_full, int(np.sqrt(length))).round(1)

    return df

print(HMA(length=9)) # 트레이딩뷰 디폴트 값

트레이딩뷰 차트와 비교