index_family_scale
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-09-28, from micro-e-mini-vs-e-mini-futures.
| index_family | avg_daily_range_pct | widest_day_range_pct |
|---|---|---|
| Nasdaq-100 (QQQ) | 1.45 | 5.43 |
| Russell 2000 (IWM) | 1.38 | 4.61 |
| Dow 30 (DIA) | 0.92 | 2.05 |
| S&P 500 (SPY) | 0.91 | 3.27 |
- Rows × columns
- 4 × 3
- 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 |
|---|---|---|---|
index_family |
text | 4 distinct values | |
avg_daily_range_pct |
number | 0.91 to 1.45 | percent |
widest_day_range_pct |
number | 2.05 to 5.43 | 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.
SELECT
multiIf(ticker = 'SPY', 'S&P 500 (SPY)',
ticker = 'QQQ', 'Nasdaq-100 (QQQ)',
ticker = 'DIA', 'Dow 30 (DIA)',
'Russell 2000 (IWM)') AS index_family,
round(avg(100 * toFloat64(high - low) / toFloat64(open)), 2) AS avg_daily_range_pct,
round(max(100 * toFloat64(high - low) / toFloat64(open)), 2) AS widest_day_range_pct
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
AND date >= '2026-03-30'
AND date <= '2026-09-25'
GROUP BY index_family
ORDER BY avg_daily_range_pct DESC
Work with this data in your AI assistant
Opens ready to query, with this page's data. Free, no account.