{"slug":"market-recap-2026-h1","qid":"baseline_h1_history_a","label":"Every first half on the tape: SPY and QQQ, recomputed identically by year (per-year session counts shown)","post_title":"Market Recap: H1 2026","post_url":"/blog/market-recap-2026-h1#q-baseline_h1_history_a","columns":["y","ticker","sessions","h1_return_pct"],"rows":[{"y":2004,"ticker":"QQQ","sessions":124,"h1_return_pct":2.9},{"y":2004,"ticker":"SPY","sessions":124,"h1_return_pct":2.4},{"y":2005,"ticker":"SPY","sessions":125,"h1_return_pct":-2.1},{"y":2006,"ticker":"SPY","sessions":125,"h1_return_pct":1.5},{"y":2007,"ticker":"SPY","sessions":124,"h1_return_pct":5.4},{"y":2008,"ticker":"SPY","sessions":125,"h1_return_pct":-12.8},{"y":2009,"ticker":"SPY","sessions":124,"h1_return_pct":1.8},{"y":2010,"ticker":"SPY","sessions":124,"h1_return_pct":-8.2},{"y":2011,"ticker":"SPY","sessions":125,"h1_return_pct":4.2},{"y":2012,"ticker":"QQQ","sessions":125,"h1_return_pct":12.7},{"y":2012,"ticker":"SPY","sessions":125,"h1_return_pct":6.6},{"y":2013,"ticker":"QQQ","sessions":124,"h1_return_pct":6.8},{"y":2013,"ticker":"SPY","sessions":124,"h1_return_pct":10.4},{"y":2014,"ticker":"QQQ","sessions":124,"h1_return_pct":7.3},{"y":2014,"ticker":"SPY","sessions":124,"h1_return_pct":6.4},{"y":2015,"ticker":"QQQ","sessions":124,"h1_return_pct":3.2},{"y":2015,"ticker":"SPY","sessions":124,"h1_return_pct":-0.2},{"y":2016,"ticker":"QQQ","sessions":125,"h1_return_pct":-1.7},{"y":2016,"ticker":"SPY","sessions":125,"h1_return_pct":4.5},{"y":2017,"ticker":"QQQ","sessions":125,"h1_return_pct":15.2},{"y":2017,"ticker":"SPY","sessions":125,"h1_return_pct":7.4},{"y":2018,"ticker":"QQQ","sessions":125,"h1_return_pct":9.5},{"y":2018,"ticker":"SPY","sessions":125,"h1_return_pct":1.3},{"y":2019,"ticker":"QQQ","sessions":124,"h1_return_pct":23.7},{"y":2019,"ticker":"SPY","sessions":124,"h1_return_pct":19.1},{"y":2020,"ticker":"QQQ","sessions":125,"h1_return_pct":15.3},{"y":2020,"ticker":"SPY","sessions":125,"h1_return_pct":-4.6},{"y":2021,"ticker":"QQQ","sessions":124,"h1_return_pct":12.5},{"y":2021,"ticker":"SPY","sessions":124,"h1_return_pct":14.1},{"y":2022,"ticker":"QQQ","sessions":124,"h1_return_pct":-29.8},{"y":2022,"ticker":"SPY","sessions":124,"h1_return_pct":-20.8},{"y":2023,"ticker":"QQQ","sessions":124,"h1_return_pct":37.5},{"y":2023,"ticker":"SPY","sessions":124,"h1_return_pct":15.3},{"y":2024,"ticker":"QQQ","sessions":124,"h1_return_pct":18},{"y":2024,"ticker":"SPY","sessions":124,"h1_return_pct":15.2},{"y":2025,"ticker":"QQQ","sessions":122,"h1_return_pct":7.3},{"y":2025,"ticker":"SPY","sessions":122,"h1_return_pct":4.8},{"y":2026,"ticker":"QQQ","sessions":123,"h1_return_pct":18.7},{"y":2026,"ticker":"SPY","sessions":123,"h1_return_pct":8.8}],"shape":"table","sql":"SELECT toYear(toTimeZone(window_start, 'America/New_York')) AS y,\n       ticker,\n       uniqExact(toDate(toTimeZone(window_start, 'America/New_York'))) AS sessions,\n       round((argMax(toFloat64(close), window_start) / argMin(toFloat64(open), window_start) - 1) * 100, 1) AS h1_return_pct\nFROM global_markets.delayed_stocks_minute_aggs\nWHERE ticker IN ('SPY', 'QQQ')\n  AND window_start >= toDateTime('2003-01-01 00:00:00')\n  AND window_start < toDateTime('2026-07-01 00:00:00')\n  AND toMonth(toTimeZone(window_start, 'America/New_York')) <= 6\n  AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959\nGROUP BY y, ticker\nHAVING sessions >= 100\nORDER BY y ASC, ticker ASC","computed_at":"2026-07-26T06:01:56.348792+00:00","elapsed":10.499011739}