Alphanume

Insights

Measuring Price Behavior After SEC Trading Suspensions

Alphanume Team · August 9, 2026

Measure price behavior after SEC trading suspensions with a complete event cohort, pre-event size controls, and outcome data that retain halted and delisted securities. Spectacular anecdotes are a poor denominator.

The event source is Alphanume's SEC Trading Suspensions dataset, which covers Section 12(k) orders from 1995 forward. One row represents one issuer named in an order. A multi-issuer release becomes multiple rows linked by release_number, and record_id identifies the release plus issuer position.

The suspension feed does not contain stock returns. A survivorship-complete price study needs a separate security master and price source that preserve inactive names, venue changes, stale quotes, and delisting outcomes. The suspension itself is a regulatory event. It is not proof of fraud and it is not a short recommendation.

Choose the event clock

Field

Meaning

Study use

date

SEC release date

Information-release specification

suspended_at

Effective suspension timestamp in Eastern Time

Market-access specification

suspension_end_at

Legal termination timestamp

Defines the order's formal window

resumption_at

First NYSE session strictly after termination

Earliest permitted return to trading

order_url

Primary SEC order

Audit every included event

A release can precede the actual suspension start, so date and suspended_at are not interchangeable. The event-study specification should declare which fact matters. Price behavior after legal resumption also needs an observed trade or quote because resumption_at grants permission and does not prove market activity resumed.

Use the SEC Trading Suspensions documentation to review the timestamp and pagination contract before collecting outcomes.

Pull issuers before outcomes

Query the desired order-date range and keep rows with null tickers. Results use keyset pagination with date, release number, and issuer index. The response cursor names those fields; the next request uses cursor_date, cursor_release_number, and cursor_issuer_index.

import os
import requests

url = "https://api.alphanume.com/v1/market-structure/sec-suspensions"
headers = {"X-API-Key": os.environ["ALPHANUME_API_KEY"]}
params = {"date_gte": "2018-01-01", "date_lte": "2025-12-31"}
events = []

while True:
    response = requests.get(url, headers=headers, params=params, timeout=30)
    response.raise_for_status()
    payload = response.json()
    events.extend(payload["data"])
    if not payload.get("has_more"):
        break
    cursor = payload["next_cursor"]
    params.update({
        "cursor_date": cursor["date"],
        "cursor_release_number": cursor["release_number"],
        "cursor_issuer_index": cursor["issuer_index"],
    })

Keep issuer name as the universal text identifier and preserve CIK, ticker, and listing venue when present. Older and thinly traded cases can lack one or more identifiers. Resolving those cases is part of the study, and dropping them biases the sample toward easier, better-covered securities.

Match size before the order

For each resolved security, find the last eligible trading session before suspended_at and pull Historical Market Cap for that ticker and date. Then select controls from the market-wide snapshot on that same session. A good first pass matches on log market cap and, where a dated classification snapshot exists, sector.

Match input

Suspended issuer value

Control restriction

Observation date

Last session before suspension

Same historical date

Market cap

Point-in-time market_cap

Nearest log-size candidates

Sector

Dated research classification if available

Same stored sector snapshot

Trading status

Tradable before the order

Tradable on the match date

Prior return

Predefined trailing window

Optional caliper set before outcomes

Historical Market Cap returns date, ticker, market_cap, and shares_outstanding. A market-wide exact-date query can require multiple pages. Save the unmatched suspended issuers, missing market-cap rows, and thin control pools in separate counts before calculating returns.

Match without replacement when the control pool is deep enough, and write the tie-breaking rule before viewing outcomes. If several suspended issuers share one release, allow each issuer its own size match while retaining the common release identifier. That preserves issuer-level comparisons without pretending the events were independent regulatory decisions.

Make the outcome denominator honest
  1. Keep inactive securities. Begin with the event list and left join outcomes so delisted cases remain in the denominator.
  2. Define the first observable price. Record whether it is an exchange print, over-the-counter quote, cash distribution, or missing observation.
  3. Set calendar windows. Use elapsed trading sessions from the first observed post-suspension price and also report calendar time since the order.
  4. Handle multi-issuer releases. Cluster uncertainty by release when one order names several issuers.
  5. Freeze controls. Select controls before loading post-event returns and keep failed matches visible.

Section 12(k) orders last no more than 10 business days, yet a security can remain difficult or impossible to trade afterward. Last-observation-carried-forward returns can manufacture a calm outcome from a stale price. Zero returns for missing quotes create the same problem in a different form.

Publish the coverage table first

Run one contained period and produce three artifacts before a performance chart: the complete suspension cohort, the identifier and market-cap match audit, and the post-event price-availability table. Report how many events lack tickers, entity matches, pre-event size, first post-event prices, and control matches.

A multi-year suspension cohort and its historical size controls require full-history access. A free key's trailing 20-session delayed window can test request mechanics, though infrequent suspensions may produce a legitimately empty recent result.

Explore the event fields on the SEC Trading Suspensions page. Only calculate matched excess returns after the missing outcomes and control failures are part of the displayed denominator.