Python으로 맥긴리 다이나믹(McGinley Dynamic) 구현하기

맥긴리 다이나믹(McGinley Dynamic)은 기술 분석에서 주로 사용되는 지표 중 하나로, 가격의 평균을 계산하여 현재의 시장 흐름을 더 정확하게 반영하려는 방법입니다. 이 지표는 이동 평균(MA)의 단점을 보완하고자 개발되었습니다. 일반적인 이동 평균은 고정된 기간 동안의 평균을 계산하는데, 그 기간을 지나치게 짧게 설정하면 노이즈에 민감하고, 길게 설정하면 시장 변화를 반영하기 느립니다. 맥긴리 다이나믹은 이러한 단점을 해결하려고 하며, 시장의 변동성에 맞춰 자동으로 기간을 조정하는 방식으로 작동합니다.

pip install pandas ccxt pinetopy numpy

import pandas as pd
import ccxt
import pinetopy as pp
import numpy as np

# 예시) 비트코인 선물 BTCUSDT, 1시간 봉 
bnb = ccxt.binance({'options': { 'defaultType': 'future' }}) 
ohlcv = bnb.fetch_ohlcv(symbol="BTC/USDT", timeframe="1h", limit=500)
df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
df['time'] = pp.kst(df['time'])

def main(df, length=14):
    mg = np.zeros(len(df))
    mg[0] = df['close'].iloc[0]
    
    for i in range(1, len(df)):
        s, m = df['close'].iloc[i], mg[i-1]
        mg[i] = m + (s - m) / (length * (s / m) ** 4) if m else s
    
    df['mg'] = mg.round(1)
    return df

print(main(df, length=14)) # 트레이딩뷰 기본 설정

트레이딩뷰 차트와 비교