Test any screen against the record — then see the stocks that match today
Set any filters. You get the record (what happened to every company that met the rule on the day it filed its annual report, held for the period you choose, since 2009), today's list (the stocks that meet the rule now), and the market state today.
Your screen, tested
| Market state at entry | Company-years | vs S&P 12 mo | vs small caps |
|---|---|---|---|
| Calm ◀ today | 1,922 | −0.2 pts t -0.2 | +3.3 pts |
| Sell-off (S&P ≥10% off high) | 267 | +1.1 pts t 0.3 | +6.1 pts |
| Sector (SEC group) | n | vs S&P 12 mo | 3 yrs / yr |
|---|---|---|---|
| Industrials & manufacturing | 831 | −2.4 pts t -2.1 | −5.8 pts |
| Retail & consumer | 208 | +2.4 pts t 1.2 | −1.0 pts |
| Services | 178 | −0.8 pts t -0.3 | −2.8 pts |
| Tech hardware & semis | 169 | +7.4 pts t 1.4 | −3.7 pts |
| Other | 134 | +3.5 pts t 1.0 | −2.8 pts |
| Energy | 121 | −10.5 pts t -2.0 | −14.6 pts |
| Software & IT services | 80 | −1.2 pts t -0.3 | +1.1 pts |
| Medical devices | 74 | +11.0 pts t 1.2 | −2.0 pts |
| Biotech & pharma | 73 | −1.3 pts t -0.3 | −4.2 pts |
| Utilities | 70 | −3.2 pts t -1.2 | −2.8 pts |
| Food, drink & tobacco | 43 | −5.4 pts t -0.9 | −11.8 pts |
| Transport & logistics | 42 | +4.3 pts t 0.7 | −1.0 pts |
Holds up out of sample? Before 2017: +1.7 pts (n 800, t 1.5). From 2017: −1.0 pts (n 1,389, t -0.8). Flips sign between halves — treat as noise.
| Year | 2009 | 2010 | 2011 | 2012 | 2013 | 2014 | 2015 | 2016 | 2017 | 2018 | 2019 | 2020 | 2021 | 2022 | 2023 | 2024 | 2025 |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| vs S&P | +25 pts | +3 pts | +2 pts | −0 pts | +12 pts | −5 pts | −4 pts | +6 pts | +5 pts | +1 pts | −16 pts | +14 pts | −4 pts | +10 pts | −15 pts | −10 pts | +14 pts |
| n | 2 | 31 | 114 | 119 | 123 | 129 | 146 | 136 | 136 | 165 | 175 | 112 | 128 | 188 | 176 | 171 | 138 |
Test your own combination in the Screen Lab →
Every filter is applied point-in-time at each annual-report date. Point-in-time: each entry is one company bought at the first close after its 10-K filing date, using only filings available that day, held 12 months; result = total return minus SPY over the same months (vs IWM for 12 months; 3-yr annualised). Survivorship-tilted universe; no costs; read spreads, not levels. Educational, hypothetical, before costs.
Stocks that match this screen today (687)
The backtest above is history: what past companies did after meeting these filters at their annual-report date. This list is the same rule applied to today's filings and prices — the names a follower of this screen would be looking at now. Common stock only; secondary listings, warrants and units are removed.
No stock in our coverage meets all of these filters today.
Three lists, one yardstick
1 · Screens that work — found by search, confirmed out of sample
| Screen | Rules | Discovery (before 2017) | Confirmation (from 2017) | |||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| n | avg | t | n | avg vs S&P, 12 mo | beat S&P · up 30+ · down 20+ | held 6 mo · 24 mo | vs small caps | calm / sell-off | ||||
| P/B ≤ 0.6 · non-financials | 1 | 136 | +20.8 | 5.5 | 192 | +41.2 t 3.9 | 54% · 36% · 34% | +9.9 · +63.3 | +41.3 | +20.7 / +92.1 | ||
| P/B ≤ 0.8 · non-financials | 1 | 243 | +16.4 | 5.5 | 365 | +28.5 t 4.6 | 54% · 32% · 32% | +8.6 · +40.1 | +30.0 | +14.2 / +80.8 | ||
| P/B ≤ 0.8 · under $2B · non-financials | 2 | 194 | +19.6 | 5.6 | 293 | +35.8 t 4.8 | 57% · 35% · 32% | +11.7 · +54.1 | +36.8 | +19.5 / +91.9 | ||
| P/B ≤ 0.8 · F-score ≥ 5 · non-financials | 2 | 133 | +12.4 | 3.5 | 174 | +31.1 t 3.7 | 55% · 34% · 32% | +10.7 · +41.1 | +31.2 | +22.1 / +56.8 | ||
| P/B ≤ 1 · yield ≥ 2% · non-financials | 2 | 134 | +9.5 | 3.6 | 185 | +14.4 t 2.9 | 52% · 26% · 29% | +3.5 · +17.4 | +17.3 | +11.6 / +22.5 | ||
| yield ≥ 4% · F-score ≥ 5 · non-financials | 2 | 191 | +7.5 | 3.4 | 302 | +5.0 t 1.7 | 51% · 18% · 25% | +1.1 · +4.7 | +7.5 | +4.8 / +6.2 | ||
| P/B ≤ 1 · F-score ≥ 5 · under $2B · non-financials | 3 | 151 | +14.7 | 4.0 | 233 | +23.7 t 3.6 | 50% · 32% · 35% | +9.5 · +49.7 | +25.8 | +18.8 / +38.6 | ||
| P/B ≤ 1.5 · yield ≥ 3% · under $2B · non-financials | 3 | 123 | +9.7 | 3.6 | 157 | +12.8 t 2.3 | 52% · 25% · 29% | +2.4 · +16.4 | +14.5 | +7.9 / +27.6 | ||
| P/B ≤ 1.5 · yield ≥ 2% · under $2B · non-financials | 3 | 167 | +9.6 | 3.9 | 230 | +11.7 t 2.8 | 53% · 28% · 29% | +2.3 · +13.5 | +13.5 | +7.4 / +24.4 | ||
| P/B ≤ 1.5 · yield ≥ 2% · F-score ≥ 5 · non-financials | 3 | 204 | +6.2 | 3.2 | 274 | +8.7 t 2.7 | 56% · 24% · 27% | +1.5 · +6.8 | +9.7 | +7.8 / +12.0 | ||
| P/B ≤ 1.5 · yield ≥ 3% · F-score ≥ 5 · non-financials | 3 | 140 | +8.1 | 3.9 | 201 | +7.8 t 1.9 | 55% · 21% · 28% | +0.5 · +5.2 | +8.1 | +7.3 / +9.5 | ||
2 · The graveyard — looked great before 2017, failed after
These passed every in-sample gate. Out of sample they did not, and the reason is the lesson. Load one to see its full record and what it would hold today — and why you would not want to.
| Screen | Before 2017: avg | After: avg | After: beat S&P | Why it failed | |
|---|---|---|---|---|---|
| P/B ≤ 1 · under $2B · non-financials | +17.8 | +22.5 | 49% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 1.5 · insider buying · under $2B · non-financials | +16.2 | +19.8 | 49% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 2 · insider buying · under $2B · non-financials | +14.1 | +16.7 | 46% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 1 · non-financials | +14.1 | +17.0 | 48% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 2 · OE-IRR ≥ 12% · under $2B · non-financials | +13.1 | +9.1 | 48% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 1.5 · under $2B · non-financials | +12.0 | +13.6 | 46% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 1.5 · under $2B · Industrials & manufacturing · non-financials | +11.8 | +11.1 | 46% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 1.5 · insider buying · non-financials | +11.2 | +13.8 | 47% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 1.5 · F-score ≥ 7 · under $2B · non-financials | +11.0 | +12.1 | 47% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 1 · F-score ≥ 5 · non-financials | +10.8 | +17.8 | 49% | after the split most entries lost; a few winners carried the average | |
| P/B ≤ 1.5 · Industrials & manufacturing · non-financials | +10.7 | +8.0 | 45% | after the split most entries lost; a few winners carried the average | |
| insider buying · under $2B · non-financials | +10.6 | +14.6 | 43% | after the split most entries lost; a few winners carried the average |
Grid declared in advance (518320 screens with at least one factor filter; 249 had ≥120 company-years in both halves). Discovery on filings before 2017: t ≥ 3, median > 0, and a Benjamini–Hochberg false-discovery rate of 5% across all 249 evaluated screens. Confirmation on filings from 2017 onward, which the search never saw: mean > 0, t ≥ 1.5, median > 0, positive in calm markets. Simpler screens listed first. Outcome = 12-month total return minus the S&P 500; confirmed screens must also be positive held 6 and 24 months (the holding period is tested, not assumed).
3 · The screens we publish, on one yardstick
Whole period (both halves), sorted by average. Load any row to see its full record and today's matching stocks; where a screen has its own page (owner earnings, dividends) that page is linked too.
| Screen | Company-years | Avg vs S&P | Median | vs small caps | Beat S&P | t | Calm | Sell-off | Before / from split | Gate | |
|---|---|---|---|---|---|---|---|---|---|---|---|
| Deep value: P/B ≤ 0.6 | 328 | +32.7 | +11.2 | +32.4 | 59% | 5.2 | +20.7 | +87.4 | +21.1 / +42.3 | Robust | |
| Net-nets: NCAV ≥ 1× price | 93 | +30.5 | +6.4 | +31.8 | 53% | 2.0 | +10.8 | +176.8 | +13.2 / +48.9 | Too few cases | |
| Small-cap value: P/B ≤ 1, under $2B | 758 | +20.7 | +3.2 | +21.5 | 52% | 6.2 | +14.0 | +60.5 | +18.2 / +22.5 | Robust | |
| Value: P/B ≤ 1, all sizes | 988 | +15.8 | +2.1 | +17.0 | 51% | 6.0 | +10.4 | +50.6 | +14.2 / +17.2 | Robust | |
| Quality value: P/B ≤ 1 with F-score ≥ 6 | 319 | +13.3 | +2.5 | +14.1 | 53% | 3.5 | +10.2 | +32.2 | +10.0 / +16.3 | Robust | |
| Dividend yield ≥ 8% (the "too good" bucket) | 193 | +12.9 | +2.4 | +15.1 | 53% | 2.6 | +10.9 | +28.3 | +16.4 / +9.6 | Probable | page → |
| Cheap with insiders buying: P/B ≤ 1.5 + opportunistic buy in prior 6 months | 603 | +12.7 | +1.0 | +13.3 | 51% | 4.2 | +6.3 | +59.3 | +11.7 / +13.6 | Robust | |
| Cheap and paying: P/B ≤ 1.5 with yield ≥ 3% | 541 | +6.6 | +2.3 | +7.9 | 53% | 3.3 | +5.6 | +12.6 | +8.7 / +4.8 | Robust | |
| Owner-earnings deep band (IRR 10–30 over Treasuries, yield ≤ 25%) | 823 | +2.9 | −2.3 | +6.0 | 47% | 1.8 | +1.9 | +7.9 | +5.1 / +1.7 | Could be luck | page → |
| Owner-earnings: IRR ≥ 12%, yield 6–20% | 950 | +2.8 | −2.3 | +5.9 | 47% | 1.9 | +2.0 | +6.8 | +7.1 / +0.3 | Could be luck | page → |
| Dividend yield 3–8% | 1,271 | +0.8 | −0.8 | +2.6 | 48% | 0.9 | +1.5 | −4.2 | +3.6 / −1.5 | Could be luck | page → |
| Expensive on book: P/B ≥ 5 (the control) | 1,815 | −3.9 | −7.6 | +0.1 | 40% | -3.1 | −4.9 | +4.5 | −4.4 / −3.5 | No edge | |
| Large-cap value: P/B ≤ 1.5, over $10B | 187 | −4.2 | −7.0 | −2.3 | 40% | -2.0 | −3.5 | −13.5 | −4.7 / −3.6 | No edge |
The two owner-earnings rows use the live Treasury yield to set their bands, so their numbers move a little with rates. "Insider buying" rows use Form 4 filing dates (what was public by the annual-report date), never trade dates.
