Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Sign up
Appearance settings

How the "Crash Signal" actually works — methodology + the 73% number #2

manja316 started this conversation in General
Discussion options

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:

# Crash signals: dropped >15% from recent high (proxy: one_day_change < -0.15)
crash_signals = sorted(
 [m for m in markets if m["one_day_change"] is not None
 and float(m["one_day_change"]) <= -0.15],
 key=lambda m: 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 500ドルk 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:

  1. Liquidity-weighted version — drop anything under ~1ドルk 24h volume from the crash list. Probably halves the false-positive rate.
  2. Window the signal — separate "crashed in last 1h" vs "drifting down all day" because they're different setups.
  3. Exclude resolution-imminent markets — anything resolving in <72h gets its own bucket since mean reversion inverts there.
  4. 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.

You must be logged in to vote

Replies: 0 comments

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
1 participant

AltStyle によって変換されたページ (->オリジナル) /