{"slug":"high-low-index-market-breadth","qid":"breadth_vs_advance_decline","label":"Two breadth measures, same basket: 10-day High-Low Index vs 10-day advancing share","post_title":"What Is the High-Low Index? Market Breadth","post_url":"/blog/high-low-index-market-breadth#q-breadth_vs_advance_decline","columns":["date","session_label","high_low_index_pct","advancing_pct_10d"],"rows":[{"date":"2026-04-15","session_label":"Apr 15","high_low_index_pct":52.5,"advancing_pct_10d":52.8},{"date":"2026-04-17","session_label":"Apr 17","high_low_index_pct":57.5,"advancing_pct_10d":54.5},{"date":"2026-04-20","session_label":"Apr 20","high_low_index_pct":67.5,"advancing_pct_10d":53.8},{"date":"2026-04-21","session_label":"Apr 21","high_low_index_pct":72.5,"advancing_pct_10d":52},{"date":"2026-04-22","session_label":"Apr 22","high_low_index_pct":82.5,"advancing_pct_10d":55},{"date":"2026-04-23","session_label":"Apr 23","high_low_index_pct":87.5,"advancing_pct_10d":52.2},{"date":"2026-04-24","session_label":"Apr 24","high_low_index_pct":92.5,"advancing_pct_10d":50},{"date":"2026-04-27","session_label":"Apr 27","high_low_index_pct":100,"advancing_pct_10d":51.5},{"date":"2026-04-29","session_label":"Apr 29","high_low_index_pct":100,"advancing_pct_10d":49},{"date":"2026-04-30","session_label":"Apr 30","high_low_index_pct":100,"advancing_pct_10d":50},{"date":"2026-05-01","session_label":"May 1","high_low_index_pct":100,"advancing_pct_10d":50},{"date":"2026-05-04","session_label":"May 4","high_low_index_pct":95,"advancing_pct_10d":45.5},{"date":"2026-05-05","session_label":"May 5","high_low_index_pct":95,"advancing_pct_10d":48.2},{"date":"2026-05-06","session_label":"May 6","high_low_index_pct":93.6,"advancing_pct_10d":51},{"date":"2026-05-07","session_label":"May 7","high_low_index_pct":88.6,"advancing_pct_10d":48.5},{"date":"2026-05-08","session_label":"May 8","high_low_index_pct":86.9,"advancing_pct_10d":47.2},{"date":"2026-05-11","session_label":"May 11","high_low_index_pct":82.6,"advancing_pct_10d":47.8},{"date":"2026-05-12","session_label":"May 12","high_low_index_pct":78.9,"advancing_pct_10d":51},{"date":"2026-05-13","session_label":"May 13","high_low_index_pct":75.9,"advancing_pct_10d":53},{"date":"2026-05-14","session_label":"May 14","high_low_index_pct":73.9,"advancing_pct_10d":51.5},{"date":"2026-05-15","session_label":"May 15","high_low_index_pct":69.9,"advancing_pct_10d":50.8},{"date":"2026-05-18","session_label":"May 18","high_low_index_pct":74.9,"advancing_pct_10d":54.5},{"date":"2026-05-19","session_label":"May 19","high_low_index_pct":74.9,"advancing_pct_10d":51},{"date":"2026-05-20","session_label":"May 20","high_low_index_pct":76.3,"advancing_pct_10d":50.5},{"date":"2026-05-21","session_label":"May 21","high_low_index_pct":81.3,"advancing_pct_10d":52.5},{"date":"2026-05-22","session_label":"May 22","high_low_index_pct":83,"advancing_pct_10d":54.5},{"date":"2026-05-26","session_label":"May 26","high_low_index_pct":87.2,"advancing_pct_10d":53},{"date":"2026-05-27","session_label":"May 27","high_low_index_pct":91,"advancing_pct_10d":53.2},{"date":"2026-05-28","session_label":"May 28","high_low_index_pct":94,"advancing_pct_10d":52.5},{"date":"2026-05-29","session_label":"May 29","high_low_index_pct":96,"advancing_pct_10d":50.5},{"date":"2026-06-01","session_label":"Jun 1","high_low_index_pct":100,"advancing_pct_10d":50.5},{"date":"2026-06-02","session_label":"Jun 2","high_low_index_pct":100,"advancing_pct_10d":48.5},{"date":"2026-06-03","session_label":"Jun 3","high_low_index_pct":90,"advancing_pct_10d":48.2},{"date":"2026-06-04","session_label":"Jun 4","high_low_index_pct":86.7,"advancing_pct_10d":48.2},{"date":"2026-06-05","session_label":"Jun 5","high_low_index_pct":81.7,"advancing_pct_10d":47},{"date":"2026-06-08","session_label":"Jun 8","high_low_index_pct":78.3,"advancing_pct_10d":45.5},{"date":"2026-06-09","session_label":"Jun 9","high_low_index_pct":78.3,"advancing_pct_10d":47.8},{"date":"2026-06-10","session_label":"Jun 10","high_low_index_pct":78.3,"advancing_pct_10d":45},{"date":"2026-06-11","session_label":"Jun 11","high_low_index_pct":75,"advancing_pct_10d":46},{"date":"2026-06-12","session_label":"Jun 12","high_low_index_pct":71.7,"advancing_pct_10d":49.2},{"date":"2026-06-15","session_label":"Jun 15","high_low_index_pct":61.7,"advancing_pct_10d":50.8},{"date":"2026-06-16","session_label":"Jun 16","high_low_index_pct":59.2,"advancing_pct_10d":51},{"date":"2026-06-17","session_label":"Jun 17","high_low_index_pct":64.9,"advancing_pct_10d":49},{"date":"2026-06-18","session_label":"Jun 18","high_low_index_pct":62.2,"advancing_pct_10d":47.5},{"date":"2026-06-22","session_label":"Jun 22","high_low_index_pct":62.2,"advancing_pct_10d":47.2},{"date":"2026-06-24","session_label":"Jun 24","high_low_index_pct":62.2,"advancing_pct_10d":47.5},{"date":"2026-06-25","session_label":"Jun 25","high_low_index_pct":57.8,"advancing_pct_10d":46.2},{"date":"2026-06-26","session_label":"Jun 26","high_low_index_pct":56.1,"advancing_pct_10d":48.2},{"date":"2026-06-29","session_label":"Jun 29","high_low_index_pct":57.8,"advancing_pct_10d":47.2},{"date":"2026-06-30","session_label":"Jun 30","high_low_index_pct":56.1,"advancing_pct_10d":43.2},{"date":"2026-07-01","session_label":"Jul 1","high_low_index_pct":62.8,"advancing_pct_10d":43},{"date":"2026-07-02","session_label":"Jul 2","high_low_index_pct":65.3,"advancing_pct_10d":45.8},{"date":"2026-07-06","session_label":"Jul 6","high_low_index_pct":69.6,"advancing_pct_10d":47.8},{"date":"2026-07-07","session_label":"Jul 7","high_low_index_pct":75.6,"advancing_pct_10d":49.8},{"date":"2026-07-09","session_label":"Jul 9","high_low_index_pct":80.6,"advancing_pct_10d":49.8},{"date":"2026-07-13","session_label":"Jul 13","high_low_index_pct":81.4,"advancing_pct_10d":50.8},{"date":"2026-07-14","session_label":"Jul 14","high_low_index_pct":83.3,"advancing_pct_10d":49.5},{"date":"2026-07-15","session_label":"Jul 15","high_low_index_pct":83,"advancing_pct_10d":49.8},{"date":"2026-07-16","session_label":"Jul 16","high_low_index_pct":82.2,"advancing_pct_10d":51.8},{"date":"2026-07-17","session_label":"Jul 17","high_low_index_pct":87.2,"advancing_pct_10d":51.8},{"date":"2026-07-20","session_label":"Jul 20","high_low_index_pct":80.5,"advancing_pct_10d":50},{"date":"2026-07-21","session_label":"Jul 21","high_low_index_pct":73,"advancing_pct_10d":47},{"date":"2026-07-22","session_label":"Jul 22","high_low_index_pct":66.3,"advancing_pct_10d":48},{"date":"2026-07-23","session_label":"Jul 23","high_low_index_pct":60.3,"advancing_pct_10d":44.8},{"date":"2026-07-24","session_label":"Jul 24","high_low_index_pct":57,"advancing_pct_10d":48.2},{"date":"2026-07-27","session_label":"Jul 27","high_low_index_pct":59.5,"advancing_pct_10d":50},{"date":"2026-07-28","session_label":"Jul 28","high_low_index_pct":62,"advancing_pct_10d":55.2},{"date":"2026-07-29","session_label":"Jul 29","high_low_index_pct":64,"advancing_pct_10d":52.5}],"shape":"series","sql":"WITH daily_close AS (\n    SELECT ticker,\n           toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,\n           argMax(close, window_start) AS close_px\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','GOOGL','AVGO','JPM','JNJ','XOM','PG',\n                     'KO','PEP','WMT','HD','CVX','MRK','PFE','ABBV','CSCO','ORCL',\n                     'CRM','ADBE','MCD','NKE','VZ','T','DIS','BA','CAT','GE',\n                     'IBM','MMM','UNH','LLY','COST','TGT','SBUX','GS','MS','LIN')\n      AND window_start >= toDateTime('2025-03-01 00:00:00')\n      AND window_start < toDateTime('2026-08-01 05:00:00')\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 ticker, session_date\n),\nextremes AS (\n    SELECT cur.ticker AS ticker,\n           cur.session_date AS session_date,\n           cur.close_px AS close_px,\n           max(hist.close_px) AS high_52w,\n           min(hist.close_px) AS low_52w\n    FROM daily_close AS cur\n    INNER JOIN daily_close AS hist ON cur.ticker = hist.ticker\n    WHERE cur.session_date >= toDate('2026-04-01')\n      AND hist.session_date <= cur.session_date\n      AND hist.session_date > cur.session_date - 364\n    GROUP BY cur.ticker, cur.session_date, cur.close_px\n),\ndaily AS (\n    SELECT session_date,\n           countIf(close_px >= high_52w) AS new_highs,\n           countIf(close_px >= high_52w) + countIf(close_px <= low_52w) AS names_at_extreme\n    FROM extremes\n    GROUP BY session_date\n    HAVING names_at_extreme > 0\n),\nprior AS (\n    SELECT ticker,\n           session_date,\n           close_px,\n           lagInFrame(close_px, 1) OVER (PARTITION BY ticker ORDER BY session_date\n                                         ROWS BETWEEN 1 PRECEDING AND CURRENT ROW) AS prev_close\n    FROM daily_close\n),\nbreadth AS (\n    SELECT session_date,\n           round(100 * countIf(close_px > prev_close) / count(), 1) AS advancing_pct\n    FROM prior\n    WHERE session_date >= toDate('2026-04-01')\n      AND prev_close > 0\n    GROUP BY session_date\n    HAVING count() >= 20\n),\ncombined AS (\n    SELECT d.session_date AS session_date,\n           round(100 * d.new_highs / d.names_at_extreme, 1) AS record_high_pct,\n           b.advancing_pct AS advancing_pct\n    FROM daily AS d\n    INNER JOIN breadth AS b ON d.session_date = b.session_date\n),\nsmoothed AS (\n    SELECT session_date,\n           round(avg(record_high_pct) OVER (ORDER BY session_date\n                                            ROWS BETWEEN 9 PRECEDING AND CURRENT ROW), 1) AS high_low_index_pct,\n           round(avg(advancing_pct) OVER (ORDER BY session_date\n                                          ROWS BETWEEN 9 PRECEDING AND CURRENT ROW), 1) AS advancing_pct_10d,\n           count() OVER (ORDER BY session_date\n                         ROWS BETWEEN 9 PRECEDING AND CURRENT ROW) AS sessions_in_window\n    FROM combined\n)\nSELECT session_date AS date,\n       formatDateTimeInJodaSyntax(session_date, 'MMM d') AS session_label,\n       high_low_index_pct,\n       advancing_pct_10d\nFROM smoothed\nWHERE sessions_in_window = 10\nORDER BY session_date","computed_at":"2026-08-04T15:02:23.276982+00:00","elapsed":0.006019206}