{"slug":"missed-the-best-days","qid":"missed_days","label":"SPY total return since 2016, after removing the best single days","post_title":"What Missing the Best Days Costs","post_url":"/blog/missed-the-best-days#q-missed_days","columns":["best_days_missed","total_return_pct"],"rows":[{"best_days_missed":0,"total_return_pct":275.5},{"best_days_missed":10,"total_return_pct":97},{"best_days_missed":20,"total_return_pct":42.4},{"best_days_missed":30,"total_return_pct":9},{"best_days_missed":50,"total_return_pct":-32.5}],"shape":"ranking","sql":"WITH daily AS (\n    SELECT toDate(toTimeZone(window_start, 'America/New_York')) AS dt,\n           argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker = 'SPY' AND window_start >= '2016-01-01'\n      AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60\n           + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\n    GROUP BY dt\n),\nrets AS (\n    SELECT dt, c / lagInFrame(c) OVER (ORDER BY dt) - 1 AS ret FROM daily\n),\nranked AS (\n    SELECT log(1 + ret) AS lr, row_number() OVER (ORDER BY ret DESC) AS rnk\n    FROM rets\n    WHERE ret IS NOT NULL AND ret > -0.5 AND ret < 0.5\n)\nSELECT k AS best_days_missed,\n       round((exp(sumIf(lr, rnk > k)) - 1) * 100, 1) AS total_return_pct\nFROM ranked\nCROSS JOIN (SELECT arrayJoin([0, 10, 20, 30, 50]) AS k) AS kvals\nGROUP BY k\nORDER BY k","computed_at":"2026-07-16T11:18:59.047295+00:00","elapsed":3.205415613}