earnings_crush
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-01, from zm-implied-volatility.
| label | iv_two_weeks_pct | iv_peak_pct | iv_after_pct | crush_pct |
|---|---|---|---|---|
| Nov 26, 2024 | 52.4 | 65.6 | 29.3 | 36.3 |
| Feb 25, 2025 | 49.3 | 50.8 | 33.9 | 16.9 |
| May 22, 2025 | 42.9 | 42.8 | 29.3 | 13.5 |
| Aug 22, 2025 | 40.8 | 41.7 | 27.9 | 13.8 |
| Nov 25, 2025 | 45 | 42 | 33.7 | 8.3 |
| Feb 26, 2026 | 53.9 | 54.4 | 40.8 | 13.6 |
| May 21, 2026 | 63.4 | 65 | 41.2 | 23.8 |
| Aug 26, 2026 | 49.3 | 52.4 | 40.3 | 12.1 |
- Rows × columns
- 8 × 5
- 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 |
|---|---|---|---|
label |
text | 8 distinct values (Aug 22, 2025, Aug 26, 2026, Feb 25, 2025…) | |
iv_two_weeks_pct |
number | 40.8 to 63.4 | percent |
iv_peak_pct |
number | 41.7 to 65.6 | percent |
iv_after_pct |
number | 27.9 to 41.2 | percent |
crush_pct |
number | 8.3 to 36.3 | percent |
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.
WITH atm_daily AS
(
SELECT
date,
round(100 * avg(toFloat64(implied_volatility)), 1) AS iv_pct
FROM global_markets.options_greeks
WHERE underlying_symbol = 'ZM'
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 20 AND 45
AND toFloat64(underlying_close) > 0
AND abs(toFloat64(strike_price) / toFloat64(underlying_close) - 1) < 0.05
GROUP BY date
),
seq AS
(
SELECT
date,
iv_pct,
toInt64(rn_raw) AS rn
FROM
(
SELECT
date,
iv_pct,
row_number() OVER (ORDER BY date) AS rn_raw
FROM atm_daily
)
),
events AS
(
SELECT
c.date AS crush_date,
p.iv_pct AS iv_two_weeks_pct,
b.iv_pct AS iv_peak_pct,
c.iv_pct AS iv_after_pct,
round(b.iv_pct - c.iv_pct, 1) AS crush_pct,
row_number() OVER (PARTITION BY toStartOfQuarter(c.date) ORDER BY b.iv_pct - c.iv_pct DESC) AS quarter_rank
FROM seq AS c
INNER JOIN seq AS b ON b.rn = c.rn - 1
INNER JOIN seq AS p ON p.rn = c.rn - 10
)
SELECT
formatDateTime(crush_date, '%b %e, %Y') AS label,
iv_two_weeks_pct,
iv_peak_pct,
iv_after_pct,
crush_pct
FROM events
WHERE quarter_rank = 1
AND crush_pct > 0
AND crush_date >= today() - 760
ORDER BY crush_date
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.