Overview
This patch release corrects grouped financial calculations, aligns pandas, Polars, and cuDF backend semantics, and restores documented benchmark-dependent risk metrics.
Highlights
- Isolates FIP, ADX, and rolling-risk calculations at group boundaries.
- Fixes Polars lazy-callback binding and warm-up parity for FIP and QSM momentum.
- Uses exact QSM lookbacks and consistent population volatility across engines.
- Aligns ADX smoothing and RSI zero-loss behavior across backends.
- Standardizes Sortino downside deviation and restores Treynor and Information Ratio calculations.
- Treats downside variances at floating-point precision as zero, preventing older Polars versions from producing extremely large Sortino ratios for windows without downside returns.
- Adds pandas support for multiple grouping columns in ATR, Bollinger Bands, EWMA volatility, Hurst exponent, QSM, and rolling-risk metrics.
- Adds regression coverage for group isolation, engine parity, benchmark metrics, no-downside Sortino windows, and multi-column grouping.
Compatibility
There are no public API changes. Corrected quantitative outputs can differ from 2.5.0 where previous calculations leaked across groups, used inconsistent backend formulas, or interpreted floating-point rolling residue as downside risk.
Verification
- 512 tests passed with Polars 1.35.1.
- Sortino regressions passed with the locked Polars 1.21.0 release.
- Poetry metadata validation passed.
- Resolves #318.
Full Changelog: v2.5.0...v2.5.1