Series¶
Time-series construction for the metrics pipeline. This module builds the CanonicalSeries -- the foundational data structure from which all metrics are derived.
Canonical Series¶
The three core series are:
daily_gains: Sum ofgain_normalizedper day, indexed by date.cumulative_gains: Running cumulative sum ofdaily_gains.drawdowns:cumulative_gains - cumulative_gains.cummax()(always <= 0).
If the input DataFrame contains an is_supply column, supply-only and demand-only breakdowns are computed in parallel.
Rolling Periods¶
The rolling_period_sums function computes rolling-window sums over the daily gains series, used by the calculator for worst-N-day loss and rolling return metrics.
Canonical Series - Time series construction for metrics computation.
Classes¶
CanonicalSeries
dataclass
¶
CanonicalSeries(daily_gains: Series, cumulative_gains: Series, drawdowns: Series, daily_gains_supply: Series | None = None, daily_gains_demand: Series | None = None, cumulative_gains_supply: Series | None = None, cumulative_gains_demand: Series | None = None, drawdowns_supply: Series | None = None, drawdowns_demand: Series | None = None)
Container for canonical daily time series used in metrics computation.
Attributes: daily_gains: Series indexed by date with sum of gain_normalized per day cumulative_gains: Cumulative sum of daily_gains drawdowns: cumulative_gains - cumulative_gains.cummax() (always <= 0) daily_gains_supply: Optional series for supply (is_supply=True) gains daily_gains_demand: Optional series for demand (is_supply=False) gains cumulative_gains_supply: Optional cumulative sum of supply gains cumulative_gains_demand: Optional cumulative sum of demand gains drawdowns_supply: Optional drawdowns for supply drawdowns_demand: Optional drawdowns for demand
Functions¶
build_canonical_series
¶
build_canonical_series(df_std_filtered: DataFrame) -> CanonicalSeries
Build canonical time series from a filtered standardized DataFrame.
Args: df_std_filtered: Standardized DataFrame filtered to cleared trades only
Returns: CanonicalSeries with daily_gains, cumulative_gains, drawdowns, and optional supply/demand breakdown if 'is_supply' column exists
Steps: 1. Group by 'date', sum 'gain_normalized' -> daily_gains 2. Sort by date 3. cumulative_gains = daily_gains.cumsum() 4. drawdowns = cumulative_gains - cumulative_gains.cummax() 5. If 'is_supply' exists, compute supply/demand breakdown
Source code in src/progridpy/metrics/series.py
rolling_period_sums
¶
Compute rolling sums over a specified window.
Args: daily_gains: Series indexed by date window_days: Number of days in the rolling window
Returns: Series with rolling sums, index aligned to window end date. NaN values are present for the first (window_days - 1) entries.
Note: Uses min_periods=window_days to ensure full windows only.