{"slug":"the-january-barometer","qid":"scorecard","label":"scorecard","post_title":"the-january-barometer","post_url":"/blog/the-january-barometer#q-scorecard","columns":["cohort","years_in_sample","barometer_hit_pct","base_rate_pct","edge_pp"],"rows":[{"cohort":"All years","years_in_sample":22,"barometer_hit_pct":59.1,"base_rate_pct":77.3,"edge_pp":-18.2},{"cohort":"Up January","years_in_sample":12,"barometer_hit_pct":83.3,"base_rate_pct":77.3,"edge_pp":6.1},{"cohort":"Down January","years_in_sample":10,"barometer_hit_pct":30,"base_rate_pct":22.7,"edge_pp":7.3}],"shape":"table","sql":"WITH yearly AS\n(\n    SELECT\n        toYear(date)                              AS y,\n        argMax(close, date)                       AS dec_close,\n        argMaxIf(close, date, toMonth(date) = 1)   AS jan_close,\n        countIf(toMonth(date) = 1)                AS jan_sessions,\n        countIf(toMonth(date) = 12)               AS dec_sessions\n    FROM global_markets.stocks_daily_aggs\n    WHERE ticker = 'SPY'\n    GROUP BY y\n),\nscored AS\n(\n    SELECT\n        toFloat64(cur.jan_close) / toFloat64(prev.dec_close) - 1 AS jan_ret,\n        toFloat64(cur.dec_close) / toFloat64(prev.dec_close) - 1 AS year_ret\n    FROM yearly AS cur\n    INNER JOIN yearly AS prev ON prev.y = cur.y - 1\n    WHERE cur.jan_sessions >= 15\n      AND cur.dec_sessions >= 15\n),\nunconditional AS\n(\n    SELECT avg(year_ret > 0) AS up_share\n    FROM scored\n),\ntagged AS\n(\n    SELECT\n        arrayJoin(['All years', if(jan_ret > 0, 'Up January', 'Down January')]) AS cohort,\n        (jan_ret > 0) = (year_ret > 0)                                          AS sign_matched\n    FROM scored\n)\nSELECT\n    cohort,\n    count()                                                                      AS years_in_sample,\n    round(100 * avg(sign_matched), 1)                                            AS barometer_hit_pct,\n    round(100 * if(cohort = 'Down January', 1 - any(up_share), any(up_share)), 1) AS base_rate_pct,\n    round(100 * avg(sign_matched)\n          - 100 * if(cohort = 'Down January', 1 - any(up_share), any(up_share)), 1) AS edge_pp\nFROM tagged\nCROSS JOIN unconditional\nGROUP BY cohort\nORDER BY multiIf(cohort = 'All years', 1, cohort = 'Up January', 2, 3)","computed_at":"2026-10-02T15:44:31.433961+00:00","elapsed":0.393793152}