A 5,600-Stock Drawdown Sieve: Split Artifacts, Borrowed Heritage, and Adversarial Verification
An engineering case study on screening the full US common-stock universe for long-lived businesses at deep discounts — and on the three classes of false positive that make a naive drawdown screen almost entirely wrong.
Summary
Screening every US common stock for names trading 30%+ below their all-time high produces 3,873 hits from a 5,600-stock universe — and the overwhelming majority are false positives. Reverse splits make old per-share highs permanently unreachable, corporate heritage gets borrowed through acquisition, and stale peaks from decades-old bubbles masquerade as current discounts. The engineering value here is entirely in the filters that remove those three classes, and in an adversarial verification pass that refuted two names which had already survived every automated check.
The screen, and why the first output is garbage
The question was narrow: which businesses that have operated continuously for 50 years or more are currently trading at least 30% below their all-time high? A long operating history is a crude but real proxy for having survived multiple regimes, and a deep drawdown is where mispricing tends to live.
The mechanical part is straightforward. Build the universe from NASDAQ's official symbol directories — free, authoritative, and updated daily — then pull maximum-history monthly bars from the Yahoo chart API and compute the split-adjusted drawdown from the highest high on record.
# Universe filtering: the exclusions matter more than the inclusion.
for line in directory_lines:
sym, name, etf, test = parse(line)
if etf == "Y" or test == "Y" or "$" in sym:
continue
low = name.lower()
# Warrants, rights, units, preferreds, depositary shares and notes all
# trade under equity-looking tickers and none of them are common stock.
if any(k in low for k in ("warrant", " right", " unit", "preferred",
"depositary", "notes due", " etn",
"trust preferred", "%")):
continue
universe.append((sym.replace(".", "-"), name))That produced 5,599 tickers, of which 3,873 were trading 30% or more below their all-time high. Nearly 70% of the market being deeply discounted should immediately tell you the screen is measuring something other than what you meant.
False positive 1: the reverse-split artifact
This is the big one, and it is invisible unless you go looking. A company that nearly failed in 2008, diluted massively, and then did a 1-for-10 reverse split has a pre-crisis per-share price that is permanently unreachable — not because the business is discounted today, but because the share count was restructured underneath it.
The screen dutifully reports these as the deepest bargains in the universe. In this run, several banks surfaced with drawdowns of 41%, 78%, and worse, that are in fact trading at or near 52-week highs right now. Reverse split ratios of 1-for-7, 1-for-10, and 1-for-20 all appeared. The 'discount' already happened — to the shareholders of 2006 to 2008, permanently.
- Any drawdown whose peak predates a known reverse split is suspect by default and needs the split ratio applied or the peak discarded.
- Cross-check every deep drawdown against the stock's current position in its 52-week range. A name simultaneously '78% off its high' and 'at a 52-week high' is an artifact every time, and this check is nearly free.
- The same pattern appears without a split whenever a company issued enough equity to permanently reset per-share economics.
A related variant: a listing whose ticker history includes a predecessor company pollutes the ATH. One defence name showed a 70.9% drawdown that was really about 13%, because an unrelated legacy listing sat in the same price series.
False positive 2: stale peaks from a different world
A maximum-history high has no expiry date, so a bubble peak stays in the denominator forever. An oilfield-services company showed a 44% drawdown against a high set during $140 oil in 2008, while currently posting record profitability. A display manufacturer showed 52% off a 2007 peak after making a new adjusted high earlier in 2026.
These are not errors in the data — they are errors in what the metric means. The fix is to treat drawdown as a starting question rather than an answer, and to classify each one by cause: cyclical peak, multiple compression, business deterioration, or artifact. That classification cannot be automated from price alone, which is the honest finding.
| Drawdown cause | What it means | Screen treatment |
|---|---|---|
| Reverse-split / dilution artifact | Discount is unreachable, not available | Exclude |
| Stale bubble peak | Comparison to a regime that no longer exists | Exclude or re-baseline |
| Multiple compression | Business fine, former price was silly | Keep — often the real find |
| Cyclical earnings trough | Depends entirely on cycle position | Keep with a cycle caveat |
| Structural deterioration | The market is right | Exclude as a value trap |
False positive 3: borrowed heritage
The 50-year criterion turned out to be the subtlest filter, because corporate lineage is routinely claimed rather than held. A company founded in 2021 can market itself around a 19th-century brand it acquired, and databases will often carry the older founding date.
The rule adopted was that heritage acquired through acquisition is disqualifying — the operating entity must itself have run continuously. Two names that had passed every prior stage were refuted at this step: one whose entity was incorporated in 2021 while the claimed 1816 lineage stayed with a different parent, and one whose own 10-K states it was organized in 1980 with the older heritage belonging to a dissolved predecessor.
The general technique: verify founding claims against the company's own filings rather than any aggregator, and treat a mismatch between marketing history and the 10-K as disqualifying rather than as a rounding error. A third name was flagged uncertain rather than refuted — brand formed 1976, operations dating to 1898, but the listed corporation was incorporated 1988 and acquired the brand in 2004 — and kept with the caveat attached rather than silently resolved.
Adversarial verification as a pipeline stage
The stage that added the most value was the least automated. After classification and fundamental deep-dives, every surviving name went through a pass whose explicit goal was to destroy it: challenge the founding lineage, re-check fundamentals against filings and press releases, and attack the moat on its weakest pillar rather than restating its strongest.
- Two names were refuted outright and moved to the value-trap section rather than being quietly dropped — the refutations are part of the output.
- Several survivors kept explicit verification flags. One top-ranked name carries a note that its moat is 'eroding at the edges' in one segment; another carries an active fiduciary lawsuit and a rating downgrade against an otherwise pristine setup.
- Quality scores were revised down where the challenge landed. One name sits at 3.5 rather than 4+ specifically because the bear case on competitive overbuild is credible.
- One name was excluded purely because its verification record in the dataset was incomplete — absence of verification treated as failure, not as a pass.
This maps directly onto how I write invariant tests for contracts: the useful pass is the one trying to break the thing, and the record of what survived an attack is worth more than a list of what was never challenged.
Results
The funnel: 5,599 tickers → 3,873 at 30%+ below all-time high → classified for 50+ years of continuous operation → fundamentals and moat deep-dive → adversarial verification → 31 verified survivors, of which roughly half were judged genuinely discounted and the rest fairly priced businesses whose former price was the anomaly.
Survivors were scored on moat durability and business quality, then split by verdict. A sample of the range, as of mid-July 2026:
| Symbol | Founded | Drawdown | Moat | Why it was down |
|---|---|---|---|---|
| ERIE | 1925 | ~58% | Sole attorney-in-fact for a reciprocal insurer | 2024 thin-float valuation unwind |
| PEP | 1898 | ~30% | Brand plus direct-store distribution | GLP-1 volume fear, North American snack weakness |
| DPZ | 1960 | ~35% | Scale, franchising and delivery logistics | Q1 comps miss, value-war sentiment |
| PLAB | 1969 | ~48% | Merchant photomask niche | One weak quarter; net cash was 37% of market cap |
| ARTNA | 1905 | ~46% | Regulated water monopoly | 2020 utility mania unwinding from 30–40x |
| HIFS | 1834 | ~32% | Extreme cost advantage, family-run bank | 2022–23 rate inversion compressed net interest margin |
The pattern across genuine finds was consistent and worth naming: the best candidates were not businesses in trouble but businesses whose former price was indefensible. A regulated water utility at 30–40x earnings in 2020 falling to 15x while raising its dividend for the 32nd consecutive year is a multiple unwinding, not a company breaking.
Reproducibility
The whole sieve runs on free, keyless endpoints in about 35 minutes and writes every fetch to CSV, including failures. Persisting the full universe rather than only the hits is what made the artifact analysis possible after the fact — the interesting debugging happened against rows the screen had already rejected.
- Save every fetch, not just the ones that pass. Re-running a 5,600-symbol crawl to answer a question you did not anticipate is an hour you did not need to spend.
- Retry with backoff on the price API and record which symbols failed rather than letting them vanish from the denominator.
- Keep the raw peak and the adjusted peak as separate columns. Collapsing them is what hides split artifacts.
- A separate script refreshes five-year average and trailing dividend yields for survivors only, because that call is expensive and irrelevant to the 5,568 names that did not make it.
Frequently asked questions
- Why do most deep-drawdown stock screens return junk?
- Three artifact classes dominate the output: reverse splits and heavy dilution that make old per-share highs permanently unreachable, stale peaks from bubbles in a different rate or commodity regime, and predecessor listings polluting the price history. In this run, 3,873 of 5,599 names were 30%+ off their high — the raw hit list is nearly the whole market.
- How do you verify a company's founding date?
- Against the company's own filings, never an aggregator. The specific trap is heritage acquired through acquisition: a recently incorporated entity marketing a centuries-old brand it bought. Two names in this screen were refuted at exactly that check after passing everything before it.
- How long does a 5,600-stock screen take to run?
- About 35 minutes against free keyless endpoints, using maximum-history monthly bars rather than daily data — monthly resolution is sufficient for an all-time-high calculation and cuts the payload by more than an order of magnitude.
- Is this a list of stocks to buy?
- No. It is a case study in screen design and false-positive elimination. The names appear as evidence that the filters work, the figures are a mid-July 2026 snapshot that is already stale, and several survivors carry explicit unresolved risk flags. Not investment advice.
Building something like this?
I'm Harsh Mittal — I build production systems across Web3, AI, and financial infrastructure: smart contracts and DeFi protocols, RAG pipelines and LLM agents, market data infrastructure, and the interfaces on top of them. If this is the kind of problem you're working on, I can help you ship it.