Skip to content

v0.3.0 - State Statistics, simulate_weights & Single Data Path

Choose a tag to compare

@AlgorithmicMind AlgorithmicMind released this 15 Oct 20:09
· 2 commits to main since this release

Highlights v0.3.0

  • Typed regime statistics: LabelAssignment.to_statistics() returns one RegimeStatistics per regime (training-window moments). States that share a regime — the positive-drift guardrail under VOLATILITY/SHARPE — are combined with occupancy-weighted moments, mirroring how relabel_probabilities sums their posteriors; raw_states lists every member state, and return/volatility/Sharpe are None for a regime without weight. TelemetryPayload.state_statistics carries them, statistics_for(regime) looks one up, and WalkForwardFold.statistics holds each fold model's statistics.
  • describe() keeps one row per raw state (as in 0.2.0), sorted by ladder position.
  • Correct signing model: latest_telemetry uses the model and statistics of the fold that produced observation_date, instead of always the last fold.
  • simulate_weights: backtest any hand-supplied target-weight schedule under the same signal-lag, rebalancing and cost assumptions. run_backtest is reimplemented on it with numerically identical output (golden regression test).
  • Breaking (type consumers): BacktestResult.regimes and regime_metrics are optional (None when a weight path rather than a regime signal was simulated).
  • Fix: leading sessions whose confidence is below the floor now hold 100% CASH and earn the risk-free rate, instead of holding zero weights and earning nothing.
  • Breaking — single data path: the pipeline fetches through load_aligned_panel. The panel cache moves from artifacts_dir/cache to data.cache_dir, panels are reused within data.cache_ttl_hours (the TTL is no longer forced to 0) and alignment anchors on data.calendar_anchor; force_refresh=True restores always-refetch.
  • RankingMethod.SHARPE docstring now states it is no longer any classifier's default (hmm/hamilton → STRESS, gmm → VOLATILITY).

Full details in the CHANGELOG.