Skip to main content
Listed options expire on fixed dates, so the “1-month” option on the screen today is a different contract from the one a week ago, and its time to expiry shrinks every hour. A series built from listed contracts drifts and jumps on every roll. The IV series fixes the time to expiry and the delta instead. Each point answers one question:
At this hour, what implied volatility did the market price for an option exactly T days from expiry, at exactly this delta?

The three coordinates

Tenor

tenor_label fixes the time to expiry: 1d, 1w, 2w, 1m, 2m, 3m, 6m, 9m or 1y.

Delta

delta_target_pct fixes moneyness, in absolute delta percent: 5 to 50 in steps of 5. 50 is at-the-money.

Side

option_type picks calls (C) or puts (P). A 25-delta put is out-of-the-money downside; a 25-delta call is out-of-the-money upside.
At 50 delta the call and the put carry the same IV, so either side gives the at-the-money series.

How a point is built

For each hour, Sandmark takes the two listed expiries that bracket the tenor, one just before it and one just after. It reads each one’s IV at the target delta from the mark surface, then interpolates between them in total variance (σ²·T), which is the standard way to interpolate vol across time without creating arbitrage. Each row shows how it was built, so you can audit any point:
number
The interpolated implied volatility, decimal. 0.3732 is 37.32 vol.
number
IV of the bracketing expiries at the target delta.
number
Days to expiry of those two expiries. TENOR_DAYS always lies between them.
number
The delta actually achieved. ATM_DIST is its distance from DELTA_TARGET.
string
The interpolation used, currently total_variance_interp.

Common series

Risk reversal and butterfly come straight from these series. Fetch the 25-delta call and put for the same tenor and join them on DATETIME:
  • RR25 = σ(25Δ call) − σ(25Δ put). Negative means puts are bid.
  • BF25 = (σ(25Δ call) + σ(25Δ put)) / 2 − σ(ATM)

Vol surface

Two published vol surfaces exist, and they differ slightly on every point (about 0.08 vol on average). IV_MARK is the default and the one Sandmark uses everywhere. Pass iv_source_col=IV_MARK_COMPUTED only if you specifically want the alternative surface, and keep the same choice for a whole analysis. Mixing surfaces in one risk reversal produces a number that isn’t one.