ETF Relative Strength and Alpha Attribution
Annualized volatility and worst single session, trailing two yearsranking ·
2026-08-22 · 10×3
20-session return versus SPY across a nine-fund ETF universeranking ·
2026-08-22 · 9×3
Strongest and weakest sleeve versus SPY, by calendar monthseries ·
2026-08-22 · 13×4
Share of each fund's daily variation explained by SPY, trailing two yearsranking ·
2026-08-22 · 9×2
Annualized volatility and worst single session, trailing two years
Annualized volatility and worst single session, trailing two years
| etf | annual_vol_pct | worst_day_pct |
|---|---|---|
| XLK | 27.6 | -6.82 |
| GLD | 23.5 | -10.27 |
| XLE | 23.4 | -9.2 |
| QQQ | 22.3 | -6.21 |
| IWM | 21.7 | -6.42 |
| XLF | 17.6 | -7.32 |
| SPY | 16.8 | -5.85 |
| EFA | 16.7 | -6.6 |
| XLV | 16.2 | -5.48 |
| XLU | 15.9 | -5.56 |
the exact SQL behind every number
WITH daily AS
(
SELECT
ticker,
date,
toFloat64(close) AS px,
lagInFrame(toFloat64(close)) OVER (PARTITION BY ticker ORDER BY date ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_px
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('SPY', 'QQQ', 'IWM', 'XLK', 'XLE', 'XLF', 'XLV', 'XLU', 'GLD', 'EFA')
AND date >= today() - 760
)
SELECT
ticker AS etf,
round(stddevSamp(px / prev_px - 1) * sqrt(252) * 100, 1) AS annual_vol_pct,
round(min(px / prev_px - 1) * 100, 2) AS worst_day_pct
FROM daily
WHERE prev_px > 0
GROUP BY ticker
ORDER BY annual_vol_pct DESC
More from this analysisETF Relative Strength and Alpha Attribution
20-session return versus SPY across a nine-fund ETF universe
ranking 9×3
→
Share of each fund's daily variation explained by SPY, trailing two years
ranking 9×2
→
Strongest and weakest sleeve versus SPY, by calendar month
series 13×4
→
When market headlines publish, by New York clock hour
ranking 24×2
→
See all 2,173 queries →