Skip to content

Implied Volatility

FreeValueStandardPro

Fetch implied volatility history (intraday, sampled by interval).

  • 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 timestamp field. You can read more about how Theta Data calculates greeks here.
  • Multi-day requests are limited to 1 month of data.
SPY · 20250321
Client
Auth
Style
from thetadatadx import Client

client = Client.from_env()

rows = client.market_data.option_history_greeks_implied_volatility(
    "SPY", "20250321",
    strike="570", right="C", interval="1m",
)
for t in rows:
    print(t.date, t.implied_volatility, t.iv_error)
Sample response · JSON
[
  {
    "ask": 0,
    "ask_implied_vol": 0,
    "bid": 0,
    "bid_implied_vol": 0,
    "implied_vol": 0,
    "iv_error": 100,
    "midpoint": 0,
    "timestamp": "2024-11-04T09:30:00",
    "underlying_price": 221,
    "underlying_timestamp": "2024-11-04T09:30:00"
  },
  {
    "ask": 3.85,
    "ask_implied_vol": 0.3747,
    "bid": 3.75,
    "bid_implied_vol": 0.364,
    "implied_vol": 0.3693,
    "iv_error": 0,
    "midpoint": 3.8,
    "timestamp": "2024-11-04T09:35:00",
    "underlying_price": 220.66,
    "underlying_timestamp": "2024-11-04T09:35:00"
  },
  {
    "ask": 3.8,
    "ask_implied_vol": 0.3752,
    "bid": 3.7,
    "bid_implied_vol": 0.3643,
    "implied_vol": 0.3698,
    "iv_error": 0,
    "midpoint": 3.75,
    "timestamp": "2024-11-04T09:40:00",
    "underlying_price": 220.56,
    "underlying_timestamp": "2024-11-04T09:40:00"
  }
]

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. Use both or * (alias) for calls and puts. Accepted values: call, put, both, *.
datedatenoSingle date YYYYMMDD. Supply this for a single-day pull, or supply start_date/end_date for a range. When present, date takes precedence over the range.
intervalstringno1sInterval preset. Defaults to 1s when omitted — matching the upstream ThetaData Python library. Accepted values: tick, 10ms, 100ms, 500ms, 1s, 5s, 10s, 15s, 30s, 1m, 5m, 10m, 15m, 30m, 1h.
start_timestringno09:30:00Start time filter
end_timestringno16:00:00End time filter
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.
versionstringnolatestGreeks model version. Accepted values: latest, 1.
strike_rangeintnoStrike range filter
start_datedatenoStart date YYYYMMDD
end_datedatenoEnd date YYYYMMDD
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.