How every number is produced
Every number on the platform traces back to six raw inputs and one pipeline. Per contract, per minute, a bid/ask quote and its reference data go through a Black-Scholes-Merton inversion that yields implied volatility and the five Greeks. Three side channels reuse the same inputs to produce an implied forward, dealer gamma and vanna exposure, and an ex-earnings IV. Three guarantees hold across all of it. Every read is point-in-time: minute t sees only rows stamped at or before t. Each strike is marked independently rather than fitted to an arbitrage-free surface. And every option.* read is interpolated across the surface, returning null instead of extrapolating where the data is sparse.
The chain is fully built. What differs is reach: a large share of what the pipeline computes has no accessor in the Signal language. Mid IV and the five Greeks come straight off the surface; the implied forward, dealer exposure, the earnings metrics, and several others are computed upstream but have no accessor. The full split lives in one table on this page.
The six raw inputs
Six inputs feed everything downstream. Each has one job.
- 1-minute option bid/ask quotes are the price implied volatility inverts from. The inversion runs against the bid, mid, and ask, producing a bid IV, a mid IV, and an ask IV.
- 1-minute unadjusted stock bars supply the raw spot
S. Raw is the correct choice: when a stock splits, open strikes adjust by the same ratio, so raw spot and raw strike stay contemporaneous in one unit. - Cash dividends (regular cash only) enter as a discrete schedule escrowed into the spot for pricing.
- Splits drive the adjusted stock series, not the options dividend basis, which stays on the same raw basis as spot and strikes.
- Confirmed earnings timestamps drive the ex-earnings decomposition. Only symbols with an earnings calendar get it; broad ETFs and indices do not.
- The Treasury par yield curve becomes the risk-free rate
reach option is priced with, converted to continuously-compounded zero rates and interpolated by days to expiration.
For the meaning and timestamp conventions of each input, see data inputs and point-in-time guarantees. For which symbols carry which inputs, see data coverage.
From quote to IV to Greeks
The spine of the pipeline is a per-contract, per-minute inversion. The pipeline inverts the pricing model against the contract's own bid, mid, and ask to produce three implied volatilities. Dividends are escrowed into the spot before the solve, so the inversion runs with q=0 and the discrete dividend schedule carries the dividend effect instead of a continuous yield. The five Greeks come from the same inputs evaluated at the solved IV, so price, IV, and Greeks stay mutually consistent for that contract at that minute.
The other channels
Three channels branch off the same inputs.
- Implied forward, carry, and borrow. Put-call parity on clean call/put pairs at each expiry yields one implied forward per expiry, and from it the implied carry and borrow.
- Dealer exposure. Gamma and vanna times open interest produce GEX and VEX, additive across strikes and expiries.
- Ex-earnings IV. A variance decomposition across the expiries straddling an event strips the earnings component out, producing an ex-earnings IV and the companion earnings metrics.
Three guarantees that hold everywhere
These hold for every accessor read, on every topic page.
Point-in-time, no-lookahead. A read at minute t takes the most recent row with timestamp <= t, never a future row. This is the same no-lookahead guarantee the Signal language enforces on market data throughout.
Per-contract marks, not an arbitrage-free surface. Each strike is inverted independently from its own quote. There is no surface fitting at this layer, so smiles can lose convexity and term structure can invert. The numbers are honest per-strike marks, not a smoothed, arbitrage-repaired surface.
Interpolated, and null at the edges. Every option.* read is bilinearly interpolated across two dimensions, days to expiration and either delta or log-moneyness. The read fetches the four bracketing contracts and interpolates at each minute. When the surface is sparse or the inversion fails to converge, the result is null rather than an extrapolated value. An IV or Greek read through an accessor is therefore a surface-interpolated value, not a raw per-strike grid value.
What you can read vs. what we compute
The pipeline computes far more than the Signal language exposes. This is the one place the full split lives; each topic page carries only its own rows.
option.iv(dte, ..., iv_type="bid"|"mid"|"ask"), mid by default; the ex-earnings variant via use_ex_earn_iv=Trueis_floored_toption.delta, option.gamma, option.theta, option.vega, option.rhovannaoption.contract(...) and leg columns, the full selected-contract surface: strike, dte, delta, gamma, theta, vega, rho, iv, mid, bid, ask, underlying_price, moneyness, multiplier, size, and the direction-scaled scaled_delta, scaled_gamma, scaled_theta, scaled_vega, scaled_rho (each Greek × size)q, and the next ex-dividend datebar.open, bar.high, bar.low, bar.close, bar.volume (split- and dividend-adjusted by default; raw via their adjustment switches)rtime.* calendar surfaceimplied_carry, implied_borrow, and the forward methodEverything in the right column is computed in the pipeline but has no Signal-language accessor, with the exception of the arbitrage-free surface, which is not computed at all. These quantities exist in the pipeline but cannot be read.
One precise note on the readable set: only the five Greeks (delta, gamma, theta, vega, rho) and iv have a standalone option.* accessor. The rest of the surface, strike, dte, mid, bid, ask, underlying_price, moneyness, multiplier, size, and the scaled_* exposures, is readable only as an option.contract() or leg column, with moneyness additionally usable as the moneyness= selection argument on option.* calls. None of those is a standalone option.* series you can read on its own.
The accessor spine
The bar, option, and time accessors run 09:31 through the market close: 390 trading minutes on a full session, 210 on an early-close day (for example a 13:00 close). Every accessor shares this one clock, so a bar read and an option read align minute for minute. There is no opening-auction or closing-auction trim on the data itself.
If you have seen a 5-minute open or close offset, that is the backtest engine's session bounds, not the data spine: first fill at 09:35, last trade at 15:55 (12:55 on an early close). Those bounds live in fills, marks, and slippage and across the Backtests section, not here. For how sampling and interpolation shape what a single read returns on this spine, see the execution model.