earnings_term_structure
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-10-24, from msft-stock-price-analysis.
| expiry_date | expiry_label | as_of | dte | atm_iv_pct | expected_move_pct | expected_move_usd | contracts |
|---|---|---|---|---|---|---|---|
| 2026-10-30 | 2026/10/30 | 2026/10/22 | 8 | 46.2 | 6.84 | 35.7 | 16 |
| 2026-11-02 | 2026/11/02 | 2026/10/22 | 11 | 40.4 | 7.01 | 36.57 | 14 |
| 2026-11-04 | 2026/11/04 | 2026/10/22 | 13 | 39.2 | 7.39 | 38.59 | 10 |
| 2026-11-06 | 2026/11/06 | 2026/10/22 | 15 | 38.7 | 7.85 | 40.95 | 16 |
| 2026-11-13 | 2026/11/13 | 2026/10/22 | 22 | 35.7 | 8.76 | 45.73 | 8 |
| 2026-11-20 | 2026/11/20 | 2026/10/22 | 29 | 33.1 | 9.32 | 48.65 | 16 |
| 2026-11-27 | 2026/11/27 | 2026/10/22 | 36 | 31.2 | 9.81 | 51.21 | 8 |
| 2026-12-04 | 2026/12/04 | 2026/10/22 | 43 | 31.3 | 10.73 | 56.03 | 8 |
| 2026-12-18 | 2026/12/18 | 2026/10/22 | 57 | 30.2 | 11.93 | 62.27 | 8 |
| 2027-01-15 | 2027/01/15 | 2026/10/22 | 85 | 29.1 | 14.05 | 73.32 | 8 |
| 2027-02-19 | 2027/02/19 | 2026/10/22 | 120 | 30 | 17.2 | 89.79 | 8 |
- Rows × columns
- 11 × 8
- Period covered
- to
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
expiry_date |
date | 2026-10-30 to 2027-02-19 | |
expiry_label |
text | 11 distinct values (2026/10/30, 2026/11/02, 2026/11/04…) | |
as_of |
text | 1 distinct value (2026/10/22) | |
dte |
number | 8 to 120 | |
atm_iv_pct |
number | 29.1 to 46.2 | percent |
expected_move_pct |
number | 6.84 to 17.2 | percent |
expected_move_usd |
number | 35.7 to 89.79 | US dollars |
contracts |
number | 8 to 16 | count |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
Run it yourself
This is the exact query behind the result above. Change a ticker, a date or a column and run it against the warehouse — no account, no key. The no-signup tier is smaller than the one this page was computed on; a query that reaches past it comes back saying which plan runs it.
SELECT
toString(expiration_date) AS expiry_date,
formatDateTime(expiration_date, '%Y/%m/%d') AS expiry_label,
formatDateTime(any(date), '%Y/%m/%d') AS as_of,
any(days_to_expiry) AS dte,
round(avg(implied_volatility) * 100, 1) AS atm_iv_pct,
round(avg(implied_volatility) * sqrt(any(days_to_expiry) / 365) * 100, 2) AS expected_move_pct,
round(any(toFloat64(underlying_close)) * avg(implied_volatility)
* sqrt(any(days_to_expiry) / 365), 2) AS expected_move_usd,
count() AS contracts
FROM global_markets.options_greeks
WHERE underlying_symbol = 'MSFT'
AND date >= today() - 14
AND date = (
SELECT max(date)
FROM global_markets.options_greeks
WHERE underlying_symbol = 'MSFT'
AND date >= today() - 14
)
AND iv_converged = 1
AND volume > 0
AND underlying_close > 0
AND days_to_expiry BETWEEN 5 AND 120
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.02
GROUP BY expiration_date
HAVING count() >= 2
ORDER BY expiration_date
在你的 AI 助理中使用這些資料
開啟即可查詢,已帶入本頁資料。免費,無需帳號。