What Missing the Best Days Costs
Time in the market beats timing it: missing the best days since 2016 turned a big SPY gain into a small one, and the best days hide inside the worst selloffs.
Missing the best days is the hidden cost of trying to time the market. Since the start of 2016, staying fully invested in the S&P 500 through its tracking fund SPY returned 275.5%. Skip only the ten single best days over that decade and the return falls to 97%. The best days do not arrive on calm afternoons. They cluster inside the market's worst, most volatile stretches, right where a nervous investor is most tempted to sell.
The cost of missing the best days
Here is the whole idea in one line. Take every trading day since the start of 2016, rank them by their daily return, and remove the very best ones from a simple buy-and-hold position in SPY. Every other day stays exactly where it was. The chart shows what the decade compounds to as you strip out the top handful.
The exact SQL behind every number
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2016-01-01'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
rets AS (
SELECT dt, c / lagInFrame(c) OVER (ORDER BY dt) - 1 AS ret FROM daily
),
ranked AS (
SELECT log(1 + ret) AS lr, row_number() OVER (ORDER BY ret DESC) AS rnk
FROM rets
WHERE ret IS NOT NULL AND ret > -0.5 AND ret < 0.5
)
SELECT k AS best_days_missed,
round((exp(sumIf(lr, rnk > k)) - 1) * 100, 1) AS total_return_pct
FROM ranked
CROSS JOIN (SELECT arrayJoin([0, 10, 20, 30, 50]) AS k) AS kvals
GROUP BY k
ORDER BY kFully invested, SPY compounded to 275.5% over the period. Remove the 10 best days and roughly two-thirds of that gain disappears, leaving 97%. Remove the 20 best and 42.4% remains. Remove the best 50 and the entire decade turns negative, at -32.5%. Fifty days out of more than two thousand carried the whole result. The long-run return is not spread evenly across time. It sits on a tiny number of enormous sessions.
Why the best days are impossible to skip on purpose
The obvious objection is that a smart investor would sit out the bad days too. In practice the good days and the bad days sit on top of each other. Group the twenty biggest up-days and the twenty biggest down-days by the year they fell in, and they pile into the same short list of years.
The exact SQL behind every number
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2016-01-01'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
rets AS (
SELECT dt, c / lagInFrame(c) OVER (ORDER BY dt) - 1 AS ret FROM daily
),
clean AS (
SELECT dt, ret FROM rets WHERE ret IS NOT NULL AND ret > -0.5 AND ret < 0.5
),
ranked AS (
SELECT dt, ret,
row_number() OVER (ORDER BY ret DESC) AS best_rnk,
row_number() OVER (ORDER BY ret ASC) AS worst_rnk
FROM clean
)
SELECT toYear(dt) AS year,
countIf(best_rnk <= 20) AS best_20_days,
countIf(worst_rnk <= 20) AS worst_20_days
FROM ranked
GROUP BY year
ORDER BY yearThe year 2020 alone held 11 of the twenty best days and 9 of the twenty worst. The 2022 bear market held 5 of each. The quiet years in between contributed almost none of either. Extreme up-days and extreme down-days are the same weather, arriving together during panics. A rule that dodged the crashes would have dodged the recoveries sitting right next to them.
When the biggest up-days actually happened
Zoom into the single best days and the pattern gets sharper still. Here are the ten largest one-day gains for SPY over the decade, ranked by size.
The exact SQL behind every number
WITH daily AS (
SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,
argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= '2016-01-01'
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY dt
),
rets AS (
SELECT dt, c / lagInFrame(c) OVER (ORDER BY dt) - 1 AS ret FROM daily
),
clean AS (
SELECT dt, ret FROM rets WHERE ret IS NOT NULL AND ret > -0.5 AND ret < 0.5
),
ranked AS (
SELECT dt, ret, row_number() OVER (ORDER BY ret DESC) AS best_rnk FROM clean
)
SELECT formatDateTime(dt, '%b %e, %Y') AS episode,
round(ret * 100, 1) AS daily_return_pct
FROM ranked
WHERE best_rnk <= 10
ORDER BY daily_return_pct DESCThe single best day of the decade was Mar 24, 2020, when SPY jumped 9.5%. Most of the ten largest up-days landed during the spring 2020 crash, with the rest in late 2018, the 2022 downturn, and the April 2025 selloff. Even the smallest of these ten gained 4.4% in a session. Every one of them happened while the market was falling hard around it. An investor who sold after a frightening week to wait for the dust to settle would have been holding cash for exactly these rebounds.
Time in the market, not timing the market
The old phrase is that time in the market beats timing the market, and the arithmetic behind it is blunt. A decade of gains is back-loaded onto a few dozen sessions, and those sessions appear in the middle of selloffs rather than after them. Stepping aside to avoid the worst day means risking stepping aside before the best one, and the two are frequently days apart.
This is the same lesson that runs through buying when others are fearful: the sharpest recoveries begin while the headlines are still ugly. It also connects to how a portfolio is built to be held. Sitting through the drops is easier with positions you sized for the ride, which is part of the case for limiting concentration risk and for leaning on lower-volatility stocks that are simpler to hold through a storm. The best days are not a reward for cleverness. They are a reward for still being in your seat.
FAQ
What does missing the best days in the market cost?
Since 2016, staying invested in SPY returned 275.5%. Missing just the ten best days cut that to 97%, and missing the best fifty turned the decade negative at -32.5%. A small number of days carry most of the long-run return.
Why can't I just avoid the worst days instead?
The best and worst days cluster in the same volatile stretches, often within the same week. In 2020, 11 of the twenty best days and 9 of the twenty worst fell in that single year. No reliable rule separates them in advance, and selling to dodge the drops usually means missing the rebounds.
When did the biggest up-days happen?
SPY's single best day since 2016 was Mar 24, 2020, a gain of 9.5%. Most of the ten largest up-days occurred during the spring 2020 crash, with others in late 2018, 2022, and April 2025, all during sharp market declines.
Does time in the market beat timing the market?
On this record, yes. A fully invested position compounded far ahead of any version that stepped out and missed even a few of the best sessions. The best days are too few and too concentrated inside downturns to reliably trade around.
Every figure here is a stored query you can open and audit. Run the same best-days test on any index or stock on the Strasmore terminal.