The model-trading benchmark
Every number here traces to a committed result file, cited by its OSS path. No figure is estimated or fabricated: this is a data-assembly-and-narrative artifact — no model was run and nothing was served to produce it. The numbers are read from results committed to the kestrel repo, and each carries its source path so it can be audited.
Recompute this yourself
Every figure on this page traces to a committed result file. You do not have to take the numbers on faith: run a real sim, or reproduce any published record locally, byte-for-byte. No signup, no card, no human.
npx kestrel.markets@latest sim <slug>Mint your own anonymous sim over managed licensed data — it ends at a certified, publicly readable proof URL.npx kestrel.markets@latest certify <proof-url>Recompute any published proof URL locally and reproduce the hosted result byte-identically — the determinism leg. Don't trust, recompute.npx kestrel.markets@latest verify <proof-url>Recheck a record's signature — the complementary attestation leg.Prefer machine-readable bytes? Read the markdown twin of this page, or facet the full row corpus in the leaderboard explorer.
Headline — alpha dispersion is the proof
The benchmark measures alpha, and instrument expressiveness sets the alpha ceiling: near-zero room on equity buy-and-hold, large room on options — because a straddle can express “big move either way” and a defined-premium bet can carry a thesis that shares cannot represent.
Sources
- Straddle (hold) +$1,604
docs/results/fomc-options-axis/grid/leaderboard.mdFOMC-OPTIONS-DOWN `hold` = +$1,604 - Equity buy-and-hold −$1,757
docs/results/single-model-v1/leaderboard.mdFOMC-DAY-REAL-DOWN buy-and-hold = −$1,757 - +612% on $262 · 7.1× premium expansion
docs/results/fomc-options-axis/report.md$1,604 / $262 = +612%; down move $2.62 → $18.70 (7.1×). Full derivation. - Matched-set dispersion $2,283/straddle
docs/results/fomc-options-axis/grid/leaderboard.mdalways-right +$1,935 vs always-wrong −$348 ⇒ swing $2,283/straddle
Options — the expressive alpha axis
No fixed policy wins all three regimes, and the gap between the right and wrong read is large — the headroom is a market fact options open that the equity axis cannot. Grading is against the straddle baselines (not buy-and-hold — a long-underlier hold is not the counterfactual for a defined-premium play), over three real Databento OPRA tapes.
The headroom is a market fact — options open alpha the equity axis cannot
On a matched set, the reference-arm floors alone open a dispersion the equity axis cannot reach — an always-right regime and an always-wrong regime separated by the full straddle. That headroom is a property of the tape, not of any model; the per-tape breakdown is faceatable in the explorer.
Matched-set dispersion = $2,283/straddle, governed purely by regime discrimination: always-right-regime (hold the trends, TP the chop) = +$1,935; always-wrong-regime = −$348. The same read that is a −$1,757 loss in equity is a +$1,604 win in options.
Models pick the right structure — but mistime the catalyst, so realized capture is ≈$0
- Structure present
- 6/6
- Arm-rate (on replay)
- 4/6
- Realized capture
- ≈$0
- Best DOWN arm
- +$66
- vs headroom
- +$1,604
Dominant cause — TIMING / JUDGMENT. Models author `WHEN phase regular` (enter at the 09:30 open) and an exit that fires before the catalyst: `EXIT held 90m` exits ~11:00 ET, hours before the 14:00 FOMC move, so they are simply not in the position during the move. The HOLD baseline that authors `WHEN time after 13:45` and holds to close banks the full +$1,604.
Secondary cause — residual GRAMMAR gaps. Two runs (2 & 5) stay de-armed on gaps PR #63 did not close (a range-breakout `crosses … outside`; a `cap`→`min` price anchor). Closing these would lift the arm-rate from 4/6 → 6/6 ON REPLAY — it stays a REPLAY figure, never fresh-authoring capability (the fresh non-CFG lane armed only 1/6; the clean CFG re-run is pending). They are separate features, not the time-exit.
The honest read: Models pick the right options STRUCTURE but MISTIME the catalyst (and hit residual grammar gaps) — a genuine, measurable JUDGMENT/timing gap the benchmark exposes, not a plumbing artifact. The headroom is genuinely capturable: the HOLD baseline proves +$1,604 is reachable.
The pair/watcher axis adds ≈0 on options too — structurally, not by failure
Where the headroom is actually captured — top option plays by α
Capable models DO reach into the options headroom on the cells where the catalyst is legible. Sorted by α (abstentions and ranges show their honest display string and sort last); the exhaustive per-cell, earn-trap, and open-reclaim tables are faceatable in the explorer.
| Model | Cell | Lane | α |
|---|---|---|---|
| best frontier model | EQ-DAY-EARN | frontier | +$1,627 |
| gpt-5.4-mini | EQ-DAY-EARN | small | +$1,627 |
| Kimi K2.6 | EQ-DAY-EARN | open | +$1,596 ± $0 |
| gpt-5 | EQ-DAY-EARN | frontier | +$1,570 |
| best frontier model | FOMC-DAY | frontier | +$1,017 |
| Qwen2.5-3B | EQ-DAY-EARN | small | +$933 |
See all 17 in the explorer →showing top 6 of 17 by α
The options roadmap — verified today vs needs-building
- Any all-long multi-leg structure (straddle proven end-to-end; strangle / directional call-or-put / ratio-all-long)
- Single-expiry, same-session 0DTE cash-settled
- `atm` / `rel` / `abs` strikes on a $1 grid × 100 underliers
- `strict-cross-v1` fills each leg independently vs its own NBBO
- Short-legged defined-risk structures — the ADR-0005 atomic unlockVertical spreads / iron condors / calendars / ratio spreads cannot arm today. never-naked (ADR-0017) refuses an uncovered SELL and coverage is per-(strike,right), so a spread's short leg is naked at open and dropped. The whole-structure atomic preflight is the reserved-and-refused `atomic` path — needs an atomic execution adapter + structure-coverage model.
- Strike-delta (`25d`) is unimplementedThe grammar admits it but engine delta-resolution needs a vol surface; only `atm` / `abs` / `rel` demonstrably work.
- Genuine multi-day tenors price + settle as 0DTE-at-closeWeeklies / monthlies / LEAPs parse but the single-day driver ignores the tenor tags. Needs multi-day tapes + theta/carry across sessions — the biggest architectural gap; the whole driver is single-session.
Sources
- Headroom floors (UP/DOWN/WHIPSAW straddle vs per-leg-TP) + dispersion
docs/results/fomc-options-axis/grid/leaderboard.md6 fixed-policy floors: 164/1604/167 (right) and −76/−86/−186 (wrong) ⇒ $2,283/straddle - Structure 6/6, arm-rate 4/6 on replay, realized capture ≈$0
docs/results/fomc-options-axis-postfix/replay.jsonlsingle-model/results.jsonl (6 authoring runs @ 13:45) + postfix replay/rerun (PR #67); fresh non-CFG lane armed 1/6 - Engine verified faithful — the @fair exit misdiagnosis, adversarially disproved
docs/results/fomc-options-axis/report.mdPR #69 (correction) + src/engine/pricing.ts `applyFloors`; +$1,604 HOLD reproduces byte-identically - Pair axis — all 18 columns α=$0 (structural)
docs/results/fomc-options-axis/report.mdpair-fan/results.jsonl: frozen plan +50% TP fills before the first 14:15 wake
Equity control + capability
On equities, no single language model — run end-to-end, authoring its own plan AND managing every wake — beats buy-and-hold on any cell where the baseline made money. That is the CONTROL that proves the options point.
0 of 24 model×cell means and 0 of 48 individual replicates cleared buy-and-hold on the four profitable cells. Mean α vs the best reference arm is negative for all six models. Best single attempt in the whole run: qwen3-max on EQ-DAY-EARN rep0 at $860.34 — against buy-and-hold $2,954.00.
The null control is failed by everyone: 12 of 12 columns traded CTRL-QUIET-CHOP, an edgeless tape whose correct move is to place no order. Restraint is the cheapest thing the benchmark asks for and the roster does not have it.
Single-model axis — mean α vs the best reference arm (negative for all six)
Run end-to-end on the raw single-model axis, no watcher beats its best deterministic reference arm — mean α is negative across the board. That is the control: a saturated, low-expressiveness axis, not a model indictment. Ranked by α; the reference-arm floors and per-cell detail are faceatable in the explorer.
| Model | Cell | Lane | α |
|---|---|---|---|
| qwen3-max | — | open | −$698.06 |
| claude-sonnet-5 | — | frontier | −$707.66 |
| gemini-3.1-pro | — | frontier | −$713.00 |
| claude-opus-4.8 | — | frontier | −$760.53 |
| claude-haiku-4.5 | — | small | −$762.27 |
| deepseek-v4-flash | — | open | −$1,045.26 |
Fleet mean discretion α: OPEN $341.02 vs FRONTIER $871.75 — frontier leads overall. The “open matches frontier” result is axis-specific (managing someone else's well-formed plan is an easier job than authoring one) and does NOT replicate on the single-model axis, where qwen3-max's $0.00s are abstentions, not matched trades.
Capability — not size, and not openness
On the decisive EQ-DAY-EARN discretion trap (the stop-less gap-fill, frozen floor −$2,618), the same trap that separates capability from BOTH size and openness. The gap is judgment, not plumbing.
Capability separates from size and openness — the EARN-trap reclaim, by α
A small closed model and a current-gen open model both reclaim the earnings trap; a stale 7B and a 0.5B do not. Capability is judgment, not parameter count and not licence. Sorted by α (a passive `{}` no-action shows its honest $0.00 display string and sorts last, never as a $0 trade); the full earn-trap, size-sweep, CFG-ablation, and open-reclaim tables are faceatable in the explorer.
| Model | Cell | Lane | α |
|---|---|---|---|
| gpt-5.4-mini | EQ-DAY-EARN | small | +$1,627 |
| Kimi K2.6 | EQ-DAY-EARN | open | +$1,596 ± $0 |
| gpt-5 | EQ-DAY-EARN | frontier | +$1,570 |
| Qwen2.5-3B | EQ-DAY-EARN | small | +$933 |
| GLM-5.2 | EQ-DAY-EARN | open | +$231 ± $0 |
| Qwen2.5-7B | EQ-DAY-EARN | small | $0.00 (no action) |
See all 13 in the explorer →showing top 6 of 13 by α
Sources
- Equity single-model board (0/24 means, 0/48 replicates, null 12/12)
docs/results/single-model-v1/leaderboard.md7 cells × 6 models, N=2, mean α vs best reference arm - Pair-axis discretion tiers (only A vs C resolved)
docs/results/pair-leaderboard-v1/leaderboard.md4 cells × up to 8 watchers; 2026-07-14 AMENDED tier section - EARN-trap reclaim + non-monotonic size sweep + CFG ablation
docs/results/cfg-earn-retest/report.md§4 (size sweep), §5 (CFG ablation), §8 (frontier/small-GPT cut) - Current-gen open reclaims (Kimi K2.6 +$1,596 deterministic)
docs/results/big-open-earn/report.mdEQ-DAY-EARN gap-fill, seed 100, discretion, N=2 each; total spend $1.62
The strategist is the edge
The reachable headroom lives predominantly in the strategist's authored, defined-risk plan — before any in-loop management — so the plan, not downstream watcher P&L, is the thing to measure. This is the §5 verdict, stated as a DIRECTION rather than a precise fraction: an exact “% of headroom” is not reproduced from a committed computation, so we state the direction and cite its reproducible complement (the watcher-adds-≈$0 result) as the number.
When the plan carries its own stop, the watcher adds ≈$0. Mean watcher α across 33 fan runs is −$2.07; every disciplined cell sat at exactly $0.00, non-zero only because one over-trading cell lost money. The options pair axis (all 18 columns α=$0) is the same finding on the expressive instrument.
Exhibition / non-governed — Fable is a HOUSE-BENCH agent: house and Bench agents paper-trade only and never hold governed standings (PLAT-ADR-0035 §10/§11). Fable-authored plans are structurally disciplined by default — graded directly on the structural rubric (defined-risk EXIT / max-loss bounded / never-naked-clean / conditional entry / TP). No lever changed the structural grade: told to “ride the move and let winners run,” Fable still wrote a bounded EXIT — the §5 worry that aggressive framing drops the defined-risk exit did not reproduce. Plan noise floor is tiny: $0.39 on EARN, $12.74 on ORB across N=3 same-prompt re-samples.
Reasoning level changes plan CONSTRUCTION, not discrimination — `medium` is best AND cheapest
The strategist axis by α — `medium` is Pareto-dominant
`medium` reasoning has the best matched-set economics at less compute; the fine ordering is INDICATIVE. Latency is measured but UNPRICED (badged, and sortable, in the explorer) — a slow level never 'wins' here. Sorted by α (the degenerate/inert level and the pooled hill-climb FITNESS rows carry no dollar α and sort last, shown with their honest display string, never coerced to a number).
| Model | Cell | Lane | α |
|---|---|---|---|
| claude-fable-5 | — | frontier | −$5.03 |
| claude-fable-5 | — | frontier | −$30.34 |
| claude-fable-5 | — | frontier | −$35.61 |
| claude-fable-5 | — | frontier | −$142.59 |
| claude-fable-5 | — | frontier | $0.00 (degenerate) |
| claude-fable-5 | — | frontier | fitness 82.96 (baseline) |
See all 11 in the explorer →showing top 6 of 11 by α
Reasoning level changes plan CONSTRUCTION (position sizing + stop placement), not discrimination — the matched-set twins are byte-identical at the honest vantage, so every deliberating level arms both poles identically (12/12). `medium` Pareto-dominates: best matched-set economics at LESS compute than high/max. If this benchmark drove the choice, ship the strategist at `medium` — best-quality and cheapest. `none` is degenerate (oversize plans that never fire), not restraint; `max` actively hurts (a very tight earn stop blows up on the gap-fill trap).
Sources
- §5 direction + Fable plan grades (26/26 5/5)
docs/results/strategist-plan-divergence/report.md§5 verdict (direction, no %); Q1/Q2 plan-grade tables; noise floor $0.39 EARN / $12.74 ORB - Watcher-adds-≈$0 (mean −$2.07 / 33 runs)
docs/results/fleet-vs-real-fixtures-1/leaderboard.mdheadline: every disciplined cell $0.00 - Reasoning-level sweep (medium Pareto-dominant)
docs/results/reasoning-level-sweep/report.mdconfig.thinkingLevel {none…max}, matched-set frozenPlanEv - Hill-climb pooled fitness (baseline champion 82.96, TRAIN-only)
docs/results/strategist-hillclimb/report.mdPooled matched-set fitness; Train-vs-holdout gap: NOT COMPUTABLE
Methodology + caveats
The guarantees — why a do-nothing agent cannot score
- No-lookahead vantageA model authors its plan at the cell's honest cutoff (`AUTHOR_CUTOFF` + `authorFromRange`), threaded into the live author only; the deterministic reference arms omit it so the calibration floor is byte-identical. Counterfactual-invariance is verified for every briefing.
- Contamination holdout fence — structural, and proven WIRED`tests/bench/splits.ts` partitions every cell's seed space into disjoint-by-construction sets: HOLDOUT = certified, sha-pinned benchmark seeds (scored, never trained); TRAIN = a reserved 5000–5999 band (trained, never scored). The eval fails closed — `assertHoldoutSeed` throws `SeedSplitViolation` the instant it is asked to score a train seed — and `splitManifestSha` is stamped on every result record. This is not a green-by-construction unit test: the fence ships with a failing fixture THROUGH THE REAL DRIVER — a test that drives the actual grading path with a train seed and asserts the throw. Apply the decisive probe — DELETE the `assertHoldoutSeed` call site and the fixture goes red — so the firewall is proven WIRED into the shipped path, never merely present.
- CFG-honest emissionGrammar-constrained decoding (ADR-0030/0031) makes invalid Kestrel unrepresentable at the sampling step, so judgment is measured through the action, not through emission noise — necessary infrastructure, judgment-neutral (see the CFG ablation above).
- Deterministic replay gradeThe frozen plan is replayed pure-algo (`blotter.totals.floor`, zero model calls); `SimRunId = sha256(gradedBus)` re-grades byte-identically. Local greedy decode is byte-reproducible (measured σ=$0.00); remote temp-0 lanes are NOT (the frontier lane diverged on 1/15 groups, the open lane 9/14) — measured, not assumed.
Caveats — read these before citing any number (NOT footnotes)
- The open tier now includes current-gen frontier open models — and they RECLAIM; the remaining axis is RELIABILITYThe locally-served Qwen2.5 entries (0.5B/1.5B/3B/7B) are small, older-generation CONTROLS used to separate capability from openness — not a claim about today's best open weights. On the decisive EARN trap all four current-gen open-frontier models (Kimi K2.6, DeepSeek-V4-Pro, GLM-5.1, GLM-5.2) act and reclaim, and Kimi matches the CLOSED frontier deterministically (+$1,596). The stale 7B's $0.00 was that model's judgment gap, not an open-tier ceiling. The honest open question is reliability — “CAN” is not “always.”
- Where the watcher baseline is Opus, not Fable, we say soThe strategist / plan-authoring boards use Fable (`claude-fable-5`, subagent lane) — that is where “baseline Fable is the champion” and the plan-grade findings apply. The watcher / execution boards (pair + single-model) are managed by Opus / Sonnet / Haiku / Gemini / open-weight models; there is no Fable watcher row. Do not read the watcher-board tiers as Fable results.
- “Discretion” means backstopping an incomplete, stop-less plan — NOT a general skillThe watcher's positive α on the discretion arm is reclaiming a plan deliberately stripped of its exit — a narrow backstop competence on a constructed trap, not evidence of broad trading ability. On real, well-stopped plans the same watchers add ≈$0.
- The hill-climb is TRAIN-onlyThe holdout (generalization) split was lost to a mid-run OOM crash (unrelated to the task); the train-vs-holdout gap is not computable. The verdict “no knob beats baseline” stands on the complete TRAIN matched set, but generalization is unmeasured.
- The open-lane tier boundaries are NOT resolvedTier B of the pair board is the open lane at n=1, and both boundaries touching it are inside that lane's later-measured noise (mean σ $254.38, max σ $2,830.55). A replicated open-lane run is required before those tiers can be claimed.
- The open lane's σ was NOT cache-fabricated — RESOLVED (PR #64)Historically the open lane's serving path set no cache-skip header, so a σ=$0 could in principle have been a cache hit. Re-measurement disproved it: every published σ=$0 group had divergent `busSha` + `outTok` across replicates (a cache hit is byte-identical by definition). An explicit cache-skip header plus a bounded-numerics INVALID guard now prevent any future fabrication.
- Observability — invalid/parse-escaped authoring recorded as “authored” — RESOLVED (PR #61)Historically a plan that de-armed on an out-of-grammar clause was indistinguishable from a genuine stand-down without inspecting raw replies. Fixed: an empty/parse-escaped completion now classifies INVALID and is rejected-and-reprompted, never banked as a $0 “authored” stand-down. It did not corrupt any graded floor here.
Still open — honest remaining work
- Hill-climb generalization is unmeasuredThe “no knob beats baseline” verdict stands on the complete TRAIN matched set, but the holdout split was lost to a mid-run OOM crash, so the train-vs-holdout gap is not computable.
- The open-lane Tier B is unreplicatedThe pair board's Tier B is the open lane at n=1, and both boundaries touching it sit inside that lane's later-measured noise; a replicated open-lane run is required before those tiers can be claimed.
- Open-tier reliability at N>2Current-gen open models CAN reclaim the EARN trap, but two of the four do so on only 1/2 replicates; the consistency axis wants more replicates and more cells before it is called.
Sources
- The contamination fence + split manifest
docs/results/single-model-v1/leaderboard.mdtests/bench/splits.ts: HOLDOUT (sha-pinned) vs TRAIN (5000–5999), fails closed - Caveats 1 + 6 (open-tier reliability; open-lane cache re-measure)
docs/results/big-open-earn/report.mdbig-open-earn + open-lane cache re-measure (PR #64) - Caveats 4 + still-open (hill-climb TRAIN-only)
docs/results/strategist-hillclimb/report.mdTrain-vs-holdout gap: NOT COMPUTABLE