qea stock-ranking model
Portfolio demoA static snapshot of a personal quant research platform — 500 current members of a liquid500 universe, daily history since 2016, exported 2026-11-04 from the live 56.9 GB DuckDB. Every chart and table is the real tool's own output.How this demo works →← Ben Meyer's portfolio

Under the hood · the working overview · read-only

Research notebook

The working overview behind the story: the record's pulse, what changed, the market map, how the model works and the honest numbers — in the project's own terms, with the error bars left on.

55 of ~100
Committed in advance days whose picks were recorded before the outcome existed — the only ones that count
Unbroken nights —in a row   A process count: nights the pipeline committed its picks on time. It says nothing about whether the picks were any good.
Next scoring run --:--:-- the nightly job fires at 18:30 local, retry 22:30
Every scored day
committed in advance live stamp, scored in arrears (C20) — not evidence backfill — not evidence

What changed

Every change to what this site claims and how it is computed, with a link to the panel where you can see it. strategy changes what is scored or claimed; reporting changes what a number counts; systems changes the plumbing under one.

changed 2026-10-20

Agent-fleet findings (AG-0nn) are named wherever they are borrowed. They are not registered blocks and they are not record findings — the research ledger says which is which. closed directions →

Where things stand

One frozen model is scored every evening and its picks are recorded before the outcome exists. The record needs about a year of days committed in advance before it can say anything; until then every figure here is a plumbing check.

changed 2026-09-20 latest scored day 2026-11-04 live
Committed in advance 55of ~100 needed
45 more days committed before the outcome existed, before the record carries information
Live prediction days 85 carry the live stamp; 30 of them were scored in arrears and restamped live on 2026-09-12 (FINDINGS C20)
Backfilled days 1 scored in arrears — not evidence
Latest book 48 names 2026-11-04 · live
Data as of 2026-11-04 prices · indicators 2026-11-04 · targets 2026-11-03

A modest cross-sectional effect — +4.93 bps/day to an execution one day behind the signal, next open to the open after (SE 1.83) — found in backtests and awaiting live confirmation. Roughly half of it is the return to the book's beta tilt (AG-018); it is never restated beta-adjusted. Every number on these pages carries its standard error and one of three evidence states:

liveLive — scored the evening before the outcome existed. The stamp alone is not evidence: only days committed before the outcome existed count, and 30 live-stamped days were scored in arrears and restamped on 2026-09-12 (docs/FINDINGS.md C20).
backfillBackfill — scored in arrears after an outage. Real accounting over a real book, but the position was never committed to in advance: a plumbing check, not evidence.
backtestBacktest — the frozen model scored on 2016–2026 dates it never traded. A description of the holdout, not evidence.

Active model

Kind
gbm · h=1 · long only
Universe
liquid500
Trained through
2015-12-31 · never refit
Exit buffer
30% · chosen before the sweep

Open the model dashboard →

Market regime as of 2026-09-08

vollow trendabove dispersionhigh
What the backtest earned in these states
vol low 1.20 bps/day ±1.70 SE · 1062 days
dispersion high 7.36 bps/day ±2.91 SE · 1614 days

The figures are the implementable leg — next open to the open after, the only return an execution following the 18:30 signal can take. States are fixed in advance: SPY's trailing 21-day volatility in point-in-time terciles, SPY above or below its 200-day average, and the dispersion of members' 21-day returns in terciles. The registered test (Phase P2) ran on the close-to-close leg, not this one, so its verdict — the edge concentrated in mid/high volatility and high dispersion — does not transfer to these numbers without its own registration.

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.

Market map

The tradable universe by sector. Each box is a stock sized by what trades in it (20-day dollar volume) and coloured by its move over the period you pick; the model's latest book is outlined. Click a sector to zoom in, a stock to open it. A picture of what the market did — no statistic is drawn from it.

changed 2026-09-23
How to read this

Returns are adjusted-close changes to the latest membership date from the screener's own anchor dates (1, 21, 63 and 252 sessions back), so a box here and the screener's row agree. The colour scale is clipped symmetrically around zero so one outlier cannot wash out the rest. The outline marks the names the active model held on its newest scored day; a shadow's or the paper companion's book is never drawn here.

Nothing on this map is a test. A sector glowing green while the book sits in it is a description of one period, not evidence the model chose well.

How the model works

Prices and volume in, a ranked list out, every evening. Nothing here uses fundamentals, and the model has never been refit.

Universe filter
Top 500 by traded dollars, monthly
Indicators
19 signals from price and volume
Frozen model
Trained on 2005–2015, never refit
Daily ranking
Every name scored, ranked best to worst
Book
Top ~10% in, out below 30%
Live record
Logged append-only, before outcomes
every evening, left to right
  1. UniverseEach month, the 500 most-traded US stocks by 20-day median dollar volume — including names that later delisted, because dropping them would flatter every historical number.
  2. Signals19 technical indicators computed from price and volume only (25 built, then pruned by correlation). There are no fundamentals anywhere in this system.
  3. Frozen modelA gradient-boosted model trained once, on 2005–2015, and never refit — on purpose. The live record is only meaningful because the map is held still while reality is compared against it.
  4. Ranking and bookEach evening every name the model can score (up to ~500) is ranked best to worst. The top tenth — typically 49 names — forms an equal-weight, long-only paper book with a 30% buffer: a name enters in the top tenth and is not sold until it drops out of the top 30%, so a typical name is held several days and turnover roughly halves.
  5. Live recordThe book is logged append-only before the outcome exists, and evaluated on next-day returns. A day scored in arrears is marked backfill and never counts as evidence.
What the model keys on, and how big the edge really is

What the model keys on is not fast timing. Feature attribution puts about 34% of its importance on ATR% (realized volatility) and 28% on distance from the 200-day moving average — it conditions on a stock's volatility-and-trend state.

Be blunt about scale: the claimed edge is a few basis points per day, which on a $100k book is roughly tens of dollars a day before trading costs. The backtests support it — and show that it is earned overnight, not during the session, and that it carries into the following night, so an execution one day behind the signal keeps it. The live record, which is the only test that can't be gamed, has barely begun.

The honest numbers

changed 2026-09-20
+4.93 bps/day (SE 1.83) An execution one day behind the signal — next open to the open after. The only backtest return reported here, because it is the only one an execution following an 18:30 signal can take. Costs at the open unmeasured (P3). 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 backtest
IC ≈ +0.01 Rank correlation between score and next-day outcome — tiny per name, usable only across ~500 names at once backtest
55 committed days Days committed before the outcome existed — the only rows that are evidence. 85 days carry the live stamp, 30 of them scored in arrears and restamped live on 2026-09-12 (FINDINGS C20) live
~1 year What would falsify this: ~100 independent blocks committed in advance with the realized spread at or below zero the test

What the +4.93 is made of, and where each piece came from. 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) — so this is a classifier of one decile, not a ranking to slice finer. AG-013 and AG-018 are agent-fleet findings, not registered blocks.

Two changes to what this table reports, both made on 12 September 2026 and both recorded in docs/FINDINGS.md C20. One: the close-to-close figures this table used to lead with — the +3.61 selection alpha, the +6.00 top-minus-bottom spread, the +0.44 intraday leg and the t = 2.16 factor alpha — are no longer reported, because all of them book entry at a close whose signal is not committed until 18:30. They remain in the registrations and in backtest_daily. Two: 30 days that were scored in arrears are now stamped live, so the live count above includes days whose outcome already existed when they were scored — 19 of them scored by a model that did not yet exist.

Glossary
  • Excess return — a stock's return minus its sector median, centered so each day's full cross-section averages zero.
  • bps — basis points; 1 bp = 0.01%, so 100 bps = 1%.
  • SE — standard error; roughly, ±2 SE spans the plausible range around an estimate.
  • Independent block — a stretch of adjacent days counted as one observation, since days overlap.
  • IC — rank correlation between model ranking and realized outcomes.
  • Decile — one tenth of that day's scored names; roughly 30–50 stocks here.
  • Frozen model — fitted once on 2005–2015, never updated; every later day is out-of-sample.
  • Live vs backfill — live: scored before the outcome existed; backfill: scored in arrears — never evidence.
  • Committed in advance — written before the outcome existed, judged by when the row was written rather than by its stamp. Since 12 September 2026 the live stamp also covers 30 days scored in arrears, so this is the count that carries evidence.
  • Implementable — what a one-day-lagged execution at the open would earn: enter at the next open, exit at the open after. The only return reported as a result. The record internally books a close-to-close return instead, which is an accounting convention, not a strategy.

Does the ranking predict returns?

Every scored name on every scored day, sorted into tenths of the model's rank. If the model orders stocks at all, the bars should rise from left to right — and with about two months of days against an edge of a few bps, noise will dominate for a long time.

livebackfill counted separately

loading

How to read this

This chart uses the full scored cross-section — up to ~500 names a day, fewer on reduced-coverage days — not just the book. Each day every scored 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 in bps, averaged within each day first, then across all scored days, with a block-bootstrap standard error. It is out-of-sample by construction: the model was frozen at end-2015 and scoring began July 2026.

Note which end does the separating: a long-only book only harvests the top decile, so strong separation at the bottom alone — the model's rejects underperforming — would not be captured by this construction. One more caveat: some scored days were recovered in arrears. The scores are deterministic either way, but only evening-of days prove the commitment came before the outcome — the same rule that keeps live and backfill separate everywhere else here.

Explore

Where each page goes deeper.