Skip to content

Implied Volatility

FreeValueStandardPro

Get implied volatility snapshot for an option contract (from ThetaData server).

Returns implied volatilies calculated using the national best bid, mid, and ask price of the option respectively. The underlying price represents whatever the last underlying price was at the underlying_timestamp field. You can read more about how Theta Data calculates greeks here.

rust
pub fn option_snapshot_greeks_implied_volatility(&self, symbol: &str, expiration: &str) -> OptionSnapshotGreeksImpliedVolatilityBuilder<'_>

Optional parameters chain on the builder: .strike(&str), .right(&str), .annual_dividend(f64), .rate_type(&str), .rate_value(f64), .stock_price(f64), .version(&str), .max_dte(i32), .strike_range(i32), .min_time(&str), .use_market_value(bool). Execute with .awaitResult<Vec<IvTick>, Error>, or decode chunk-by-chunk with .stream(handler).

Example

rust
let rows = tdx
    .option_snapshot_greeks_implied_volatility("SPY", "20250321")
    .strike("570")
    .right("C")
    .await?;
for t in &rows {
    println!("date={} implied_volatility={} iv_error={}", t.date, t.implied_volatility, t.iv_error);
}

Parameters

NameTypeRequiredDefaultDescription
symbolstringyesTicker symbol (e.g. AAPL)
expirationdateyesExpiration date YYYYMMDD
strikestringno*Strike price in dollars as a string (e.g. 500 or 17.5). Use * for wildcard selection.
rightstringnobothOption side. Accepted values: call, put, both.
annual_dividendfloatnoAnnualized expected dividend amount, in dollars per share, used in the Greeks calculation (e.g. 2.5 is $2.50 per share per year).
rate_typestringnosofrRisk-free-rate source used in the Greeks calculation. Accepted values: sofr, treasury_m1, treasury_m3, treasury_m6, treasury_y1, treasury_y2, treasury_y3, treasury_y5, treasury_y7, treasury_y10, treasury_y20, treasury_y30.
rate_valuefloatnoInterest rate as a percent (4.36 means 4.36%, matching the InterestRateTick.rate convention) used in the Greeks calculation. Applied when rate_type selects a manual rate.
stock_pricefloatnoUnderlying price in dollars used in the Greeks calculation, overriding the observed underlying when set.
versionstringnolatestGreeks model version. Accepted values: latest, 1.
max_dteintnoMaximum days to expiration
strike_rangeintnoStrike range filter
min_timestringnoMinimum time filter
use_market_valueboolnofalseWhen true, calculate Greeks against the option market value (mid-price) instead of the NBBO bid/ask pair.
timeout_msintnoPer-request deadline in milliseconds. 0 means no deadline.

Response

Rows of IvTick:

FieldTypeDescription
ms_of_dayi32Milliseconds since midnight Eastern Time.
bidf64Last NBBO bid price.
bid_implied_volatilityf64Implied volatility solved at the bid price.
midpointf64Midpoint of the bid and ask prices.
implied_volatilityf64Implied volatility solved from the option price.
askf64Last NBBO ask price.
ask_implied_volatilityf64Implied volatility solved at the ask price.
iv_errorf64Residual pricing error of the implied-volatility solve.
underlying_ms_of_dayi32Timestamp of the underlying price, milliseconds since midnight ET.
underlying_pricef64Underlying price used in the calculation (midpoint of the underlying).
datei32Trading date as a YYYYMMDD integer.

Wildcard requests additionally populate expiration (YYYYMMDD), strike (dollars), and right ("C" / "P") on every row to identify the contract; on single-contract requests these are absent (None / null / undefined; the Rust and C rows carry the documented 0 / 0.0 / '\0' fills).

Released under the Apache-2.0 License.