Frozen model · 09d8c916 · gbm · h=1 · long only
Model dashboard
The frozen model, its paper record, and the registered tests of what that record means. Days committed in advance are the only evidence on this page; everything else is a description.
- Universe
- liquid500
- Trained through
- 2015-12-31 · never refit
- Exit buffer
- 30%
- Latest book
- 2026-11-04 · 48 names live
Phase G production: frozen h=1 GBM, long-only top decile, 30% rank-buffer exit. 30% chosen pre-registration, NOT the 40% that dominated the H1 sweep.
At a glance
What the record holds so far and what the registered blocks concluded. Each section below carries its own detail.
45 more before the record carries information
85 days carry the live stamp; 30 of them were scored in arrears and restamped live on 2026-09-12 (FINDINGS C20).
1 backfilled days, scored in arrears — not evidence.
Registered verdicts research ledger →
- P1 · intraday leg (not implementable)
- NOT ATTAINABLE
- P2 · regime dependence
- dispersion: REGIME-DEPENDENTtrend: not detectedvol: REGIME-DEPENDENT
- P3 · lagged execution
- IMPLEMENTABLE
- Q3
- atm_iv30: nocp_iv_spread: SIGNALiv_rv_spread: SIGNALskew25: noall: PASS
- Q3A
- PASS
- Q5
- PASS
- Q5-7
- NONE QUALIFIES
- Q6a
- IV FORECASTS BETTER
- Q6b
- NOT HELPS
- Q7
- ESTABLISHED
- R2
- all: PERSISTSnight3: PERSISTS
- R3
- within_top_ic: GATE CLOSEDall: GATE CLOSED
- R4
- NOT ESTABLISHED
- R5
- W: INDISTINGUISHABLEW: INDISTINGUISHABLEall: INDISTINGUISHABLE
Shadows of this model
Registered against this model and scored beside it every night under docs/pre-registered-S.md, in their own runs and their own rows. Nothing here trades: this model's book, its workbook and its record are untouched by anything a shadow does.
| Model | Trained through | Registered | Note |
|---|---|---|---|
| 3c4dc501 | 2025-06-26 | 2026-09-20 17:11 | Shadow S1 (docs/pre-registered-S.md): the production recipe and 09d8c916-37bb-4807-a2b6-266c46d0950d's 19 stored features, fit to the implementable open(t+1) -> open(t+2) sector-excess through 2025-06-26, the last two sessions purged. Scored beside the production model, never active; promotion only by that document's calendar and never by profit and loss. |
How to read this
A shadow is a second frozen model on the same universe, scored every night in its own run, into its own workbook and its own rows. It trades nothing. It exists so that a candidate the backtest already chose accrues a forward record before anything switches to it — the live year is there to stop a materially worse model and to prove the lane runs, not to prove a better one.
Promotion is by process, never by profit and loss. The first evaluation is taken when the two models have 250 days both committed in advance, and every 125 paired days after it. It promotes only if the shadow's live ranking of the implementable return is below the production model's by no more than 0.002 in rank correlation, if the two models' scores correlate at least 0.30 at that first evaluation and at least three-quarters of the first evaluation's own value at every later one — a drift check, not a second level check — and if the lane has no coverage holes of its own. Each book's own return is reported at those evaluations and decides nothing.
Decision rule fixed in docs/pre-registered-S.md, before the first shadow night. the registrations →
Paper record
The ~49-name book marked to a notional $100k account at 3 bps round-trip, one point per recorded day. Live and backfilled days are drawn differently and counted separately; the grey line is the same $100k riding SPY.
Backfilled days were scored in arrears — the position was never committed to in advance. They are a plumbing check, not evidence. Neither is every live-stamped day: 30 days scored in arrears were restamped live on 2026-09-12 (docs/FINDINGS.md C20). Judge the model on the committed-in-advance count, which is the smaller one.
How to read this
The dashed amber stretch was reconstructed in arrears after the scheduler failure and after a week without network — real accounting over a real book, but the positions were never committed to in advance, so it demonstrates plumbing, not foresight. The solid green stretch carries the live stamp, and only the days inside it that were committed before the outcome existed are evidence. Turnover is charged at 3 bps round-trip; the newest day is unmarked until its forward return is realized, so the account is valued at the last marked day.
Does the ranking predict returns?
The full scored cross-section, not just the book: realized next-day excess by tenth of model rank (left), and the same question one day at a time as a rank correlation (right). Bars rising left to right would mean the model orders stocks.
loading
How to read this
Left chart: the full scored cross-section (up to ~500 names a day), every scored day. Each name with a realized next day falls into a rank decile — the model's least favorite tenth on the left, its favorite tenth on the right — and each bar is the realized next-day excess return, averaged within each day first, then across days, with a block-bootstrap SE. If the model orders stocks at all, bars should rise left to right. Note which end separates: a long-only book only harvests the top decile, so separation at the bottom alone — the rejects underperforming — would not be captured by this construction.
Right chart: the same question one day at a time — each point is that day's rank correlation (IC) between model ranking and realized outcomes. The backtest's frozen-holdout IC was about +0.01: on any single day the correlation is almost invisible, which is why it is only usable across ~500 names at once, and why a month of days decides nothing.
What an execution could actually have earned
One number, because only one is a return anyone could take: enter at the next session's open, hold through the following night, exit at the open after. The record's own close-to-close entry is booked at the 16:00 close of a day whose signal is only committed at 18:30, so it is not reported here.
| Leg | Holdout 2016–2026 backtest | Committed in advance live |
|---|---|---|
| Implementablenext open to the open after — an execution one day behind the signal, holding through the following night | — | — |
The live column counts only days committed before the outcome existed. Over every day carrying the live stamp the same leg reads — — that series includes the 30 days scored in arrears and restamped live on 2026-09-12 (docs/FINDINGS.md C20), so it is not out-of-sample evidence and is shown only so the two counts can be compared.
Mean sector-excess return per day, centered across each day's cross-section, with block-bootstrap SE and the number of days. Cumulative line below.
How to read this
One cumulative line over the frozen model's holdout. Implementable is what an execution one day behind the signal earns: enter at the next open, hold through the following night, exit at the open after. It is a sector-excess return centered across the day's cross-section, so the average stock is zero. The verdict is fixed in docs/pre-registered-P3.md; costs at the open are not measured, so the real number is lower by whatever the spread and impact cost at the open.
Two other legs were measured and are not reported here: the credited close-to-close return the record books, and the intraday-only leg (next open to that same close) that P1 decomposed out of it. Neither is an execution that can follow an 18:30 signal, so neither is a result. Both remain in backtest_daily and in the Phase P registration — the audit trail keeps what was measured even when the browser stops publishing it.
What the +4.93 is made of. The tilt: roughly half of it is the return to the book’s beta tilt — slope +0.42 on the forward market, 52% of the mean on this decade, residual +2.36 at t 1.45 (AG-018, an agent-fleet finding, not a registered block); it is never restated beta-adjusted, here or anywhere else on this site. The timing: 87% of the implementable return sits in the close-to-open leg on 2016–2021; since 2022 the two legs split evenly and neither is distinguishable from zero (AG-013). The ranking: decile 1 earns +5.43, decile 2 +1.22, deciles 3–10 sit at zero, and inside decile 1 the five sub-buckets are not ordered (R3, registered).
The live column is the only part that is evidence, and only once there are enough days committed in advance for it to mean anything.
backtest The frozen model scored on dates it never traded, after the fact. A description of the holdout, not evidence — only live days are evidence.
Return for the risk taken
The same open-to-open return, set against how much it swings from day to day. The Sharpe ratio is the yearly return divided by the yearly volatility: higher means more return for each unit of risk. Read the ± before the number — a Sharpe ratio takes years of days to pin down.
| Measure | Holdout 2016–2026 backtest | Committed in advance live |
|---|---|---|
| Sharpe ratioyearly return ÷ yearly volatility, ± one standard error | — | — |
| Yearly returnthe average day × 252, over the stock’s sector peers | — | — |
| Yearly volatilityhow much the daily return swings, × √252 | — | — |
| Sortino ratiolike the Sharpe, but only losing days count as risk | — | — |
| Deepest drawdownthe largest fall of the summed return from an earlier high | — | — |
| Return ÷ deepest drawdownthe yearly return over the deepest drawdown (Calmar ratio) | — | — |
| Days upshare of days with a positive return | — | — |
| Worst 5% of days, averagethe mean of the worst day in twenty (expected shortfall) | — | — |
The live column counts only days committed before the outcome existed. Over every day carrying the live stamp the Sharpe ratio reads — — that series includes the 30 days scored in arrears and restamped live on 2026-09-12 (docs/FINDINGS.md C20), so it is not out-of-sample evidence.
Rolling one-year Sharpe ratio
Drawdown
Both charts: the backtest holdout, before costs. Left, the Sharpe ratio of the trailing 252 trading days, with the whole decade’s as a dashed line. Right, how far the summed return sat below its previous high, in bps.
How these are computed
Every figure is read off the implementable leg the timing panel reports: the next session’s open to the open after, each name’s return over its own sector’s median, the book averaged per day. Yearly figures assume 252 trading days: the yearly return is the daily mean × 252, the yearly volatility the daily standard deviation × √252, and the Sharpe ratio is the first divided by the second. No cash rate is subtracted. The return is already measured against the stock’s own sector, so it is a spread rather than money that could have sat in cash; a fund would call this Sharpe ratio an information ratio.
The ± on the Sharpe ratio is the site’s block bootstrap — 2,000 resamples of five-day blocks, the same draws that give the mean its SE in the timing table — applied to the ratio itself, and it is undefined below 6 days. The Sortino ratio divides by the downside deviation instead: the root-mean-square of the losing days, with every day in the count. Drawdowns are measured on the summed series, the cumulative line in the timing panel, from a starting level of zero. The worst-5% average needs at least 20 days.
Costs at the open are not measured, so the switch lets you choose one. It charges the round-trip cost on the share of the book the live record has actually replaced each night, as the same amount every day: a cost lowers the return and the ratios and deepens the drawdowns, and leaves the volatility unchanged. The breakeven is the cost at which the whole return is gone. The charts stay before costs.
The paper account above is marked on the record’s close-to-close return, which no execution following an 18:30 signal could obtain; the site stopped reporting it as a result on 2026-09-12. No Sharpe ratio is computed from it.
backtest The frozen model scored on dates it never traded, after the fact. A description of the holdout, not evidence — only live days are evidence.
The paper companion
One single-characteristic decile, scored beside the model every night on the model's own cross-section, so that a paired series committed in advance exists. It is a benchmark, never a trade: the question it answers is what the model adds over sorting the same names on one number.
Fixed to beta_spy_v1 on 2026-09-20 12:45. Each night it takes the top k = max(1, n/10) of the model's scored names on that one value, ties broken by symbol, equal weight and no exit buffer — AG-020's definition, not the model's. One companion per model, ever; it cannot be changed after the first night without throwing away the comparison it exists to make.
loading
The MDE is the number to read first. A paired difference smaller than the minimum detectable effect — twice the block-bootstrap standard error of the difference series — cannot be told from zero, whatever its sign. It is undefined below 6 days, and is reported as undefined rather than as zero.
How to read this
Both books are scored on the same evening, on the same cross-section, and both are evaluated on the same leg the rest of this page reports: the next session's open to the open after. The comparison is paired — the difference is taken date by date and its standard error is bootstrapped from the difference series, not from the two books' own standard errors. Combining those would overstate the uncertainty of a difference between books holding overlapping names by several times.
Only dates committed before their outcome existed are paired here. A day scored in arrears is not a commitment, so it cannot settle a comparison between two commitments, whatever its stamp says.
Turnover is the share of yesterday's book gone today, over consecutive scored dates. The breakeven beside it is R2's convention — the whole gross divided by that fraction, the round-trip cost in bps that would eat it, as +4.86 bps on 20.2%/day gave ~24 bps there — and it is gross of a cost nobody has measured: costs at the open are not in any number on this site.
The power line says how many paired days a difference would need before its t reaches 2, at the dispersion AG-020 measured on 2,685 dates. Both answers are decades. That is the point: the companion is worth running because it commits the comparison in advance, not because the comparison will resolve. AG-020 is an agent-fleet falsification, not a registered block.
By market regime — when does the implementable edge appear?
The book's mean implementable excess on holdout days in each pre-named market state, with the registered permutation test beside it. The current state is shown first.
loading
| Test | p | BH q | Verdict |
|---|
backtest The frozen model scored on dates it never traded, after the fact. A description of the holdout, not evidence — only live days are evidence.
How to read this
Each bar is the book's mean implementable excess (bps/day) on holdout days in one market state, with a block-bootstrap SE and the day count. States are fixed in advance: SPY's trailing 21-day volatility in expanding point-in-time terciles, SPY above or below its 200-day average, and the cross-sectional dispersion of members' trailing 21-day returns in terciles.
The table is the registered P2 test — top state minus bottom state against 200 within-date permutations with the book fixed, three tests under Benjamini–Hochberg. It was run on the credited close-to-close leg, not on the leg these bars show. Its p and q are reported because they are the registered result; its observed difference and null percentile are not, because they are in credited bps and would read as belonging to the bars. A regime claim about the implementable leg needs its own registration before it is run — re-running the test on whichever series looks better is exactly the forking path the pre-registration rule exists to prevent.
The permutation null asks whether a random book of the same size would show the difference. It does not carry the book's day-to-day swings, so a verdict of “regime-dependent” is narrower than the bars might suggest.
The book
What is held now, what changed recently, and how the held names did relative to one another. How much of it is replaced from night to night, and what that turnover costs, is in the companion panel above.
Realized excess within the held book
How to read this
Each bar is a quintile of the names actually held that day (a tenth of the scored count — typically 49, fewer on thin days), sorted by model score — this chart never sees the roughly nine-tenths of names the model rejected. “Excess return” is a stock's next-day return minus its sector median, centered across that day's full cross-section, so the average stock overall is zero; a bar above zero means those holdings beat the typical stock. A working model would show bars rising left to right — its most-preferred holdings doing best. Error bars are block-bootstrap SEs, and with only a handful of independent blocks so far, the bars will jump around and mean very little. This is also the weaker of the two tests: everything held was already among the model's favorites, so the spread inside the book is small by design. The rank profile above is the sharper read.
Current positions
| Symbol | Entered | Weight | Value |
|---|
Recent trades
| Date | Action | Symbol |
|---|