What Happens When an ETF Closes
How the tape behaved into the final sessionranking ·
2026-11-01 · 5×3
How long retired listings had traded before their last sessionranking ·
2026-11-01 · 5×3
Listings that printed their final daily bar, by yearranking ·
2026-11-01 · 11×2
Final trading days by month, rolling three yearsseries ·
2026-11-01 · 33×3
What Happens After a Reverse Stock Split?
Reverse splits executed Mar 2025 to Feb 2026, by consolidation ratioranking ·
2026-11-01 · 5×3
Reverse vs forward splits by execution month, trailing two yearsseries ·
2026-11-01 · 24×5
Median move after the split, same cohort, at 20, 60 and 120 sessionsranking ·
2026-11-01 · 3×4
How Long Can a Stock Trade Under $1? The Rules
Listed stocks closing under $1, session by session, trailing five monthsseries ·
2026-11-01 · 104×3
How long the sub-$1 names have already been there: consecutive sessions closing under $1ranking ·
2026-11-01 · 4×3
Reverse splits executed per month, trailing twelve full monthsseries ·
2026-11-01 · 12×3
Listed stocks closing under $1 on the latest session, by price bandranking ·
2026-11-01 · 5×4
How the tape behaved into the final session
How the tape behaved into the final session
| wind_down_stage | median_daily_range_pct | median_dollar_volume_k |
|---|---|---|
| 121 to 250 days out | 2.48 | 75.8 |
| 61 to 120 days out | 2.16 | 77.7 |
| 31 to 60 days out | 1.78 | 89.4 |
| 11 to 30 days out | 1.8 | 92.5 |
| final 10 days | 2.53 | 121.9 |
the exact SQL behind every number
WITH retired AS
(
SELECT
ticker,
max(date) AS last_session
FROM global_markets.stocks_daily_aggs
WHERE date >= '2018-01-01'
AND ticker NOT IN ('SPCX')
GROUP BY ticker
HAVING max(date) >= today() - 1130
AND max(date) < today() - 250
)
SELECT
multiIf(
dateDiff('day', d.date, r.last_session) <= 10, 'final 10 days',
dateDiff('day', d.date, r.last_session) <= 30, '11 to 30 days out',
dateDiff('day', d.date, r.last_session) <= 60, '31 to 60 days out',
dateDiff('day', d.date, r.last_session) <= 120, '61 to 120 days out',
'121 to 250 days out') AS wind_down_stage,
round(quantileDeterministic(0.5)(
toFloat64(d.high - d.low) / toFloat64(d.close) * 100,
cityHash64(d.ticker, d.date)), 2) AS median_daily_range_pct,
round(quantileDeterministic(0.5)(
toFloat64(d.volume) * toFloat64(d.close) / 1000,
cityHash64(d.ticker, d.date)), 1) AS median_dollar_volume_k
FROM global_markets.stocks_daily_aggs AS d
INNER JOIN retired AS r ON r.ticker = d.ticker
WHERE d.date >= today() - 1500
AND d.date > r.last_session - 250
AND d.date <= r.last_session
AND d.close > 0
GROUP BY wind_down_stage
ORDER BY min(dateDiff('day', d.date, r.last_session)) DESC
More from this analysisWhat Happens When an ETF Closes
Listings that printed their final daily bar, by year
ranking 11×2
→
How long retired listings had traded before their last session
ranking 5×3
→
Final trading days by month, rolling three years
series 33×3
→
GLD overnight gaps against intraday moves, by year
ranking 10×4
→
See all 3,293 queries →