APEX backtest · Walk-forward CV · Synthetic
We can't show real performance numbers yet — the engine needs 30 days of price data after each call before we can grade it (full numbers land 16 May 2026). While we wait, here's a proof the math is honest: we make up a fake universe of stocks where we KNOW the answer ahead of time, then run our cross-validation on it. If the math finds the fake signal at the right strength, you can trust it'll find a real one too.
The production walk-forward cross-validation runner needs 30+ days of realised forward returns before it can produce meaningful out-of-sample IC. We're still accumulating that data (calibration window matures around 16 May 2026). Until then this page demonstrates the math is provably correct: we plant a known alpha into a synthetic universe and verify the runner recovers it.
Three configurations: a strong-edge case (planted ρ ≈ 0.40), a modest-edge case (ρ ≈ 0.15 — typical hedge-fund factor), and a pure-noise control (ρ = 0). The recovered mean OOS IC should bracket each planted value, with the noise control cleanly near zero.
Three rounds: strong fake signal, modest fake signal, and pure noise (no signal). The math should find each fake at roughly the strength we planted, and find nothing in the noise. If it does, your real-money calls are running on the same correct math.
Three independent factors, each carrying a modest planted edge. The composite blend (equal-weight) harvests the union of edges — you should see composite IC strictly above the average of the three single-factor ICs and at least competitive with the best individual factor.
| momentum | value | sector | |
|---|---|---|---|
| momentum | 1.00 | -0.01 | -0.05 |
| value | -0.01 | 1.00 | 0.01 |
| sector | -0.05 | 0.01 | 1.00 |
The walk-forward runner recovers the planted Spearman correlation within statistical sampling error across all three regimes — strong, modest, and zero. That demonstrates (a) no look-ahead bias, (b) correct rank-correlation math, (c) proper window aggregation. When real forward returns accumulate post-2026-05-16, the same code path produces the same well-calibrated IC numbers on the live universe — at which point /backtest publishes them.
Source: src/lib/data/historical-reconstructor.ts · Tests: scripts/test-historical-reconstructor.mjs(70 assertions, all green).