Python으로 MACD 지표 구현하기

MACD는 Moving Average Convergence Divergence의 약자로 장단기 이동평균선간의 차이를 이용하여 매매신호를 포착하려는 기법으로 제럴드 아펠(Gerald Appel)에 의해 개발되었다. 오실레이터는 토마스 아스프레이에 의해 추가되었다.

나무위키: https://namu.wiki/w/MACD

MACD : 12일 지수이동평균 – 26일 지수이동평균
시그널 : MACD의 9일 지수이동평균 (트레이딩뷰 디폴트 값: 9)
오실레이터 : MACD값 – 시그널값

pip install pandas ccxt

import pandas as pd
import ccxt

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

def MACD(fast_length=12, slow_length=26, signal_length=9):
    ohlcv = bnb.fetch_ohlcv(symbol="BTC/USDT", timeframe="1h", limit=500)
    df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
    
    _df = df.copy()
    _df['fast'] = _df['close'].ewm(span=fast_length, adjust=False).mean().round(1)
    _df['slow'] = _df['close'].ewm(span=slow_length, adjust=False).mean().round(1)
    df['MACD'] = _df['fast'] - _df['slow']
    df['signal'] = df['MACD'].ewm(span=signal_length, adjust=False).mean().round(1)
    df['histogram'] = df['MACD'] - df['signal']
    
    return df

print(MACD(fast_length=12, slow_length=26, signal_length=9)) # 트레이딩뷰 디폴트 값

트레이딩뷰 차트와 비교