All insights
BacktestingResearch

Walk-forward case study: a simple momentum rule (framework only)

Hypothesis, purge design, cost stress, and falsification for a toy momentum book — results marked TBD until an authorized run lands.

What this note is

A worked example of the bar set out in Walk-forward is the report (18 October 2026), applied to a deliberately simple cross-sectional momentum rule.

Results in this draft are placeholders. Francis has not authorized a production backtest run for this article. No Sharpe, return, drawdown, or capacity number below is real. Prefer a blank table to a fake chart.

This is a community research note. It is not investment advice. It is not a live allocation, a product, or a recommendation.

Hypothesis (one paragraph)

In a liquid US large-cap equity universe, a plain 12–1 month cross-sectional momentum sort — long the top decile, short the bottom decile, monthly rebalance — retains a positive after-cost edge when evaluated under purged walk-forward folds that never tune on the test window, under 2× slippage stress, and under a one-bar clock shift. If the edge lives in only one subperiod, one sector, or one parameter cell, the note ships as a negative or as a labeled single-regime curiosity — not as a book.

Rules (toy spec)

Piece Spec for this case
Universe US common stocks, point-in-time membership in a large-cap index (exact index TBD in the authorized run)
Signal 12-month total return, skip most recent month (12–1)
Portfolio Equal-weight long top decile / short bottom decile
Rebalance Month-end close → next open (or next close; freeze one convention before the run)
Costs Round-trip haircut as % of ADV; baseline + 2× stress (exact bps TBD from the desk cost model)
Neutralization None in v0 (sector-neutral is a listed sensitivity, not the base case)
Gross exposure Written in dollars and in shares at the volume the desk can actually hit — number TBD; not invented here

Codex may draft the feature function against the existing harness. It does not pick the window, drop a name, or rerun until the chart behaves.

Walk-forward / purge design

Check How this case implements it
Walk-forward Rolling train / test folds. Test window is never used for lookback length, decile count, or cost assumptions.
Purge / embargo Embargo at least one rebalance gap between train and test so overlapping 12-month returns do not leak labels into the test fold. Exact embargo length frozen before the run.
Parameter plateau Neighboring cells (e.g. 9–1 / 12–1 / 15–1; deciles 8/10/12) must be scored. One green cell is not a pass.
Clock shift Rebalance bar moved by ±1 trading day; sign of after-cost mean return must not flip.
Capacity Max participation vs ADV written down; if the edge needs more size than the desk can hit, label it research-only.

A rule that flips because Tuesday became Wednesday was never a rule. Same for a Sharpe that lives in one ticker.

Cost stress

  1. Baseline slippage / commission from the desk cost model (cite the model version in the authorized run output).
  2. 2× haircut: after-cost mean and hit rate must remain non-negative (or meet the pre-registered hurdle) under double costs.
  3. If the edge dies at 2×, the note ships as a negative — silent discard is how a desk talks itself into a curve.

Falsification criteria (pre-registered)

Write these before looking at OOS numbers:

  1. After-cost mean monthly return ≤ 0 in the pooled OOS folds under baseline costs → fail.
  2. Sign flip under 2× cost stress → fail.
  3. Sign flip under ±1-bar clock shift → fail.
  4. Only one neighboring parameter cell green → fail (or publish as fragile, not as a book).
  5. Edge concentrated in a single calendar regime (e.g. only 2017–2019) → first-paragraph disclosure; do not market as a general momentum book.
  6. Edge concentrated in one name or one sector after a simple leave-one-out → label single-name / single-sector; stop calling it a book.

If a note cannot say what would make it wrong, it does not get published.

Results — framework only (numbers TBD)

Metric Authorized run This draft
OOS mean monthly return (after cost) pending Francis run TBD — not invented
OOS Sharpe (after cost, stated RF) pending TBD
Max drawdown (OOS) pending TBD
2× cost stress: sign / mean pending TBD
Clock-shift sign pending TBD
Parameter plateau (cells green) pending TBD
Capacity at stated participation pending TBD

Pass / fail against the falsification list: pending authorized output.

When the run lands, replace this section with the frozen report table and a human-edited paragraph that points at the table. Model prose that cannot point at a table does not ship. If the run fails a row above, the note still ships — as a negative.

How it is filed

Hypothesis, universe, cost model, OOS window, and invalidation live with the other research notes. We do not publish a live allocation from this page. We do not publish position sizes.

Not investment advice. Community research viewpoint only. Framework draft — no backtest numbers until an authorized run is attached.