You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
How the "Crash Signal" actually works — methodology + the 73% number
A few people have asked what's behind the red "Crash Signal" cards on the screener and where the "73% mean reversion probability" figure comes from. Posting the actual implementation so it can be checked and argued with — not a marketing claim.
# Crash signals: dropped >15% from recent high (proxy: one_day_change < -0.15)crash_signals=sorted(
[mforminmarketsifm["one_day_change"] isnotNoneandfloat(m["one_day_change"]) <=-0.15],
key=lambdam: float(m["one_day_change"])
)[:12]
That's it. A market shows up as a crash signal when its 24h price change is ≤ -15%, sorted most-negative-first, top 12 shown. one_day_change is sourced from the Polymarket Gamma API field of the same name — it's not something I compute from snapshots, it's what Gamma reports.
Important honest caveats:
It's a proxy for "dropped 15% from recent high", not the literal thing. A market that ran up 30% then dropped 15% won't trip it (because 24h change is still positive). A market that drifted down steadily over 24h will. The variable name in code is "one_day_change" — that's the truth of what's measured.
No volume filter on the signal itself. A $50-volume market can show up alongside a $500k one. The card displays 24h volume so you can see which it is, but the ranking doesn't account for it.
No liquidity filter either. Same caveat.
Where the 73% number comes from
The screener header reads: "Mean reversion probability: 73% based on 5,629 historical events."
That number was computed once, on the historical market_snapshots corpus, by counting markets that hit the ≤ -15% / 24h threshold and then measuring what fraction recovered ≥50% of the drop within 72 hours. The denominator was 5,629 historical events meeting the threshold across the dataset.
What I am NOT claiming:
That 73% is a tradable edge after fees / slippage / order-book depth (it isn't — Polymarket spreads on illiquid markets eat most of it)
That the 5,629 events are independent draws (they aren't — markets co-move during major news events)
That mean reversion holds during resolution-imminent windows (it inverts — a 15% drop on a market resolving in 24h is more likely information than noise)
The number is descriptive of the historical population. It's a starting point for research, not a trading recommendation.
What I'd change if I were rebuilding it
Things I've sat on but haven't shipped because the screener is supposed to stay simple:
Liquidity-weighted version — drop anything under ~$1k 24h volume from the crash list. Probably halves the false-positive rate.
Window the signal — separate "crashed in last 1h" vs "drifting down all day" because they're different setups.
Exclude resolution-imminent markets — anything resolving in <72h gets its own bucket since mean reversion inverts there.
Show the historical base rate per category — political markets mean-revert differently than sports / crypto.
If any of those would change how you'd actually use the screener, the build script is ~750 lines of Python and PRs are welcome. Or just say what would be most useful below — I'd rather build the thing one person actually wants than guess.
Underlying historical data (now 9.5M snapshots, 9,550 markets, refreshed periodically) is on Gumroad for anyone who wants to reproduce or extend the 73% calculation. The screener itself stays free.
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
How the "Crash Signal" actually works — methodology + the 73% number
A few people have asked what's behind the red "Crash Signal" cards on the screener and where the "73% mean reversion probability" figure comes from. Posting the actual implementation so it can be checked and argued with — not a marketing claim.
The signal definition
Straight from
build_screener.py:That's it. A market shows up as a crash signal when its 24h price change is ≤ -15%, sorted most-negative-first, top 12 shown.
one_day_changeis sourced from the Polymarket Gamma API field of the same name — it's not something I compute from snapshots, it's what Gamma reports.Important honest caveats:
Where the 73% number comes from
The screener header reads: "Mean reversion probability: 73% based on 5,629 historical events."
That number was computed once, on the historical
market_snapshotscorpus, by counting markets that hit the ≤ -15% / 24h threshold and then measuring what fraction recovered ≥50% of the drop within 72 hours. The denominator was 5,629 historical events meeting the threshold across the dataset.What I am NOT claiming:
The number is descriptive of the historical population. It's a starting point for research, not a trading recommendation.
What I'd change if I were rebuilding it
Things I've sat on but haven't shipped because the screener is supposed to stay simple:
If any of those would change how you'd actually use the screener, the build script is ~750 lines of Python and PRs are welcome. Or just say what would be most useful below — I'd rather build the thing one person actually wants than guess.
Underlying historical data (now 9.5M snapshots, 9,550 markets, refreshed periodically) is on Gumroad for anyone who wants to reproduce or extend the 73% calculation. The screener itself stays free.
Beta Was this translation helpful? Give feedback.
All reactions