Data & MethodologyGuide

Greeks

Every Greek is computed in closed form at the contract's mid implied volatility, never at bid or ask, from the same inputs that solved that IV: the escrowed-dividend spot, the risk-free rate, the time to expiry, and the solved volatility. That is the property that matters. The price, the IV, and the Greeks describe one model that reproduces the option's market mid, so they agree with each other instead of drifting apart. Five of the six are readable through accessors. The scalings differ Greek by Greek, so read the units table before you trust a raw number. Vanna is computed but has no accessor, and in the final minutes of a 0DTE contract the Greeks that divide by time to expiry stop meaning anything.

Updated Jul 20265 min read

How the Greeks are computed

Once a contract's mid IV is solved, the Greeks come from the same Black-Scholes-Merton inputs that produced it: the same escrowed-dividend spot, the same risk-free rate, the same time to expiry, and the solved volatility. Delta, gamma, vanna, theta, vega, and rho are all differentiated from that one parameterization in a single closed-form pass.

Consistency is the point. The Greeks describe the sensitivities of the exact model that reproduces the option's market price, so delta, the IV, and the price agree. A Greek set solved on one volatility and a price marked on another would disagree, and the disagreement would surface in any hedge ratio or exposure sum you built on top.

A small subset of contracts prices under an early-exercise model instead of the European closed form: the gated American early-exercise rows, where early exercise can carry value. For those rows the Greeks are computed by finite differences of the early-exercise price at the solved American IV, so they stay consistent with that contract's own IV in the same way. Every other row uses the closed-form European Greeks. For how the American gate is decided, see how implied volatility is solved.

Units and scalings

The units follow market convention, which means several Greeks are pre-scaled. Read this before you reverse-engineer a value against a textbook formula.

Greek
Sensitivity
Unit as published
delta
option value per $1 move in the underlying
raw. Calls 0 to 1, puts -1 to 0.
gamma
delta per $1 move in the underlying
raw. Always >= 0; largest near the money and as expiry nears.
vega
option value per point of vol
per 1 percentage-point of IV (raw vega ÷ 100).
theta
option value per day
per calendar day (raw annual theta ÷ 365). Usually negative.
rho
option value per point of rate
per 1 percentage-point of the risk-free rate (raw rho ÷ 100).
vanna
delta per unit of vol (equivalently vega per $1 move)
raw, per 1.00 of decimal vol. Feeds VEX.

Delta, gamma, and vanna are raw. Vega and rho are divided by 100, so a vega of 0.12 means the option gains about 0.12 when IV rises one point. Theta is the raw annual figure divided by 365, so a theta of -0.04 means about four cents of decay per calendar day.

Why rho uses the dividend-aware model

Rho is computed with the dividend effect escrowed into the spot and a solve yield of zero, the same construction the IV was solved under. That keeps it internally consistent with the published IV and with the other five Greeks.

The alternative gets rho wrong. A plain Black-Scholes rho that ignores the dividend treatment is inconsistent with the escrowed-spot IV, and for calls it can carry the wrong sign. Matching rho to the model that actually priced the contract removes that failure mode, so you can use the call rho and the put rho without checking which regime produced them.

When a Greek is null

A Greek is null in exactly the cases where the mid IV is null. If there is no usable volatility for a contract, there is no meaningful sensitivity to publish, so the platform returns null rather than a fabricated number. Those cases are:

  • No market. Both sides of the quote are zero, so there is no mark to solve.
  • Below intrinsic. The mark sits under the no-arbitrage lower bound and the model cannot price it.
  • Solver failure. The IV solve did not converge on a contract that had a market.
  • Out of band. The solved IV fell outside the accepted band and was rejected.
  • Missing input. A required input (spot or time to expiry) was absent going into the solve.

Because the Greeks and the IV null together, a null Greek is never a silent zero. It tells you the underlying volatility was not usable, which is the same information the IV status carries.

0DTE and the floored-t explosion

Time to expiry is floored at one minute so the pricing math never divides by zero at the moment of expiry. That floor has a consequence for 0DTE contracts in their last minutes: gamma and vega scale like 1 / (sigma * sqrt(t)), so as t hits the floor they blow up. The large value is an artifact of an arbitrary 60-second floor, not a real sensitivity the market would price.

The platform still publishes those per-contract gamma and vega, with an internal flag marking the floored rows. But it excludes them from the GEX and VEX aggregates, where a single exploded contract would otherwise dominate the whole dealer-exposure sum. The per-contract number is honest about being extreme; the aggregate refuses to let one degenerate row swamp it.

Warning

A gamma or vega read on a 0DTE contract in its final minutes is dominated by the one-minute time floor, not by market conditions. Treat those values as unreliable near expiry.

What you read: the Greek accessors

Five Greeks are exposed as option accessors: option.delta(...), option.gamma(...), option.theta(...), option.vega(...), and option.rho(...). Each returns a Signal on the equity-option spine, interpolated across the bracketing contracts in DTE and either delta or log-moneyness, so you read a point off a continuous surface rather than a single listed strike.

// 30-DTE gamma, at-the-money-forward put (log-moneyness 0)
option.gamma(30, type="put", moneyness=0.0)

Inside a backtest, all five Greeks are also available as columns on the selected contract, both on option.contract(...) and on a resolved leg, which is how an adjustment trigger reads leg("short_put").delta. Each Greek also carries a size-scaled column (scaled_delta through scaled_rho) that multiplies the Greek by the leg's signed per-lot size.

Vanna is computed but not exposed

Vanna is computed for every contract alongside the other five Greeks, but it exists to feed VEX, the vol-channel analogue of the gamma exposure that feeds GEX. It has no accessor and no column on the contract-selection surface. You cannot read a contract's vanna directly in the DSL. Where you need the vol-of-delta channel, VEX is the aggregate that vanna rolls up into.

The 0DTE replication caveat

The flag that marks a floored-t row is not exposed in the DSL. That has one honest consequence worth stating plainly: if you aggregate Greeks yourself off option.contract(...), you cannot see which contracts sit at the one-minute time floor, so you cannot reproduce the 0DTE exclusion that the built-in GEX and VEX aggregates apply. Your hand-rolled sum will include the exploded 0DTE rows that the platform's own aggregates drop. Prefer the built-in GEX and VEX values when you need a dealer-exposure sum that already handles the floor.

Was this page helpful?