How haltpredict scores a halt.

Every NASDAQ trading halt creates a five-minute window where price data freezes. We use that window to compute a directional call — UP, DOWN, or no-call — based on the historical behavior of the 71,336 halts since August 2019. This page documents how we do it, what we measure, and where we’re still uncertain.

What goes into a call.

At the moment of halt, we score five features that prior halts shared:

  • Halt number today (1st, 2nd, 3rd, 4th, 5+)
  • Price tier (<$2, $2-5, $5-10, $10+)
  • Direction at halt (UP if price moved up in the five minutes before halt, DOWN otherwise)
  • Time window (open, morning, midday, afternoon, power hour)
  • News flag (news within 1 hour, 1-4 hours, 4-24 hours, none)

Each combination of those five features is a “bucket.” There are 2,000 possible buckets; the historical corpus has populated about 1,800 of them with at least one prior halt. The bucket your halt lands in is the answer to: “What did similar halts do?”

How the lookup is computed.

For each bucket, we count how many of its prior halts reopened higher (UP) and lower (DOWN). The raw rate is naive — a bucket with three prior halts and three UP outcomes would falsely read 100% UP.

We apply Bayesian smoothing toward the population mean. The smoothed probability is:

p_up_smoothed = (n × p + k × μ) / (n + k)

Where n is the bucket’s sample size, p is its raw UP rate, μ is the population UP rate (~50%), and k=50 is the prior weight. With three samples, the smoothed estimate is pulled most of the way back to 50%; with 200 samples, the bucket’s own data dominates. This is the same shrinkage approach used by sports analytics, baseball BABIP estimates, and most modern recommendation systems.

A bucket with 100 prior halts where 67 went UP would compute:

p_up_smoothed = (100 × 0.67 + 50 × 0.50) / (100 + 50) = 60.6%

That’s the probability we report as the model’s UP confidence. It’s lower than the bucket’s raw 67% because we don’t fully trust 100 samples — but it’s well above the 50% coinflip baseline.

How the accuracy is measured.

The model’s accuracy is measured by a strict walk-forward backtest. For every halt in the corpus, we score it using only buckets built from halts that occurred strictly before its halt timestamp. No halt is scored against a bucket that includes itself or any future halt. This is the only way to simulate live performance honestly.

One honest caveat first, because it changes how you should read every number on this page. The old “directional accuracy” figures we used to headline measured direction from the halt price — whether the stock reopened above or below where it froze. A limit-up halt reopens higher than the halt price almost by definition, so that number is close to a tautology: it mostly re-describes the halt, it doesn’t predict anything you can act on. We’ve stopped publishing it.

What we report instead are historical base rates measured from the reopen price — the price you’d actually see when trading resumes. These are descriptions of what a crowd of past halts did, not predictions for any single halt:

  • Stocks that reopened sharply higher after a limit-up halt (a gap of 10%+) closed below their reopen price by end of day about 65% of the time (n≈389).
  • The larger the reopen gap, the more often it faded: ~65% for 10–25% gaps (n=203), ~65% for 25–50% (n=149), ~68% for 50%+ (n=37).
  • Ordinary halts with a small reopen gap (<10%, n=6,013) are roughly a coinflip from the reopen — the halt carries no reliable directional edge.

We tested whether our internal conviction score separates winners from losers when measured from the reopen, within a single halt type. It does not — the high-score bucket did no better than “watch.” So we do not sell a high-conviction accuracy tier. If that changes and the separation holds out of sample, we’ll publish it with the sample size attached.

All base rates above are computed from our NASDAQ LULD halt corpus (reopen and end-of-day prices). They are historical context, not predictions, and nothing here is advice to buy, sell, or short.

Where the model is wrong.

The model has known weak spots, and we’d rather you know about them upfront.

Cascade halts (3rd, 4th, 5+ same-ticker halts in one day) are harder to predict than first halts. The signal degrades because cascade behavior is more news-driven than pattern-driven, and bucket sample sizes shrink. We report a separate cascade probability on these calls.

Tier C buckets (fewer than 30 prior halts) are flagged as low-confidence. About 6% of live calls fall in Tier C. We don’t suppress them, but we mark them so you don’t trade them as if they had Tier A backing.

Pre-market and after-hours halts are excluded from the backtest. Their reopen behavior diverges from regular-session halts, and conflating them would inflate the headline accuracy.

Reopen-price integrity. A May 2026 audit found that 233 halts in our 39,939-halt scoring corpus (about 0.6%) have recorded reopen prices that don’t replicate against the underlying minute-bar data. The cluster is dominated by RGC’s May 2025 squeeze series, with a long tail of other micro-cap volatile tickers. Pre-market mis-capture explains only a small minority of cases; the rest look like stale values or upstream pipeline mis-matches we haven’t fully isolated. We’re shipping a quarantine column and a fixed capture pipeline next. The directional accuracy numbers above are robust to this — we verified the affected halts’ direction signs separately. But any claim we publish in absolute dollars (bot P&L, backtest profitability) is on hold until the audit closes.

What we don’t claim.

We don’t claim the model predicts price targets. The output is direction (UP, DOWN, or no-call) and a probability — not a number to enter at and a number to exit at.

We don’t claim 67% holds in real-money trading. The 67% is the historical hit rate on a large filtered sample; live trading introduces slippage, fills, and behavioral selection effects we don’t model.

We don’t claim the bot makes money. The bot is currently in paper-trading mode and its results are public. We are not publishing aggregate bot P&L numbers right now — the May 2026 reopen-price audit (see above) means our historical bot backtest is not trustworthy in absolute dollars until the data fix ships. We share the bot’s live trades for transparency, not as a track record.

We don’t claim the model improves over time without intervention. New halts are added to the corpus daily, but the lookup buckets are recomputed weekly. We do not currently retrain on a continuous basis.

Audit trail.

The model is documented in three places:

  • The corpus: 71,336 halts since August 2019, halts table in our database. Coverage and field-level integrity are tracked in the public Phase B/C backfill runbook.
  • The backtest report: docs/v2-lookup-backtest.md. Every accuracy number on this page is sourced from there.
  • The walk-forward verification: docs/v2-filter-backtest.md and docs/v2-filter-backtest-audits.md show the bucket-coverage distribution, the outlier audit, and the per-trade economics under live-fillable assumptions.

If a journalist, prospective subscriber, or skeptic asks for a number we cite on the homepage and we can’t trace it back to one of those documents, that’s a bug. Email it to support@haltpredict.com.

What this page is for.

Most prediction tools sell you a number and dare you to disprove it. We’d rather you understand the number, see how it was computed, and decide for yourself whether it earns a place in your stack. If you’ve read this far and it still seems honest, the live scoreboard is one click away.

→ See live predictions