Insights
Historical Weekly-Options Availability for Backtesting
Alphanume Team · July 31, 2026
Backtest weekly-options strategies with dated expiration-density snapshots, not today's list of stocks with weekly options projected backward.
Historical weekly-options availability is a universe problem before it is a contract-selection problem. Alphanume's Historical Optionable Tickers dataset records which US equities had listed option chains on the first trading day of each month. Each row also reports 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 explains how to use the snapshots in research. The dataset establishes point-in-time listing structure. It does not contain contract prices, strikes, spreads, volume, open interest, or evidence that an order could have executed at a modeled price.
Use the monthly snapshot as the eligibility clock
Each snapshot is dated to the first trading day of its month. For a later signal in that month, select the most recent snapshot available on or before the signal date. Never join to a later month because the future snapshot can reveal a weekly listing that did not yet exist when the signal fired.
Field | Historical meaning | Research limit |
|---|---|---|
date | Point-in-time monthly snapshot | Not a contract quote timestamp |
ticker | Equity had a listed option chain | Not proof of the required strike |
has_weeklies | Whether the served four-gap mean is under nine days | Not continuous availability for the full month |
avg_days_between | Mean of four gaps after the first observed gap | Not liquidity or execution quality |
The average-spacing field is the mean of the four gaps after the first observed expiration gap. Values close to seven describe a dense weekly-style calendar. The binary flag applies the under-nine-day threshold, while the spacing value provides context. Neither field proves that particular consecutive weekly contracts existed.
Retrieve and verify each dated universe
Use equal date_gte and date_lte bounds for one known snapshot, or a wider range to retrieve several. Results paginate by date and ticker. If has_more is true, return both cursor components from next_cursor. After extraction, date and ticker should form a unique key.
GET /v1/optionable-tickers
date_gte=2023-01-01
date_lte=2023-12-31
for each monthly rebalance:
snapshot = latest date where date <= rebalance_date
eligible = rows where date == snapshot and has_weeklies == 1
retain ticker, snapshot, avg_days_between
assert unique(snapshot, ticker)
assert every trade_date >= snapshotSave the actual returned date rather than replacing it with a month label. Holidays make the first trading day differ from the first calendar day. A month-only join can accidentally assign the new snapshot to a signal that occurred before the snapshot existed.
Separate availability from contract construction
The historical universe should gate which equities enter the options backtest. A separate contract dataset must decide expiration, strike, option type, and quote. If the strategy requires six specific weekly contracts, verify the actual contract chain. The density fields are a compact summary, not a substitute for the contract master.
- Filter the universe before applying the strategy signal.
- Retain the selected snapshot date beside every candidate.
- Keep monthly additions and removals instead of backfilling membership.
- Use point-in-time contract and quote data for execution modeling.
A research QA table should show membership count, weekly-flag count, median spacing, additions, and removals by snapshot. Investigate abrupt changes. They may reflect real listing decisions, but they can also expose incomplete pagination or a date-bound error.
Universe changes should be analyzed before strategy performance. For every new weekly-eligible symbol, record the first observed snapshot rather than an inferred listing date. For every removal, keep the last observed snapshot and do not assume why availability changed. The monthly cadence cannot identify an intramonth listing or removal date, so a daily strategy inherits that timing uncertainty. A conservative test can begin eligibility at the first observed monthly snapshot and end it after the last observed one, with the rule documented beside the trade ledger.
Control survivorship, symbol, and liquidity failures
The central failure mode is taking a current weekly-options list and using it across the historical sample. That excludes securities that later lost options and admits securities before they appeared in the historical optionable snapshots or met the served density rule. A second failure is treating has_weeklies=1 as proof of tight markets. Add exact historical contracts, spreads, sizes, volume, and a conservative fill rule before calling a simulated trade executable.
Ticker changes and corporate actions can also break long joins. Use a dated security master where possible. If a symbol cannot be mapped safely, keep it in an exclusion table rather than transferring membership to a current symbol without evidence.
Contract availability also differs from strategy capacity. Even after a symbol passes the historical weekly filter, the chosen expiration may have too little displayed size for the modeled position. Apply liquidity criteria using contemporaneous contract observations and report how many eligible equities fail that second screen. This two-stage design keeps listing survivorship separate from execution survivorship and makes clear which dataset supports each exclusion.
Audit one historical rebalance
As a concrete next action, retrieve the snapshot covering one chosen rebalance, filter to has_weeklies=1, and rank the retained names by avg_days_between for inspection. Export the actual snapshot date and every excluded signal with a reason. Then verify the required weekly contracts and quotes in a separate point-in-time source. This establishes that a dense listed-option universe existed before any option return enters the test without pretending the flag proves exact contracts.