INNER CODE UNIT · Python
sign_autocorrelation
jialuechen/flowforge · flowforge/diagnostics/flow.py:15
def sign_autocorrelation(
orders: pd.DataFrame, max_lag: int = 20, min_orders: int = 10
) -> pd.DataFrame:
"""Per-lag autocorrelation of order signs, averaged across assets.
Expects the long-format order table of
:class:`flowforge.generate.OrderFlowSimulator` (columns ``asset``,
``period``, ``sign``). Returns columns ``lag, autocorr, n_assets``.
"""
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