OBV(On-Balance Volume)는 거래량을 이용하여 가격의 움직임을 분석하는 거래량 기반 지표입니다. 가격이 상승할 때 거래량을 더하고, 가격이 하락할 때 거래량을 빼는 방식으로 계산됩니다. 이를 통해 매수/매도의 힘을 파악하고, 향후 가격 움직임을 예측하는 데 활용됩니다.
OBV 구현
바이낸스 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를 파이썬으로 변환하여 활용하면 백테스팅 및 자동 매매에 유용하게 사용할 수 있습니다.