// TRADERVIEW — WALKTHROUGH

Tutorial index Docs hub
Progress
07 / 18

07.Halts & catalyst radar

Nasdaq trade-halt RSS at 3 seconds, SEC EDGAR Atom every 6 seconds, four PR wires every 30 seconds, and a ticker-extraction NER pass over every headline. All live, all bounded, all WebSocket fan-out to every connected browser.

Halts — Nasdaq RSS at 3-second cadence

The poller in crates/traderview-web/src/live/halts.rs fetches nasdaqtrader.com/rss.aspx?feed=tradehalts every 3 seconds. New entries (by halt timestamp + symbol) push to the in-process VecDeque (cap 2 000) and broadcast on WS /ws/halts. The Halts tile shows the live list with reason-code badges and the row's age in seconds.

  • Reason codes — looked up against a static table. T1 = news-pending, T2 = additional-info, T5 = single-stock-circuit-breaker, LUDP = limit-up-limit-down pause, MWC1/2/3 = market-wide level 1/2/3, H10 = SEC trading suspension, etc.
  • Resumption — the same feed emits resumption rows. The tile shows resumed halts with a struck-through paused glyph; you can filter to only-currently-halted.
  • TTS — the same voice-alert pipeline from the scanner reads new halts aloud ("Halt: S H W Z, code T-One"). Configurable per-account (enable / disable / filter by reason code).
  • Symbol nav — every halt row exposes the standard 6-way symbol-nav context menu (Charts / Options / Research / Earnings / News / Copy).

Catalyst radar — EDGAR + 4 PR wires

The catalyst pipeline aggregates SEC filings and press releases into a single chronological feed with extracted tickers. Five sources, five separate pollers, all writing to the shared catalysts VecDeque (cap 10 000):

SourceURLCadence
SEC EDGARsec.gov/cgi-bin/browse-edgar?action=getcurrent&type=4&output=atom6s
Business WireRSS30s
PR NewswireRSS30s
GlobeNewswireRSS30s
AccessWireRSS30s

EDGAR is the highest-signal source (Form 4 insider trades, 8-K material events, 13G/D stake disclosures) and runs at the tightest cadence the SEC's own throttling allows. The PR wires capture earnings, drug approvals, dividend declarations, M&A, and the long tail of company-issued news.

Ticker extraction (NER)

Catalysts are most useful when you can filter to your symbols. Each ingested headline + summary goes through a ticker-extraction pass:

  • $SYM cashtags — the easiest win. Match \$([A-Z]{1,5})\b.
  • Parenthetical (SYM) — second-easiest. Match \(([A-Z]{1,5})\), then filter against a stop-word list (so (LLC), (USA), (NYSE) don't get flagged as tickers).
  • Exchange-prefixed formsNYSE:, NASDAQ:, AMEX:, OTC:, TSX:. Match (?:NYSE|NASDAQ|AMEX|OTC|TSX):([A-Z]{1,5}).
  • Validation — every extracted candidate is checked against the local symbols table (populated from your imports + the world-markets snapshot universe). Unknown tickers are dropped to keep noise low.

The extracted set lands on the catalyst row as tickers: string[] so the UI can render badges and the search box can filter to "show me only catalysts mentioning my watchlist".

The Catalysts view

frontend/js/views/catalysts.js. Chronological list (newest first) with:

  • Source chip — color-coded per wire.
  • Ticker badges — clickable, jump to per-symbol research dossier (step 08).
  • Headline + 2-line summary — full body on hover or click-to-expand.
  • Source link — opens the original filing / press release.
  • Filter chips — by source, by my-watchlist-only, by has-ticker (drops generic market commentary), by time window.
  • Search box — full-text over the catalyst body.

WS /ws/catalysts pushes new rows live; the page does not poll. New rows animate in at the top; resorting is preserved.

FINRA Reg-SHO short-sale data

Distinct from halts/catalysts but related. cdn.finra.org/equity/regsho/daily/ publishes daily short-sale volume. The Reg-SHO endpoint back-walks the publishing window on demand (not a poller — too much data, too low frequency). Used by the Short Interest view in step 08.

Resilience

  • One feed failing doesn't kill the others. Each poller has its own task; one PR wire timing out for 60 seconds doesn't block the EDGAR poller.
  • Backoff on consecutive failures. A poller that errors 3 times in a row doubles its interval (capped at 5 minutes) and recovers on first success.
  • Empty-update suppression. Repeated polls that return zero new entries don't broadcast anything — the WebSocket only carries deltas.
  • User-Agent. The HTTP client sets a descriptive UA so the SEC's automated abuse-monitor doesn't block us. If you self-host the web binary at scale, set TRADERVIEW_USER_AGENT to something identifying.
What this replaces DayTradeDash ($187/mo) is most of a Warrior Trading subscription's value — and this pipeline (Live Scanner + Halts + Catalysts) is roughly the same surface. No subscription, no upload of your watchlists to a third party.