January Barometer: Does It Actually Work?
January's return next to the full year, every complete year of SPY historyranking ·
2026-10-02 · 22×4
Barometer hit rate against the unconditional base rate, by January's signtable ·
2026-10-02 · 3×5
The same hit rates with January removed from the outcome windowranking ·
2026-10-02 · 3×4
The same scoring on three index funds over a shared window from 2000ranking ·
2026-10-02 · 3×4
Barometer hit rate by decade, with the share of up years in eachranking ·
2026-10-02 · 3×4
The September Effect: Is It Real? SPY Data
The three worst SPY Septembers on recordranking ·
2026-09-26 · 3×2
SPY September price return, year by yearranking ·
2026-09-26 · 22×2
SPY monthly price returns by calendar month, complete years onlytable ·
2026-09-26 · 12×6
Average September vs. the other eleven months, by decaderanking ·
2026-09-26 · 3×4
Santa Claus Rally: Hit Rate and Returns by Year
The five weakest Santa Claus windows on record, with the calendar year that followed eachtable ·
2026-09-26 · 5×5
Santa Claus window vs. the rest of December vs. the whole month, SPY, all years on recordtable ·
2026-09-26 · 3×8
SPY volume in each Santa Claus window session as a share of its year's average daily volumeranking ·
2026-09-26 · 7×4
Santa Claus rally window return by year, SPY, with the full calendar December alongsidetable ·
2026-09-26 · 23×5
Failed vs. successful Santa Claus windows and the calendar year that followedtable ·
2026-09-26 · 2×6
The January Effect: Does It Still Work?
SPY share volume around the turn of the year, averaged since 2011ranking ·
2026-08-11 · 19×3
Distinct symbols printing at least one session, by yearranking ·
2026-08-11 · 20×2
The tape by average dollar volume, June 2026ranking ·
2026-08-11 · 5×3
Every January on the daily tape, in trading sessionsranking ·
2026-08-11 · 23×2
When Companies Announce Dividend Raises
Share of annual raises declared in the same month as the prior raise, by yearranking ·
2026-08-03 · 10×4
Dividend raises by declaration month: US recurring quarterly payers, July 2015 to July 2026ranking ·
2026-08-03 · 12×3
JNJ dividend raises: declaration date, old rate, new rate, 2016 to 2026table ·
2026-08-03 · 11×5
Typical raise month by company: twelve dividend growers, raises since 2016series ·
2026-08-03 · 12×5
Declaration record by year: recurring dividends, count, and days from declaration to ex-datetable ·
2026-08-03 · 11×5
Does Sell in May and Go Away Work?
Growth of one dollar: holding all year vs holding only November through Aprilranking ·
2026-08-03 · 21×3
The seasonal gap by era: average half-year returns and the spread between themtable ·
2026-08-03 · 3×6
S&P 500 tracker: May to October vs November to April, season by seasonranking ·
2026-08-03 · 21×3
Average S&P 500 tracker return by calendar month, May 2005 through April 2026table ·
2026-08-03 · 12×5
SPY distributions by ex-dividend month: inside the May to October window vs outside itranking ·
2026-08-03 · 19×3
January's return next to the full year, every complete year of SPY history
January's return next to the full year, every complete year of SPY history
| year | january_pct | year_pct | feb_to_dec_pct |
|---|---|---|---|
| 2004 | 1.98 | 8.62 | 6.51 |
| 2005 | -2.24 | 3.01 | 5.37 |
| 2006 | 2.4 | 13.74 | 11.07 |
| 2007 | 1.5 | 3.24 | 1.71 |
| 2008 | -6.05 | -38.28 | -34.31 |
| 2009 | -8.21 | 23.49 | 34.54 |
| 2010 | -3.63 | 12.84 | 17.1 |
| 2011 | 2.33 | -0.2 | -2.47 |
| 2012 | 4.64 | 13.47 | 8.45 |
| 2013 | 5.12 | 29.69 | 23.37 |
| 2014 | -3.52 | 11.29 | 15.36 |
| 2015 | -2.96 | -0.81 | 2.22 |
| 2016 | -4.98 | 9.64 | 15.39 |
| 2017 | 1.79 | 19.38 | 17.29 |
| 2018 | 5.64 | -6.35 | -11.34 |
| 2019 | 8.01 | 28.79 | 19.24 |
| 2020 | -0.04 | 16.16 | 16.21 |
| 2021 | -1.02 | 27.04 | 28.34 |
| 2022 | -5.27 | -19.48 | -15 |
| 2023 | 6.29 | 24.29 | 16.93 |
| 2024 | 1.59 | 23.3 | 21.37 |
| 2025 | 2.69 | 16.35 | 13.31 |
the exact SQL behind every number
WITH yearly AS
(
SELECT
toYear(date) AS y,
argMax(close, date) AS dec_close,
argMaxIf(close, date, toMonth(date) = 1) AS jan_close,
countIf(toMonth(date) = 1) AS jan_sessions,
countIf(toMonth(date) = 12) AS dec_sessions
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
GROUP BY y
)
SELECT
cur.y AS year,
round(100 * (toFloat64(cur.jan_close) / toFloat64(prev.dec_close) - 1), 2) AS january_pct,
round(100 * (toFloat64(cur.dec_close) / toFloat64(prev.dec_close) - 1), 2) AS year_pct,
round(100 * (toFloat64(cur.dec_close) / toFloat64(cur.jan_close) - 1), 2) AS feb_to_dec_pct
FROM yearly AS cur
INNER JOIN yearly AS prev ON prev.y = cur.y - 1
WHERE cur.jan_sessions >= 15
AND cur.dec_sessions >= 15
ORDER BY year
More from this analysisJanuary Barometer: Does It Actually Work?
The same hit rates with January removed from the outcome window
ranking 3×4
→
The same scoring on three index funds over a shared window from 2000
ranking 3×4
→
Barometer hit rate by decade, with the share of up years in each
ranking 3×4
→
Barometer hit rate against the unconditional base rate, by January's sign
table 3×5
→
See all 3,256 queries →