At-the-money implied volatility: gold miners vs bullion vs the S&P 500
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-04, from Gold Miner Covered Call ETFs: Yield vs Upside.
| symbol | atm_iv_pct | iv_low_pct | iv_high_pct | sample_count | iv_window |
|---|---|---|---|---|---|
| GDXJ | 49.5 | 23.7 | 80.1 | 705 | Aug 20 to Oct 1 |
| GDX | 44.4 | 25.4 | 80.1 | 1974 | Aug 20 to Oct 1 |
| GLD | 23.7 | 8.3 | 42 | 7399 | Aug 20 to Oct 1 |
| SPY | 13.4 | 2.5 | 25.2 | 14980 | Aug 20 to Oct 1 |
- Rows × columns
- 4 × 6
- 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 |
|---|---|---|---|
symbol |
text | 4 distinct values (GDX, GDXJ, GLD…) | |
atm_iv_pct |
number | 13.4 to 49.5 | percent |
iv_low_pct |
number | 2.5 to 25.4 | percent |
iv_high_pct |
number | 25.2 to 80.1 | percent |
sample_count |
number | 705 to 14,980 | count |
iv_window |
text | 1 distinct value (Aug 20 to Oct 1) |
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
underlying_symbol AS symbol,
round(avg(toFloat64(implied_volatility)) * 100, 1) AS atm_iv_pct,
round(min(toFloat64(implied_volatility)) * 100, 1) AS iv_low_pct,
round(max(toFloat64(implied_volatility)) * 100, 1) AS iv_high_pct,
count() AS sample_count,
concat(formatDateTime(min(date), '%b %e'), ' to ', formatDateTime(max(date), '%b %e')) AS iv_window
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('GDX', 'GDXJ', 'GLD', 'SPY')
AND date >= today() - 45
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 symbol
ORDER BY atm_iv_pct DESC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.