Data through close

Data: what is published and how to fetch it

Everything shown on the ticker pages, screens and chart comes from one public series of derived aggregates, published after every trading day.

What is in the series

One CSV per ticker, one row per trading day, columns:

ColumnMeaning
datetrading day, YYYYMMDD
closeunderlying close
delta_neutraldelta neutral price
gamma_neutralprice where summed gamma is zero
gamma_maxgamma max price
gamma_max_valuesummed gamma at gamma max
n_contractslisted contracts on the ticker
total_calls, total_putslisted call and put contracts
total_open_interestopen interest across the chain
oi_calls, oi_putsopen interest split by option side
max_pain_nearmax pain for the nearest listed expiration
max_pain_near_expiryexpiration used by max_pain_near
max_pain_allmax pain with all listed expirations pooled
gex_totalsigned whole-chain gamma exposure at the close
gex_flipconfirmed price where signed GEX crosses zero
call_wall, put_wallstrikes carrying the largest call/put GEX magnitude

History begins 2020-12-01. Roughly 5,600 tickers have a row on a given day; about 8,700 have appeared at some point.

How to fetch it

Fetch https://halfonadouble.com/api/v1/history/<SYMBOL>.csv, replacing <SYMBOL> with an uppercase symbol from the ticker inventory. This same-origin endpoint follows the active publication atomically and is the supported route for browsers, crawlers and agents. It supports GET, HEAD, range requests and conditional requests. Ticker files may be cached for up to four hours. Data lands after each close, typically before 05:00 UTC the next day.

The separate data host is an upstream storage implementation detail. Its blanket robots policy remains in place because the bucket also contains objects outside this public derived series; automated readers should use the same-origin endpoint above.

JSON API

The read-only OpenAPI description documents stable JSON representations for exact numeric retrieval:

  • Publication metadata states the active methodology, data-through date and URL templates.
  • Ticker inventory lists canonical page symbols and which ones have Markdown snapshots.
  • /api/v1/tickers/<SYMBOL>.json returns one current snapshot and its displayed historical summaries.
  • /api/v1/analysis/<SYMBOL>.json returns the approved same-date ticker aggregates, daily average-IV history and pooled all-expiration max pain payout curve when that symbol is covered by the analytics feed.
  • /api/v1/screens/<SCREEN>.json and level-distance rankings return the same ordered results shown on their canonical pages.

Ticker JSON history summaries include the latest daily open-interest change in contracts, its z-score against the preceding 252 valid changes, and the actual comparison-session count. The unusual-open-interest-accumulation screen selects positive changes at or above +2σ.

Every response includes a schema version, data-through date, methodology, units or field-specific unit names, canonical links and explicit nulls.

Advanced options analytics

The site joins a separate versioned end-of-day feed only when its trading date exactly matches the core Half on a Double publication. Public fields include ticker-level IV rank and average-IV history, the pooled all-expiration max pain payout curve, four coarse strike/spot or days-to-expiration band series, volatility differences, activity ratios, normalized whole-chain exposures and distances to reference levels. The analysis JSON uses an explicit field allowlist; unknown producer fields are withheld. public_schema_version: 4 identifies this aggregate-only representation. Existing clients must tolerate unavailable analysis families.

The four band series are total option volume and net gamma exposure in fixed strike/spot bands (<70%, 70–90%, 90–110%, ≥110%), and put/call open-interest ratio and net delta exposure in fixed DTE bands (0–90, 91–365, >365 days). Each row contains only a band identifier and its pooled metric. A strike-band family is withheld unless every band has at least 10 contributing strikes; a DTE-band family is withheld unless every band has at least five expirations with both call and put open interest. Any malformed source row or mismatch with the public whole-ticker aggregate also withholds that entire family.

The max pain curve contains only settlement strike and total OI-weighted intrinsic payout per share; it omits the 100-share contract multiplier and does not isolate an expiration. Individual contracts, per-contract IV and Greeks, other strike/expiration surfaces, option premiums and pricing inputs are not published. The expected-move and straddle views are unavailable under this boundary. The eight long-option research screens publish matching tickers without their underlying contract identifiers, inputs or scenario details.

The contract-doublers catalyst screen separately publishes contract identifiers, expiration, strike, call/put type and the percentage change over five trading sessions. It includes calendar DTE at the latest close, DTE-weighted research priority points, qualifying counts, comparison dates and coverage. Priority points are not trade scores or catalyst probabilities. Starting and ending option premiums, bid/ask, contract IV and Greeks are omitted from its HTML, JSON and Markdown exports.

The public analysis inventory lists only available aggregate visualizations.

methodology in the publication metadata is part of the data contract. The September 2026 market-implied-carry-v1 generation recomputes the full history and replaces the former fixed-0.25% series. Do not concatenate rows cached from the legacy path with rows from the active generation.

Licence

The published levels are derived aggregates and are yours to use for personal, non-commercial research with a link back to the page or this site. Bulk republication, resale, or use in a product needs permission first; ask through the contact page. Full terms are in the terms of use.

What is not published

The underlying per-contract data (quotes, implied volatilities, greeks per strike) is licensed end-of-day options data and is not redistributed. Only quantities that cannot be converted back into that data are public.

Methodology · Learn · Disclaimer