ath_by_year
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-20, from investing-at-all-time-highs.
| year | closes_counted | record_closes | record_share_pct | series_start_label | counting_from_label | last_session_label |
|---|---|---|---|---|---|---|
| 2007 | 79 | 2 | 2.5 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2007 |
| 2008 | 253 | 0 | 0 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2008 |
| 2009 | 252 | 0 | 0 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2009 |
| 2010 | 252 | 0 | 0 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2010 |
| 2011 | 252 | 0 | 0 | Sep 10, 2003 | Sep 10, 2007 | Dec 30, 2011 |
| 2012 | 250 | 0 | 0 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2012 |
| 2013 | 252 | 48 | 19 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2013 |
| 2014 | 252 | 52 | 20.6 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2014 |
| 2015 | 252 | 11 | 4.4 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2015 |
| 2016 | 252 | 18 | 7.1 | Sep 10, 2003 | Sep 10, 2007 | Dec 30, 2016 |
| 2017 | 251 | 54 | 21.5 | Sep 10, 2003 | Sep 10, 2007 | Dec 29, 2017 |
| 2018 | 251 | 19 | 7.6 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2018 |
| 2019 | 252 | 34 | 13.5 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2019 |
| 2020 | 253 | 33 | 13 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2020 |
| 2021 | 252 | 71 | 28.2 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2021 |
| 2022 | 251 | 1 | 0.4 | Sep 10, 2003 | Sep 10, 2007 | Dec 30, 2022 |
| 2023 | 250 | 0 | 0 | Sep 10, 2003 | Sep 10, 2007 | Dec 29, 2023 |
| 2024 | 252 | 58 | 23 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2024 |
| 2025 | 250 | 40 | 16 | Sep 10, 2003 | Sep 10, 2007 | Dec 31, 2025 |
| 2026 | 179 | 26 | 14.5 | Sep 10, 2003 | Sep 10, 2007 | Sep 18, 2026 |
- Rows × columns
- 20 × 7
- 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 |
|---|---|---|---|
year |
number | 2,007 to 2,026 | |
closes_counted |
number | 79 to 253 | |
record_closes |
number | 0 to 71 | |
record_share_pct |
number | 0 to 28.2 | percent |
series_start_label |
text | 1 distinct value (Sep 10, 2003) | |
counting_from_label |
text | 1 distinct value (Sep 10, 2007) | |
last_session_label |
text | 20 distinct values (Dec 29, 2017, Dec 29, 2023, Dec 30, 2011…) |
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
daily AS
(
SELECT
date,
toFloat64(argMax(close, _ingest_time)) AS close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
GROUP BY date
),
flagged AS
(
SELECT
date,
close,
close >= max(close) OVER (ORDER BY date ROWS BETWEEN UNBOUNDED PRECEDING AND CURRENT ROW) AS is_record,
min(date) OVER () AS series_start
FROM daily
)
SELECT
toYear(date) AS year,
count() AS closes_counted,
countIf(is_record = 1) AS record_closes,
round(100 * countIf(is_record = 1) / count(), 1) AS record_share_pct,
any(formatDateTime(series_start, '%b %e, %Y')) AS series_start_label,
any(formatDateTime(addYears(series_start, 4), '%b %e, %Y')) AS counting_from_label,
formatDateTime(max(date), '%b %e, %Y') AS last_session_label
FROM flagged
WHERE date >= addYears(series_start, 4)
GROUP BY year
ORDER BY year