{"slug":"market-recap-2026-06-29","qid":"breadth","label":"Advancers vs decliners among tickers with at least $1M traded on June 29","post_title":"Market Recap: June 29, 2026, The Day in Numbers","post_url":"/blog/market-recap-2026-06-29#q-breadth","columns":["advancers","decliners","unchanged","liquid_tickers","tickers_traded_both_sessions","tickers_traded_both_sessions_label","dropped_by_liquidity_filter","dropped_by_liquidity_filter_label","advancer_pct"],"rows":[{"advancers":3968,"decliners":2327,"unchanged":72,"liquid_tickers":6367,"tickers_traded_both_sessions":11475,"tickers_traded_both_sessions_label":"11,475","dropped_by_liquidity_filter":5108,"dropped_by_liquidity_filter_label":"5,108","advancer_pct":62.3}],"shape":"scalar","sql":"WITH per_ticker AS (\n    SELECT\n        ticker,\n        toFloat64(argMaxIf(close, window_start, window_start < '2026-06-27 00:00:00')) AS friday_close,\n        toFloat64(argMaxIf(close, window_start, window_start >= '2026-06-29 00:00:00')) AS monday_close,\n        sumIf(toFloat64(close) * toFloat64(volume), window_start >= '2026-06-29 00:00:00') AS monday_dollar_volume\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE (window_start >= '2026-06-26 13:30:00' AND window_start < '2026-06-26 20:00:00')\n       OR (window_start >= '2026-06-29 13:30:00' AND window_start < '2026-06-29 20:00:00')\n    GROUP BY ticker\n)\nSELECT\n    countIf(monday_close > friday_close AND monday_dollar_volume >= 1000000) AS advancers,\n    countIf(monday_close < friday_close AND monday_dollar_volume >= 1000000) AS decliners,\n    countIf(monday_close = friday_close AND monday_dollar_volume >= 1000000) AS unchanged,\n    countIf(monday_dollar_volume >= 1000000) AS liquid_tickers,\n    count() AS tickers_traded_both_sessions,\n    reverse(arrayStringConcat(extractAll(reverse(toString(count())), '[0-9]{1,3}'), ',')) AS tickers_traded_both_sessions_label,\n    count() - countIf(monday_dollar_volume >= 1000000) AS dropped_by_liquidity_filter,\n    reverse(arrayStringConcat(extractAll(reverse(toString(count() - countIf(monday_dollar_volume >= 1000000))), '[0-9]{1,3}'), ',')) AS dropped_by_liquidity_filter_label,\n    round(100.0 * countIf(monday_close > friday_close AND monday_dollar_volume >= 1000000)\n        / countIf(monday_dollar_volume >= 1000000), 1) AS advancer_pct\nFROM per_ticker\nWHERE friday_close > 0 AND monday_close > 0","computed_at":"2026-07-26T05:42:57.867545+00:00","elapsed":0.679661991}