Skip to content

v2.0.1 — Post-v2.0.0 hardening: honest backtest + audit-driven fixes

Latest

Choose a tag to compare

@Jcstack Jcstack released this 26 Jun 15:21
162f8ff

v2.0.1 — Post-v2.0.0 hardening: honest backtest + audit-driven fixes

⚠️ Simulation-only toy project. No live order routing. All outputs are not investment advice — see the disclaimer in the README.

A multi-agent code audit of the v2 stack drove a round of correctness fixes, honest validation, and de-duplication. The headline: the first out-of-sample backtest of the v2 signal/sizing stack — published with the candid result that it shows no demonstrated alpha vs buy-and-hold.

🔬 Honest validation (the highlight)

  • Out-of-sample backtest (docs/backtest-v2-results.md) — bridges the v2 signal/sizing stack into the A-share backtest engine (no look-ahead) and reports an equity curve, Sharpe, drawdown, and a buy-and-hold baseline over 2019–2024 (14 sector-diverse names). Result: +25.5% vs +351.7% buy-and-hold, 0/14 — the stack is a drawdown-limiter that caps trend upside, not an alpha engine. Reproduce with scripts/backtest_v2_universe.py. The machinery is real; the inputs are unproven, and now measured.
  • make demo — one-command offline backtest on a bundled sample (no Docker, API keys, or network).

🐛 Fixed

  • Risk gates that were no-opspreflight now reads the persisted circuit-breaker halt state (is_halted()) and enforces T+1 sellability; review_agent score cutoffs are named constants.
  • Bayesian likelihood derivationOutcomeTracker estimates genuine P(evidence | state) from conditional frequencies instead of mislabeling the hit-rate.
  • T+N outcome horizons use trading days (not calendar days), so T+1 after a Friday no longer lands on a weekend.

🧹 Changed / consolidated

  • Single source of truth for A-share constants (src/utils/ashare_constants.py).
  • Unified data-source health on one shared DataSourceRouter (the /admin view was previously empty).
  • Merged the two causal-chain engines into one (ImpactChainEngine → adapter over CausalChainConstructor); stock resolution and USD→gold kept lossless.
  • LLM-debate de-risked with an opt-in graceful-degradation path (default off).
  • Honest naming — Alpha158 → custom alpha factors; "causal chains" → rule-based templates; IC annotated as an autocorrelation proxy.
  • Removed dead code and a no-op calibration dimension.

Quality

All external deps mocked in unit tests; full unit suite passes, ruff/format clean, CI green throughout. Every change shipped through the standard branch → PR → CI flow.

Full changelog: see CHANGELOG.md · grounded in ROADMAP.md.