option_history_greeks_eod
FreeValueStandardPro
Retrieve end-of-day Greeks history for an option contract across a date range.
Code Example
rust
let data = tdx
.option_history_greeks_eod("SPY", "20260417", "0", "C", "20260101", "20260301")
.strike_range(5)
.await?;
for t in &data {
println!("date={} implied_volatility={:.4} delta={:.4} gamma={:.4} theta={:.4} vega={:.4} rho={:.4}",
t.date, t.implied_volatility, t.delta, t.gamma, t.theta, t.vega, t.rho);
}python
data = tdx.option_history_greeks_eod(
"SPY",
"20260417",
"0",
"C",
"20260101",
"20260301",
strike_range=5,
)
for t in data:
print(f"date={t.date} implied_volatility={t.implied_volatility:.4f} delta={t.delta:.4f} "
f"gamma={t.gamma:.4f} theta={t.theta:.4f} vega={t.vega:.4f} rho={t.rho:.4f}")typescript
const data = tdx.optionHistoryGreeksEod(
'SPY',
'20260417',
'0',
'C',
'20260101',
'20260301',
strike_range=5,
);
for (const t of data) {
console.log(`date=${t.date} implied_volatility=${t.implied_volatility} delta=${t.delta} gamma=${t.gamma} theta=${t.theta} vega=${t.vega}`);
}cpp
tdx::EndpointRequestOptions options;
options.strike_range = 5;
auto data = client.option_history_greeks_eod("SPY", "20260417", "0", "C", "20260101", "20260301", options);
for (const auto& t : data) {
printf("date=%d implied_volatility=%.4f delta=%.4f gamma=%.4f theta=%.4f vega=%.4f rho=%.4f\n",
t.date, t.implied_volatility, t.delta, t.gamma, t.theta, t.vega, t.rho);
}Parameters
symbolstringrequiredUnderlying symbol
expirationstringrequiredExpiration date in
YYYYMMDD formatstrikestringrequiredStrike price in dollars as a string
rightstringrequired"C" for call, "P" for putstart_datestringrequiredStart date in
YYYYMMDD formatend_datestringrequiredEnd date in
YYYYMMDD formatannual_dividendfloatoptionalOverride annual dividend
rate_typestringoptionalInterest rate type
rate_valuefloatoptionalOverride interest rate value
versionstringoptionalGreeks calculation version
underlyer_use_nbbobooloptionalUse NBBO midpoint for underlying price instead of last trade
max_dteintoptionalMaximum days to expiration
strike_rangeintoptionalStrike range filter. This only narrows a wildcard bulk query; it does not expand a pinned strike into neighboring strikes.
For multi-strike EOD Greeks requests, use a wildcard strike selection first (
strike="0"in ThetaDataDx SDK/MCP,strike=*in the v3 REST API), then applystrike_range.
Response
datestringTrading date
implied_volatilityfloatImplied volatility
deltafloatDelta
gammafloatGamma
thetafloatTheta
vegafloatVega
rhofloatRho
underlying_pricefloatUnderlying close price used
Sample Response
json
[
{"date": 20260302, "implied_volatility": 0.0, "delta": 1.0, "gamma": 0.0, "theta": 0.0, "vega": 0.0, "rho": 0.0},
{"date": 20260304, "implied_volatility": 0.2802, "delta": 0.9912, "gamma": 0.0003, "theta": -0.0725, "vega": 5.5669, "rho": 63.7867},
{"date": 20260305, "implied_volatility": 0.2773, "delta": 0.9913, "gamma": 0.0003, "theta": -0.0704, "vega": 5.4231, "rho": 62.8102}
]EOD Greeks for SPY 2026-04-17 550 call. Deep ITM calls show delta near 1.0. IV of 0.0 indicates the solver could not converge.
Notes
- EOD Greeks are computed using the closing price. Use
underlyer_use_nbboto switch to the NBBO midpoint. - This is ideal for building daily Greeks time series for backtesting or risk reporting.