Alphanume

Insights

How to Backtest Reverse Splits Using First-Seen and Execution Dates

Alphanume Team · September 4, 2026

Reverse splits have two useful clocks: when the event enters the research feed and when the consolidated shares begin trading.

The most important choice in a reverse-split backtest is the event timestamp. Alphanume's Enriched Reverse Splits dataset carries an execution date and a first_seen_at timestamp. Those fields answer different questions, and treating them as interchangeable can create a clean-looking result that was impossible to trade.

Execution date anchors the corporate action itself. First-seen time records when Alphanume first observed the event in its upstream feed. A historical backfill can only reconstruct the first field reliably, so older rows use a disclosed synthetic first-seen value equal to execution. That limitation should determine which rows enter a live-signal study.

Start with the question, then choose the clock

There are two legitimate research designs. An event study asks what prices did around the day the reverse split took effect. A tradable-alert study asks what happened after the event first became observable to the research system. The first design can use the historical ledger. The second requires genuine forward observation timestamps.

Research question

Anchor

Eligible rows

What it measures

What happens around execution?

date or execution_date

Past executed events

Price behavior around the consolidation

Could a user act after the feed saw it?

first_seen_at

Live and forward-observed rows only

A system-specific alert workflow

What is on the upcoming calendar?

first_seen_at and future execution date

Current forward rows

Lead time before execution

The reverse-split documentation does not label first_seen_at as the issuer's announcement time. An exchange notice, press release, SEC filing, and vendor record can arrive at different moments. Use "first seen by Alphanume" throughout the analysis unless you separately collect and verify an issuer announcement source.

Treat historical first-seen values as synthetic

For live and forward rows, first_seen_at is a genuine observation timestamp. For events created during the pre-launch backfill, it is set to the execution date. That synthetic value preserves a complete schema, but it does not recreate advance notice. A backtest that reads those backfilled rows as if they were alerts gives itself information at a time the feed did not exist.

Create an explicit timestamp-quality field before analysis. Genuine observations can support lead-time and post-alert tests. Synthetic observations can support execution-date event studies only. Do not mix the two groups in an average lead-time table, and do not infer that zero days of lead time means the market learned about the split on execution morning.

  • Genuine first seen: captured while the event was live or forward in the daily feed.
  • Synthetic first seen: assigned during backfill and equal to the execution date.
  • Execution date: the date the consolidated shares are scheduled to begin trading.
  • Last updated: a revision timestamp, useful for audits but not a substitute for first seen.

Store the raw row and the timestamp classification together. If the upstream vendor later revises the split terms or date, the current row can change. A serious live test should preserve snapshots so it can distinguish the initial observation from the final corrected record.

Build an execution-date event study

The historical design starts with executed events and aligns returns around the execution date. Use unadjusted prices to verify the mechanical price jump, then use split-adjusted returns for economic performance. Mixing unadjusted prices across the split boundary creates a large positive return that is only arithmetic.

Define the cohort before calculating returns. Useful fields include the normalized ratio, deficiency-sized flag, pre-event sub-dollar flag, point-in-time market-cap tier, optionable status, and counts of recent S-1 and shelf filings. Those controls separate a deep consolidation by a distressed nano cap from a routine share adjustment by a healthier issuer.

import requests
import pandas as pd

url = "https://api.alphanume.com/v1/capital/reverse-splits"
params = {
    "date_gte": "2024-01-01",
    "date_lte": "2026-06-30",
    "ratio_lte": 0.1,
    "deficiency_only": "true",
    "api_key": "alp_abc123",
}

rows = requests.get(url, params=params, timeout=30).json()["data"]
events = pd.DataFrame(rows)

events["synthetic_first_seen"] = (
    pd.to_datetime(events["first_seen_at"]).dt.date
    == pd.to_datetime(events["execution_date"]).dt.date
)

print(events.groupby(["market_cap_tier", "synthetic_first_seen"]).size())

Equality between the dates is a useful audit flag, not a perfect provenance test by itself. The documented coverage era and stored raw snapshots should make the final classification. Keep the rule in configuration so the analysis can be rerun if provenance metadata becomes more explicit.

Build a separate first-seen study

A first-seen study should begin only when genuine observation timestamps are available. At each first-seen time, save the scheduled execution date and the fields actually populated then. Upcoming rows cannot yet have pre-execution close, market-cap, or other enrichment that depends on the event occurring. Using those later-enriched values at the alert time introduces lookahead.

  1. Capture each new forward row and its complete initial payload.
  2. Calculate calendar and trading-session lead time to the scheduled execution date.
  3. Freeze the initial split ratio and date, then log later revisions separately.
  4. Join only market data and filings available at the observation timestamp.
  5. Measure returns from a documented executable time after first seen and again around execution.

This design answers whether the feed creates a usable research window. It does not establish when the issuer first disclosed the event to the market. If announcement timing is the research target, build a separate source table from dated company releases, exchange notices, or filings and retain the original URLs.

Handle returns and corporate actions correctly

Reverse splits create several avoidable measurement errors. Use split-adjusted prices for returns, but retain unadjusted pre-event prices when testing sub-dollar status or realistic order size. Confirm the vendor's adjustment date because an off-by-one split factor can move the apparent event return into the wrong session.

  • Use the last tradable session before execution as the pre-event anchor.
  • Keep delistings, halts, ticker changes, and missing prices in an exception table.
  • Do not forward-fill market cap or optionability across an unresolved ticker transition.
  • Separate close-to-close event returns from any short strategy's entry and exit assumptions.
  • Cluster uncertainty by event date when several splits occur in the same market regime.

Short simulations need borrow availability, locate fees, financing cost, spreads, and buy-in risk from another source. The weakest companies can have the most negative raw returns and the least executable borrow. Report event returns first, then show how each cost layer changes the subset that could plausibly be traded.

Use enrichment as controls, not a story generator

The dataset attaches market-cap tier, sector, point-in-time optionability, pre-event sub-dollar status, and prior-year dilution and shelf counts. These fields support pre-declared subgroup tests. They do not prove why a particular company completed a reverse split.

A related guide on reverse stock splits and delisting risk explains the listing context. For the backtest, keep the claims narrower: compare deep and shallow ratios, nano and larger issuers, deficiency candidates, and companies with or without recent financing filings. Report sample sizes beside every subgroup result.

The final research package should contain the event query, raw pages, timestamp-provenance rule, corporate-action adjustment checks, price exceptions, and separate outputs for the execution-date and genuine first-seen cohorts. If the two studies disagree, that is a finding about timing rather than a reason to average them together.

A clean first run

Begin with executed 1-for-10 or deeper consolidations from 2024 onward, where point-in-time market-cap enrichment is available. Produce an execution-date event table first. Then start a forward snapshot archive and wait for enough genuine first-seen observations before estimating alert performance.

You can inspect the fields and current calendar in the Enriched Reverse Splits explorer. Historical API access is available through Alphanume's current plans. Keep the two clocks separate and the backtest will answer a question that could actually have been asked at the time.