blob: 502f1ceca448b46630b13abe181e0e8aac462136 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
"""Volume indicators: Volume SMA, Volume Ratio, OBV."""
import pandas as pd
import numpy as np
def volume_sma(volumes: pd.Series, period: int = 20) -> pd.Series:
"""Simple moving average of volume."""
return volumes.rolling(window=period).mean()
def volume_ratio(volumes: pd.Series, period: int = 20) -> pd.Series:
"""Current volume as ratio of average volume. >1 = above average."""
avg = volume_sma(volumes, period)
return volumes / avg.replace(0, float("nan"))
def obv(closes: pd.Series, volumes: pd.Series) -> pd.Series:
"""On-Balance Volume."""
direction = np.sign(closes.diff())
direction.iloc[0] = 0
return (direction * volumes).cumsum()
|