{"slug":"santa-claus-rally","qid":"santa_windows","label":"santa_windows","post_title":"santa-claus-rally","post_url":"/blog/santa-claus-rally#q-santa_windows","columns":["year","measured_from","measured_to","santa_window_pct","calendar_december_pct"],"rows":[{"year":2003,"measured_from":"Dec 23","measured_to":"Jan 5","santa_window_pct":2.47,"calendar_december_pct":4.54},{"year":2004,"measured_from":"Dec 23","measured_to":"Jan 4","santa_window_pct":-1.61,"calendar_december_pct":2.53},{"year":2005,"measured_from":"Dec 22","measured_to":"Jan 4","santa_window_pct":0.48,"calendar_december_pct":-0.72},{"year":2006,"measured_from":"Dec 21","measured_to":"Jan 4","santa_window_pct":0.04,"calendar_december_pct":0.78},{"year":2007,"measured_from":"Dec 21","measured_to":"Jan 3","santa_window_pct":-2.21,"calendar_december_pct":-1.65},{"year":2008,"measured_from":"Dec 23","measured_to":"Jan 5","santa_window_pct":7.76,"calendar_december_pct":0.17},{"year":2009,"measured_from":"Dec 23","measured_to":"Jan 5","santa_window_pct":1.5,"calendar_december_pct":1.36},{"year":2010,"measured_from":"Dec 23","measured_to":"Jan 4","santa_window_pct":1.1,"calendar_december_pct":6.12},{"year":2011,"measured_from":"Dec 22","measured_to":"Jan 4","santa_window_pct":1.94,"calendar_december_pct":0.41},{"year":2012,"measured_from":"Dec 21","measured_to":"Jan 3","santa_window_pct":2.06,"calendar_december_pct":0.18},{"year":2013,"measured_from":"Dec 23","measured_to":"Jan 3","santa_window_pct":0.19,"calendar_december_pct":2.04},{"year":2014,"measured_from":"Dec 23","measured_to":"Jan 5","santa_window_pct":-2.9,"calendar_december_pct":-0.8},{"year":2015,"measured_from":"Dec 23","measured_to":"Jan 5","santa_window_pct":-2.26,"calendar_december_pct":-2.31},{"year":2016,"measured_from":"Dec 22","measured_to":"Jan 4","santa_window_pct":0.53,"calendar_december_pct":1.43},{"year":2017,"measured_from":"Dec 21","measured_to":"Jan 3","santa_window_pct":1.08,"calendar_december_pct":0.7},{"year":2018,"measured_from":"Dec 21","measured_to":"Jan 3","santa_window_pct":1.46,"calendar_december_pct":-9.33},{"year":2019,"measured_from":"Dec 23","measured_to":"Jan 3","santa_window_pct":0.37,"calendar_december_pct":2.4},{"year":2020,"measured_from":"Dec 23","measured_to":"Jan 5","santa_window_pct":1.02,"calendar_december_pct":3.26},{"year":2021,"measured_from":"Dec 23","measured_to":"Jan 4","santa_window_pct":1.48,"calendar_december_pct":4.26},{"year":2022,"measured_from":"Dec 22","measured_to":"Jan 4","santa_window_pct":0.8,"calendar_december_pct":-6.19},{"year":2023,"measured_from":"Dec 21","measured_to":"Jan 3","santa_window_pct":-0.83,"calendar_december_pct":4.14},{"year":2024,"measured_from":"Dec 23","measured_to":"Jan 3","santa_window_pct":-0.46,"calendar_december_pct":-2.73},{"year":2025,"measured_from":"Dec 23","measured_to":"Jan 5","santa_window_pct":-0.03,"calendar_december_pct":-0.22}],"shape":"table","sql":"WITH\n    spy_days AS\n    (\n        SELECT\n            date,\n            toYear(date)                                   AS y,\n            toMonth(date)                                  AS m,\n            argMax(toFloat64(close), _ingest_time)         AS close\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker = 'SPY'\n          AND toMonth(date) IN (11, 12, 1)\n        GROUP BY date\n    ),\n    ranked AS\n    (\n        SELECT\n            date,\n            y,\n            m,\n            close,\n            row_number() OVER (PARTITION BY y, m ORDER BY date DESC) AS sessions_from_end,\n            row_number() OVER (PARTITION BY y, m ORDER BY date ASC)  AS sessions_from_start\n        FROM spy_days\n    )\nSELECT\n    toUInt16(if(m = 1, y - 1, y))                                                    AS year,\n    concat(formatDateTime(anyIf(date, m = 12 AND sessions_from_end = 6), '%b '),\n           toString(toDayOfMonth(anyIf(date, m = 12 AND sessions_from_end = 6))))  AS measured_from,\n    concat(formatDateTime(anyIf(date, m = 1 AND sessions_from_start = 2), '%b '),\n           toString(toDayOfMonth(anyIf(date, m = 1 AND sessions_from_start = 2)))) AS measured_to,\n    round((anyIf(close, m = 1 AND sessions_from_start = 2)\n           / anyIf(close, m = 12 AND sessions_from_end = 6) - 1) * 100, 2)          AS santa_window_pct,\n    round((anyIf(close, m = 12 AND sessions_from_end = 1)\n           / anyIf(close, m = 11 AND sessions_from_end = 1) - 1) * 100, 2)          AS calendar_december_pct\nFROM ranked\nGROUP BY year\nHAVING countIf(m = 11 AND sessions_from_end = 1) = 1\n   AND countIf(m = 12 AND sessions_from_end = 6) = 1\n   AND countIf(m = 1 AND sessions_from_start = 2) = 1\nORDER BY year","computed_at":"2026-09-17T17:09:43.622750+00:00","elapsed":0.002814388}