Option-Greeks
Model
Theta Data uses the Black Scholes for all Greeks calculations. More specifically, we use the formulas outlined here.
Tick by Tick
A tick is defined as a row of data. Theta Data calculates Greeks for each tick of data and uses the exact underlying tick (price) at the time of the option tick.
Implied Volatility Guess
We use a fast bisection method to calculate implied volatility. If a close to perfect solution does not exist, you will notice the iv_error value in Greeks requests will begin to increase. This happens with deep in the money or out of the money contracts. This behavior can be found with other models / data providers.
Weird Values?
Let us know, but before you do realize:
Rho & Vega must be divided by 100 to get their value.
We use the EU pricing model outlined above.
Parameters
Dividends
By default, Theta Data calculates Greeks with no dividend. You can supply one of two parameters:
| Parameter | Unit | Example |
|---|---|---|
annual_dividend | Annualized continuous dividend yield, as a decimal | 0.0042 for a 0.42% yield |
annual_dividend_amount | Annual dividend per share, in dollars | 0.96 for $0.96 per year |
annual_dividend is used directly as the dividend yield. annual_dividend_amount is converted to a yield for each tick by dividing it by the underlying price used for that tick; if that price is 0, the tick is calculated with no dividend. A request that sets both to non-zero values is rejected.
Rates
By default, Theta Data uses SOFR as its interest rate. SOFR is reported 1 day after the report date. Theta Data uses the last provided SOFR rate for current day data Greeks calculations. You can specify the rate parameter to override this behavior.
Version
By default, for contracts with fewer than 7 days remaining, DTE is computed using the quote timestamp. For contracts beyond 7 DTE, a whole-number DTE is used. To use the legacy behavior, set version = 1. The legacy calculation applies a fixed DTE of 0.15 on same-day expiration and uses a whole-number DTE for all other cases.
End of Day Option Price
The end of day Greeks and end of day binomial Greeks solve implied volatility against the midpoint of the option's closing NBBO by default. Set option_use_nbbo=false to solve against the option's last trade price of the day (close) instead, which is what v2 eod_greeks uses. A contract with no trades on the day has a close of 0, so its implied volatility and Greeks are not meaningful in this mode. The underlying price is selected separately with underlyer_use_nbbo. End of day Greeks always use a whole-number DTE, with 0.15 on the day of expiration.
Binomial Greeks
The binomial_greeks and binomial_trade_greeks endpoints mirror the regular Greeks endpoints, but calculate with a Leisen-Reimer binomial tree. American-style options can be exercised early at every node of the tree; European-style options only at expiration. See Exercise Style.
| Family | Endpoints |
|---|---|
| Snapshot | all, first order, second order, third order |
| History | all, end of day, first order, second order, third order |
| History, per trade | all, first order, second order, third order |
The same dividend, rate and version parameters described above apply, and rho and vega must still be divided by 100. The all and eod endpoints also return vera, dual_delta, dual_gamma, d1 and d2; d1 and d2 are computed from the volatility the tree solved for.
Step Count
The binomial_steps parameter sets how many steps the tree is built with. It defaults to 101 and accepts 5 to 201; even values are rounded up to the next odd one. More steps are more accurate but slower, and the cost of a request grows with the square of this value. Requests for every expiration (expiration=*) are capped at 101 steps.
Exercise Style
The following European-style index option roots are priced as European. Every other root is priced as American.
| Index | Roots |
|---|---|
| S&P 500 | SPX, SPXW, SPXPM, SPXQ, XSP |
| Nasdaq-100 | NDX, NDXP, XND |
| Russell 2000 | RUT, RUTW, RUTQ, MRUT |
| Cboe Volatility Index | VIX, VIXW |
| Dow Jones Industrial Average | DJX |
| S&P 100 | XEO |
Set exercise_style to american or european to override the style for a request. For example, exercise_style=american on SPXW reproduces the American early-exercise tree output.
Implied Volatility
implied_vol is solved on the binomial tree wherever early exercise can add value, and uses Black-Scholes everywhere else:
| Contract | How implied_vol is solved |
|---|---|
| European-style | Black-Scholes |
| American-style puts | Binomial tree |
American-style calls with annual_dividend or annual_dividend_amount supplied | Binomial tree |
| American-style calls with no dividend | Black-Scholes |
On contracts solved on the tree, implied_vol will not match the Black-Scholes endpoints for the same contract.
Implied Volatility Method
implied_vol_method sets where each contract's implied volatility comes from:
implied_vol_method | Implied volatility |
|---|---|
own_quote (default) | The contract's own bid/ask midpoint. |
out_of_the_money | The out-of-the-money option at the same strike, shared by its call and put. |
Deep in-the-money midpoints are mostly intrinsic value, so their implied volatility and delta are noisy, and some return an implied volatility of 0 and a delta of ±1. Out-of-the-money options are all time value, so out_of_the_money is considered to be more stable.
How out_of_the_money works. Each expiration is solved from its own quotes at each timestamp:
| Step | Method |
|---|---|
| Underlying price | F = K + e^(rT) * (C - P) at the strike where call and put are closest, averaged with its two neighbours, then F * e^(-(r - q)T). Falls back to the underlying's own price. |
| Rate | European-style, 30+ days out, rate left to SOFR: fitted from the slope of C - P against K, which is -e^(-rT). Falls back to SOFR. A rate_value or other rate_type is used as given. |
| Quoted strikes | The out-of-the-money side is solved from (bid + ask) / 2. A bid of 0 counts as unquoted. |
| Between quoted strikes | Interpolated linearly. |
| Past the last quoted strike | Total variance iv^2 * T extended linearly against |ln(K / S)|. |
All Greeks use this underlying price and rate. underlying_price still reports the underlying's own price.
Response columns.
implied_vol_source | Meaning |
|---|---|
own_quote | Solved from the row's own midpoint. |
out_of_the_money | Solved from the out-of-the-money option at the same strike. |
interpolated | Interpolated between solved strikes. |
extrapolated | Extended past the outermost solved strike. An estimate. |
Under out_of_the_money, iv_error is (model price - midpoint) / midpoint.
Request requirements.
| Endpoints | Requirements |
|---|---|
Snapshot binomial_greeks | strike=* and right=both |
History binomial_greeks (all, first, second and third order) | strike=*, right=both, and an interval |
History binomial_greeks/eod | strike=*, right=both, and option_use_nbbo=true (the default) |
Other out_of_the_money requests return a 400 error. binomial_trade_greeks does not support implied_vol_method.
Limitations.
- American-style options spanning an ex-dividend date can price outside their spread when in the money.
- American-style options use SOFR or the requested rate, not an implied rate.
extrapolatedvalues far from the money are estimates.
Underlying History Limitations
For NDX and other Nasdaq GIDS symbols, the underlying price data coverage starts on 2026-05-11. Greeks for NDX options prior to this date cannot be computed from historical underlying data. Use the stock_price parameter on greeks snapshot requests to supply your own underlying price when needed.