Insights
Historical Optionable Stocks Database by Month
Alphanume Team · August 11, 2026
Use monthly point-in-time optionable-stock snapshots to decide which equities actually had listed expirations then, before any options strategy applies its signal.
A historical optionable stocks database by month prevents a basic backtest error: selecting today's optionable names and projecting that universe backward. Alphanume's Historical Optionable Tickers dataset records the US equity optionable universe on the first trading day of each month. Each row contains the snapshot date, ticker, the mean of four expiration gaps, and a weekly-style density flag set when that average is under nine days.
The historical optionable tickers guide shows how the snapshots fit into research. The data establish listed-option availability and expiration density at the snapshot. They do not contain historical option prices, strikes, bid-ask spreads, contract volume, or proof that a proposed trade could execute.
Treat membership as a dated research input
Universe membership must be joined by time. For a signal observed during a month, use the latest snapshot available on or before the signal date under a rule chosen in advance. Do not use a later month's record merely because it is closer in calendar days. That would let a future listing decision enter an earlier backtest.
Field | Meaning | Valid use |
|---|---|---|
date | First trading day monthly snapshot | Point-in-time universe join key |
ticker | Equity with listed options in that snapshot | Membership test for that month |
avg_days_between | Mean of four gaps after the first observed gap | Describe expiration density |
has_weeklies | Whether that mean is under nine days | Apply a weekly-style density rule |
avg_days_between is the mean of the four gaps after the first observed expiration gap. Values near seven indicate denser weekly-style spacing, while larger values reflect less frequent calendars. It is not a liquidity score or proof that particular consecutive weekly contracts existed. A densely listed chain can still have wide spreads or low volume.
Pull complete monthly snapshots
To isolate one snapshot, set date_gte and date_lte to its served date. A wider date range can retrieve several months, subject to access limits. Results are ordered by date and ticker, and pagination requires both cursor_date and cursor_ticker from next_cursor. Save every page before comparing membership counts.
GET /v1/optionable-tickers
date_gte=2025-01-01
date_lte=2025-12-31
for each response page:
append date, ticker, avg_days_between, has_weeklies
if has_more:
send cursor_date=next_cursor.date
send cursor_ticker=next_cursor.ticker
membership_key = date + ":" + tickerThe published snapshots are fixed and are not retroactively rewritten. That property makes them useful as a universe input, but the backtest should still preserve the response or extracted membership table used in a research run. A saved artifact makes later code changes distinguishable from changes in the data source.
Validate the pull with simple invariants before using it. Each date and ticker pair should be unique, all dates should correspond to the served monthly snapshot schedule, and a paginated extraction should have no repeated cursor boundary. Compare the number of rows by month and investigate abrupt changes rather than smoothing them away. A large change can be real, but it can also reveal an incomplete page loop or an incorrect date bound.
Align signals without lookahead
Suppose a strategy produces a signal on the fifteenth trading day of the month. A conservative rule is to use that month's first-trading-day snapshot because it was already known. If the strategy trades only at monthly rebalance, join the rebalance to the same dated snapshot. For signals before the month's snapshot exists, use the prior available snapshot or exclude them according to the written policy.
- Build membership from the historical snapshot, not a current broker symbol list.
- Keep absent tickers absent rather than backfilling from a later month.
- Apply has_weeklies only when the strategy truly requires the served under-nine-day density rule.
- Record the snapshot date selected for every simulated trade.
Ticker identity is another limit. The dataset serves symbols, so corporate actions and symbol changes may require a dated security master when joining long histories to prices or fundamentals. Never assume two identical ticker strings across distant years necessarily represent an unchanged security without checking the join source.
Keep optionability separate from tradability
The key failure mode is treating optionable membership as evidence of an executable options trade. A listed chain says nothing by itself about the exact contract, quote quality, open interest, multiplier changes, or fill price. A realistic options backtest must add point-in-time contract and quote data, define strike and expiration selection, model spreads and slippage, and handle corporate actions. The monthly dataset should gate the equity universe, not manufacture missing contract history.
A second failure is treating has_weeklies=0 as no weekly expiration anywhere. It only means the four-gap average was not under nine days. Use avg_days_between and the documented threshold rather than translating the flag into a broader claim.
Audit one year of universe changes
The concrete next action is to retrieve twelve completed monthly snapshots, verify pagination, and produce a table of additions, removals, membership count, weekly-flag count, and median expiration spacing by month. Pick several additions and confirm that the backtest admits them only from their first observed snapshot. Then join a sample signal file by the latest eligible snapshot date and retain that date beside every trade candidate. This makes changing option availability a visible part of the research design instead of a hidden survivorship assumption.