INNER CODE UNIT · Python
acfs
jialuechen/flowforge · flowforge/diagnostics/flow.py:24
acfs: dict[int, list[float]] = {lag: [] for lag in range(1, max_lag + 1)}
for _, g in orders.sort_values("period").groupby("asset"):
s = g["sign"].to_numpy(dtype=float)
if len(s) < min_orders:
continue
s = s - s.mean()
denom = float(np.dot(s, s))
if denom <= 0:
continue
for lag in range(1, min(max_lag, len(s) - 1) + 1):
acfs[lag].append(float(np.dot(s[:-lag], s[lag:]) / denom))
rows = [
{"lag": lag, "autocorr": float(np.mean(v)), "n_assets": len(v)}
for lag, v in acfs.items()
if v
]
return pd.DataFrame(rows)