Python으로 온 밸런스 볼륨(OBV) 구현하기

OBV(On-Balance Volume)는 거래량을 이용하여 가격의 움직임을 분석하는 거래량 기반 지표입니다. 가격이 상승할 때 거래량을 더하고, 가격이 하락할 때 거래량을 빼는 방식으로 계산됩니다. 이를 통해 매수/매도의 힘을 파악하고, 향후 가격 움직임을 예측하는 데 활용됩니다.

바이낸스 API와 트레이딩뷰 데이터가 일치하지 않아서 이번에는 테스트 데이터로 구현해 보겠습니다.

pip install pandas numpy

import numpy as np
import pandas as pd

# OBV 값 포맷팅 (M/K 단위 변환)
def format_obv(value):
    if abs(value) >= 1_000_000:
        return f"{value / 1_000_000:.2f}M"
    elif abs(value) >= 1_000:
        return f"{value / 1_000:.2f}K"
    else:
        return f"{value:.2f}"

data = {
    'close': [100, 102, 101, 103, 105],
    'volume': [1_500_000, 2_000_000, 1_200_000, 1_800_000, 2_500_000]
}

df = pd.DataFrame(data)
df['obv'] = (np.sign(df['close'].diff()).astype(float) * df['volume']).cumsum().apply(format_obv)

print(df[['close', 'volume', 'obv']])

OBV는 간단하지만 강력한 거래량 기반 추세 지표입니다. 트레이딩뷰의 Pine Script에서 구현된 OBV를 파이썬으로 변환하여 활용하면 백테스팅 및 자동 매매에 유용하게 사용할 수 있습니다.