summaryrefslogtreecommitdiff
path: root/services/strategy-engine/strategies/indicators/volume.py
diff options
context:
space:
mode:
Diffstat (limited to 'services/strategy-engine/strategies/indicators/volume.py')
-rw-r--r--services/strategy-engine/strategies/indicators/volume.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/services/strategy-engine/strategies/indicators/volume.py b/services/strategy-engine/strategies/indicators/volume.py
new file mode 100644
index 0000000..323d427
--- /dev/null
+++ b/services/strategy-engine/strategies/indicators/volume.py
@@ -0,0 +1,21 @@
+"""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()