Python으로 머니 플로우 인덱스(MFI) 구현하기

머니 플로우 인덱스 지표(MFI)는 매수 및 매도 압력을 측정하기 위한 기술적 분석에 사용되는 도구입니다. 이는 가격과 거래량을 모두 분석하여 이루어집니다. MFI는 계산을 통해 값을 생성한 다음 0-100 범위 내에서 움직이는 선으로 표시하여 오실레이터로 만듭니다. MFI가 상승하면 매수 압력이 증가했음을 나타냅니다. 하락하면 매도 압력이 증가하고 있음을 나타냅니다. 머니 플로우 지수는 과매수 및 과매도 상태, 다이버전스, 실패 스윙 등 여러 가지 신호를 생성할 수 있습니다.

– 출처: 트레이딩뷰

pip install pandas ccxt numpy

import pandas as pd
import ccxt
import numpy as np

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


def MFI(length=14):
    ohlcv = bnb.fetch_ohlcv(symbol="BTC/USDT", timeframe="1h", limit=500)
    df = pd.DataFrame(ohlcv, columns=['time', 'open', 'high', 'low', 'close', 'volume'])
    
    df['hlc3'] = (df['high'] + df['low'] + df['close']) / 3
    delta = df['hlc3'].diff()

    upper = (df['volume'] * np.where(delta > 0, df['hlc3'], 0)).rolling(window=length).sum()
    lower = (df['volume'] * np.where(delta < 0, df['hlc3'], 0)).rolling(window=length).sum()

    df['MFI'] = 100.0 - (100.0 / (1.0 + (upper / lower)))
    df['MFI'] = df['MFI'].round(2)

    return df

print(MFI(length=14)) # 트레이딩뷰 디폴트 값

트레이딩뷰 차트와 비교