New 52-week highs and lows each session: 40 large-cap US names, April to July 2026
Answered against 22 years of US equities and 12 years of US options data and published with the query that produced it. This result is stored as of 2026-08-04, from What Is the High-Low Index? Market Breadth.
| date | session_label | new_highs | new_lows |
|---|---|---|---|
| 2026-04-01 | Apr 1 | 1 | 1 |
| 2026-04-02 | Apr 2 | 0 | 1 |
| 2026-04-06 | Apr 6 | 1 | 1 |
| 2026-04-07 | Apr 7 | 0 | 2 |
| 2026-04-08 | Apr 8 | 1 | 1 |
| 2026-04-09 | Apr 9 | 2 | 2 |
| 2026-04-10 | Apr 10 | 1 | 3 |
| 2026-04-13 | Apr 13 | 1 | 0 |
| 2026-04-14 | Apr 14 | 1 | 0 |
| 2026-04-15 | Apr 15 | 1 | 0 |
| 2026-04-17 | Apr 17 | 2 | 0 |
| 2026-04-20 | Apr 20 | 3 | 0 |
| 2026-04-21 | Apr 21 | 3 | 0 |
| 2026-04-22 | Apr 22 | 4 | 0 |
| 2026-04-23 | Apr 23 | 1 | 0 |
| 2026-04-24 | Apr 24 | 5 | 0 |
| 2026-04-27 | Apr 27 | 3 | 0 |
| 2026-04-29 | Apr 29 | 1 | 0 |
| 2026-04-30 | Apr 30 | 4 | 0 |
| 2026-05-01 | May 1 | 4 | 0 |
| 2026-05-04 | May 4 | 2 | 2 |
| 2026-05-05 | May 5 | 5 | 0 |
| 2026-05-06 | May 6 | 6 | 1 |
| 2026-05-07 | May 7 | 1 | 1 |
| 2026-05-08 | May 8 | 5 | 1 |
| 2026-05-11 | May 11 | 4 | 3 |
| 2026-05-12 | May 12 | 5 | 3 |
| 2026-05-13 | May 13 | 7 | 3 |
| 2026-05-14 | May 14 | 4 | 1 |
| 2026-05-15 | May 15 | 3 | 2 |
| 2026-05-18 | May 18 | 2 | 0 |
| 2026-05-19 | May 19 | 3 | 0 |
| 2026-05-20 | May 20 | 3 | 0 |
| 2026-05-21 | May 21 | 4 | 0 |
| 2026-05-22 | May 22 | 5 | 0 |
| 2026-05-26 | May 26 | 1 | 0 |
| 2026-05-27 | May 27 | 1 | 0 |
| 2026-05-28 | May 28 | 4 | 0 |
| 2026-05-29 | May 29 | 4 | 0 |
| 2026-06-01 | Jun 1 | 5 | 0 |
| 2026-06-02 | Jun 2 | 6 | 0 |
| 2026-06-03 | Jun 3 | 0 | 1 |
| 2026-06-04 | Jun 4 | 4 | 2 |
| 2026-06-05 | Jun 5 | 1 | 1 |
| 2026-06-08 | Jun 8 | 2 | 1 |
| 2026-06-09 | Jun 9 | 1 | 0 |
| 2026-06-10 | Jun 10 | 1 | 0 |
| 2026-06-11 | Jun 11 | 2 | 1 |
| 2026-06-12 | Jun 12 | 2 | 1 |
| 2026-06-15 | Jun 15 | 0 | 1 |
| 2026-06-16 | Jun 16 | 3 | 1 |
| 2026-06-17 | Jun 17 | 4 | 3 |
| 2026-06-18 | Jun 18 | 2 | 3 |
| 2026-06-22 | Jun 22 | 3 | 3 |
| 2026-06-24 | Jun 24 | 2 | 1 |
| 2026-06-25 | Jun 25 | 5 | 4 |
| 2026-06-26 | Jun 26 | 5 | 1 |
| 2026-06-29 | Jun 29 | 5 | 1 |
| 2026-06-30 | Jun 30 | 1 | 1 |
| 2026-07-01 | Jul 1 | 2 | 1 |
| 2026-07-02 | Jul 2 | 6 | 0 |
| 2026-07-06 | Jul 6 | 2 | 0 |
| 2026-07-07 | Jul 7 | 5 | 0 |
| 2026-07-09 | Jul 9 | 2 | 0 |
| 2026-07-13 | Jul 13 | 3 | 1 |
| 2026-07-14 | Jul 14 | 3 | 1 |
| 2026-07-15 | Jul 15 | 4 | 1 |
| 2026-07-16 | Jul 16 | 3 | 1 |
| 2026-07-17 | Jul 17 | 1 | 0 |
| 2026-07-20 | Jul 20 | 0 | 1 |
| 2026-07-21 | Jul 21 | 1 | 3 |
| 2026-07-22 | Jul 22 | 1 | 2 |
| 2026-07-23 | Jul 23 | 2 | 3 |
| 2026-07-24 | Jul 24 | 2 | 1 |
| 2026-07-27 | Jul 27 | 3 | 0 |
| 2026-07-28 | Jul 28 | 7 | 0 |
| 2026-07-29 | Jul 29 | 3 | 0 |
- Rows × columns
- 77 × 4
- Period covered
- to
- Computed
- Completeness
- No missing values
- Source
- US exchange, SIP and OPRA market data
- Licence
- Strasmore terms · free, no signup
What each column holds
| Column | Type | Range | Notes |
|---|---|---|---|
date |
date | 2026-04-01 to 2026-07-29 | |
session_label |
text | 77 distinct values (Apr 1, Apr 10, Apr 13…) | |
new_highs |
number | 0 to 7 | |
new_lows |
number | 0 to 4 |
Computed from Strasmore's warehouse of US exchange, SIP and OPRA market data. Equity prices are delayed; options greeks and implied volatility are end-of-day. This result is stored, not recomputed on load — it is exactly the numbers that were returned on , and the query below is what returned them.
the exact SQL behind every number
WITH daily_close AS (
SELECT ticker,
toDate(toTimeZone(window_start, 'America/New_York')) AS session_date,
argMax(close, window_start) AS close_px
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL','MSFT','NVDA','AMZN','GOOGL','AVGO','JPM','JNJ','XOM','PG',
'KO','PEP','WMT','HD','CVX','MRK','PFE','ABBV','CSCO','ORCL',
'CRM','ADBE','MCD','NKE','VZ','T','DIS','BA','CAT','GE',
'IBM','MMM','UNH','LLY','COST','TGT','SBUX','GS','MS','LIN')
AND window_start >= toDateTime('2025-03-01 00:00:00')
AND window_start < toDateTime('2026-08-01 05:00:00')
AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60
+ toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
GROUP BY ticker, session_date
),
extremes AS (
SELECT cur.ticker AS ticker,
cur.session_date AS session_date,
cur.close_px AS close_px,
max(hist.close_px) AS high_52w,
min(hist.close_px) AS low_52w
FROM daily_close AS cur
INNER JOIN daily_close AS hist ON cur.ticker = hist.ticker
WHERE cur.session_date >= toDate('2026-04-01')
AND hist.session_date <= cur.session_date
AND hist.session_date > cur.session_date - 364
GROUP BY cur.ticker, cur.session_date, cur.close_px
),
daily AS (
SELECT session_date,
countIf(close_px >= high_52w) AS new_highs,
countIf(close_px <= low_52w) AS new_lows,
countIf(close_px >= high_52w) + countIf(close_px <= low_52w) AS names_at_extreme
FROM extremes
GROUP BY session_date
HAVING names_at_extreme > 0
)
SELECT session_date AS date,
formatDateTimeInJodaSyntax(session_date, 'MMM d') AS session_label,
new_highs,
new_lows
FROM daily
ORDER BY session_date
Run your own version of this
The same 22 years of US equities and 12 years of options data are queryable in SQL or plain English. A free account runs 100 queries a day and takes no card.
More from this analysisWhat Is the High-Low Index? Market Breadth
Record High Percent and its 10-day average (the High-Low Index), 40-name basket
series 68×4
→
Two breadth measures, same basket: 10-day High-Low Index vs 10-day advancing share
series 68×4
→
How thin the denominator gets: sessions bucketed by names at a 52-week extreme
table 3×5
→
AAPL price vs. running VWAP: July 2, 2026 regular session, sampled every 5 minutes
series 78×3
→
New 52-week highs against new lows, daily, over the past six weeks
series 31×4
→
Excluded from the boards: 2026 splits large enough to fake a year-to-date move
series 12×5
→
See all 2,170 queries →