stocks wey reach 52-week highs and lows
See which stocks close for 52-week high or 52-week low for this session. We use exchange tape to get breadth reading for these liquid US stocks.
52-week high na highest price wey stock close for past one year, and 52-week low na the lowest one. For last session wey finish, Jul 22, 2026, 29 stocks for this screen close for 52-week high or within 1% of am, and 12 close for 52-week low or within 1% of am. This screen cover large, liquid US operating companies and e dey rebuild from exchange tape.
Stocks wey reach 52-week highs
Dem list below show the strongest year-to-date gainers, up to twelve of dem. All of dem close the session at or within 1% of their highest close for the trailing 52 weeks.
The exact SQL behind every number
WITH universe AS (
SELECT ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 20 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
WHERE period_end >= today() - 400)
AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
WHERE execution_date BETWEEN today() - 460 AND today())
GROUP BY ticker
HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
SELECT max(toDate(et)) AS d
FROM (
SELECT toTimeZone(window_start, 'America/New_York') AS et
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
),
daily AS (
SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
FROM (
SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 375 DAY
AND ticker IN (SELECT ticker FROM universe)
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
GROUP BY ticker, dt
HAVING nbars >= 20 AND dt > (SELECT d FROM last_session) - 365
),
ranged AS (
SELECT ticker,
argMax(c, dt) AS last_close,
max(c) AS hi,
min(c) AS lo,
argMaxIf(c, dt, dt <= toDate('2025-12-31')) AS base_close,
count() AS n_sessions,
min(dt) AS first_dt,
max(dt) AS last_dt
FROM daily
GROUP BY ticker
HAVING n_sessions >= 200
AND countIf(dt <= toDate('2025-12-31')) > 0
AND last_dt = (SELECT d FROM last_session)
AND first_dt <= (SELECT d FROM last_session) - 350
)
SELECT ticker,
round(last_close, 2) AS close,
round((last_close / base_close - 1) * 100, 1) AS ytd_return_pct
FROM ranged
WHERE last_close >= hi * 0.99
ORDER BY ytd_return_pct DESC, ticker ASC
LIMIT 12DINO dey top the list with 97.2% for the year, closing at $90.86. For this list, the close na the 52-week high within 1% because of how dem build am, so the price column na the same level wey dem dey test. CRNX follow with 80% and PSX dey 63.8%. For the end of the table, WELL dey 32.1% for the year.
Na that spread be the point. 52-week high just dey show where price dey inside its own one-year range, nothing more. Stock wey fall hard last summer and struggle to come back dey carry the same label as stock wey never stop to climb.
Stocks wey dey at 52-week lows
Same screen, but reversed. These names close at or within 1% of their lowest close for the trailing 52 weeks, wey dem arrange from the weakest year-to-date reading, up to twelve of dem.
The exact SQL behind every number
WITH universe AS (
SELECT ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 20 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
WHERE period_end >= today() - 400)
AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
WHERE execution_date BETWEEN today() - 460 AND today())
GROUP BY ticker
HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
SELECT max(toDate(et)) AS d
FROM (
SELECT toTimeZone(window_start, 'America/New_York') AS et
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
),
daily AS (
SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
FROM (
SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 375 DAY
AND ticker IN (SELECT ticker FROM universe)
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
GROUP BY ticker, dt
HAVING nbars >= 20 AND dt > (SELECT d FROM last_session) - 365
),
ranged AS (
SELECT ticker,
argMax(c, dt) AS last_close,
max(c) AS hi,
min(c) AS lo,
argMaxIf(c, dt, dt <= toDate('2025-12-31')) AS base_close,
count() AS n_sessions,
min(dt) AS first_dt,
max(dt) AS last_dt
FROM daily
GROUP BY ticker
HAVING n_sessions >= 200
AND countIf(dt <= toDate('2025-12-31')) > 0
AND last_dt = (SELECT d FROM last_session)
AND first_dt <= (SELECT d FROM last_session) - 350
)
SELECT ticker,
round(last_close, 2) AS close,
round((last_close / base_close - 1) * 100, 1) AS ytd_return_pct
FROM ranged
WHERE last_close <= lo * 1.01
ORDER BY ytd_return_pct ASC, ticker ASC
LIMIT 12CSGP get the weakest year-to-date reading for the list at -58.8%, wey close at $27.69, which na its own 52-week closing low within 1%. BSX follow am next at -54.9%.
52-week low na just one position for price range, e no be verdict on business. Profitable companies fit enter this list because price dey drop slow-slow for long time, and same thing happen to companies wey dey real difficulty. Closing price alone no fit separate dem. For the market-wide version of this same question, see how markets recover from crashes.
Wetin high and low counts dey tell us about market breadth
Breadth dey measure how many stocks dey follow market move, instead of just looking how far index travel. The count of new highs against new lows na one of the oldest breadth readings wey dey exist, and for this page, na that number wey important to watch.
The exact SQL behind every number
WITH universe AS (
SELECT ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 20 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
WHERE period_end >= today() - 400)
AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
WHERE execution_date BETWEEN today() - 460 AND today())
GROUP BY ticker
HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
SELECT max(toDate(et)) AS d
FROM (
SELECT toTimeZone(window_start, 'America/New_York') AS et
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
),
daily AS (
SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
FROM (
SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 425 DAY
AND ticker IN (SELECT ticker FROM universe)
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
GROUP BY ticker, dt
HAVING nbars >= 20 AND dt <= (SELECT d FROM last_session)
),
rolled AS (
SELECT ticker, dt, c,
max(c) OVER w AS hi,
min(c) OVER w AS lo,
count() OVER w AS n_sessions,
min(dt) OVER (PARTITION BY ticker) AS first_dt
FROM daily
WINDOW w AS (PARTITION BY ticker ORDER BY dt RANGE BETWEEN 364 PRECEDING AND CURRENT ROW)
)
SELECT formatDateTime(dt, '%b %e, %Y') AS date,
countIf(c >= hi * 0.99) AS at_52w_high,
countIf(c <= lo * 1.01) AS at_52w_low,
countIf(c >= hi * 0.99) - countIf(c <= lo * 1.01) AS net_highs
FROM rolled
WHERE n_sessions >= 200
AND first_dt <= dt - 350
AND dt > (SELECT d FROM last_session) - 43
GROUP BY dt
ORDER BY dtFor Jul 22, 2026, the screen show 29 names wey dey at or near 52-week high against 12 wey dey at or near low, so the net reading na 17. Six weeks before that, for Jun 10, 2026, the same screen show 19 highs and 16 lows.
For all the 29 sessions wey dem chart, both counts dey swing hard from day to day, so the level for any single session no dey important as much as the drift over weeks. If an index dey stay steady while the high count dey reduce, e mean say the market narrow pass wetin the index alone dey show. When low count dey swell, na that kind setting dey cause buying when others are fearful, wey we test against news sentiment.
How far the rest of the market dey from its own high
Highs and lows na the two ends of one distribution; most stocks dey live for middle. This panel sort everything for screen based on how far dem dey below their 52-week high, and e show the median year-to-date return for each band.
The exact SQL behind every number
WITH universe AS (
SELECT ticker
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 20 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 570
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
AND ticker IN (SELECT arrayJoin(tickers) FROM global_markets.stocks_income_statements
WHERE period_end >= today() - 400)
AND ticker NOT IN ('SPCX','KORU','SOXL','SOXS','TQQQ','SQQQ','NVDL','NVDS','NVD','TSLL','TSLQ','TSLZ','SPXL','SPXS','UPRO','SPXU','LABU','LABD','FAS','FAZ','TNA','TZA','YINN','YANG','UDOW','SDOW','BOIL','KOLD','UCO','SCO','USD','SSO','SDS','QLD','QID','ERX','ERY','DRN','DRV','CURE','SOXY','MUU','SNXX','UVXY','SVXY','UVIX','SVIX','BULZ','WEBL','WEBS','DPST','DRIP','GUSH','AGQ','ZSL','BITX','ETHU','MSTX','MSTU','CONL','DUST','JNUG','JDST','NUGT')
AND ticker NOT IN (SELECT ticker FROM global_markets.stocks_splits
WHERE execution_date BETWEEN today() - 460 AND today())
GROUP BY ticker
HAVING sum(toFloat64(close) * toFloat64(volume)) >= 2000000000
),
last_session AS (
SELECT max(toDate(et)) AS d
FROM (
SELECT toTimeZone(window_start, 'America/New_York') AS et
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
),
daily AS (
SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
FROM (
SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 375 DAY
AND ticker IN (SELECT ticker FROM universe)
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
GROUP BY ticker, dt
HAVING nbars >= 20 AND dt > (SELECT d FROM last_session) - 365
),
ranged AS (
SELECT ticker,
argMax(c, dt) AS last_close,
max(c) AS hi,
min(c) AS lo,
argMaxIf(c, dt, dt <= toDate('2025-12-31')) AS base_close,
count() AS n_sessions,
min(dt) AS first_dt,
max(dt) AS last_dt
FROM daily
GROUP BY ticker
HAVING n_sessions >= 200
AND countIf(dt <= toDate('2025-12-31')) > 0
AND last_dt = (SELECT d FROM last_session)
AND first_dt <= (SELECT d FROM last_session) - 350
)
SELECT multiIf(p < 1, 'At the high (under 1%)',
p < 5, '1% to 5% below',
p < 10, '5% to 10% below',
p < 20, '10% to 20% below',
p < 35, '20% to 35% below',
'More than 35% below') AS bucket,
count() AS stocks,
round(100.0 * count() / sum(count()) OVER (), 1) AS share_pct,
round(quantileExact(0.5)(ytd), 1) AS median_ytd_pct
FROM (
SELECT (1 - last_close / hi) * 100 AS p,
(last_close / base_close - 1) * 100 AS ytd,
multiIf(p < 1, 0, p < 5, 1, p < 10, 2, p < 20, 3, p < 35, 4, 5) AS ord
FROM ranged
)
GROUP BY bucket, ord
ORDER BY ord5.5% of the screen, 29 names, close within 1% of 52-week high. For the other end, 18.9% close more than 35% below one. The median year-to-date return for the top band na 29%; for the bottom band na -28.8%, and the chart show how dem dey move between dem.
That gradient dey closer to arithmetic than to one discovery: stock wey dey near 52-week high don, by how dem take calculate am, spend most of the year dey go up. This panel dey important because e show how unusual the extremes be, and how many stocks dey far from their own best price. To hold one of those names for big quantity na the exposure wey the real risk of one stock dey measure.
Where the market dey for inside its 52-week range
One single stock wey dey high for price dey look different if the market dey near its own high, compared to when the market dey far from its high. The five broad-market ETFs below, we measure dem exactly like the stocks wey dey above.
The exact SQL behind every number
WITH last_session AS (
SELECT max(toDate(et)) AS d
FROM (
SELECT toTimeZone(window_start, 'America/New_York') AS et
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY' AND window_start >= now() - INTERVAL 12 DAY
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 955
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
),
daily AS (
SELECT ticker, toDate(et) AS dt, argMax(c, et) AS c, count() AS nbars
FROM (
SELECT ticker, toTimeZone(window_start, 'America/New_York') AS et, toFloat64(close) AS c
FROM global_markets.delayed_stocks_minute_aggs
WHERE window_start >= now() - INTERVAL 375 DAY
AND ticker IN ('SPY', 'QQQ', 'DIA', 'IWM', 'RSP')
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) >= 930
AND toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York')) < 960
)
GROUP BY ticker, dt
HAVING nbars >= 20
AND dt > (SELECT d FROM last_session) - 365
AND dt <= (SELECT d FROM last_session)
),
ranged AS (
SELECT ticker,
argMax(c, dt) AS last_close,
max(c) AS hi,
min(c) AS lo,
argMaxIf(c, dt, dt <= toDate('2025-12-31')) AS base_close,
count() AS n_sessions,
min(dt) AS first_dt,
max(dt) AS last_dt
FROM daily
GROUP BY ticker
HAVING n_sessions >= 200
AND countIf(dt <= toDate('2025-12-31')) > 0
AND last_dt = (SELECT d FROM last_session)
AND first_dt <= (SELECT d FROM last_session) - 350
)
SELECT multiIf(ticker = 'SPY', 'S&P 500 (SPY)',
ticker = 'QQQ', 'Nasdaq 100 (QQQ)',
ticker = 'DIA', 'Dow 30 (DIA)',
ticker = 'RSP', 'S&P 500 equal weight (RSP)',
'Russell 2000 (IWM)') AS label,
round((1 - last_close / hi) * 100, 2) AS pct_below_high,
round((last_close / lo - 1) * 100, 1) AS pct_above_low,
round((last_close / base_close - 1) * 100, 1) AS ytd_return_pct
FROM ranged
ORDER BY pct_below_high ASCS&P 500 equal weight (RSP) close 1.12% below its 52-week high, na him close pass among the five, and 17.2% above its 52-week low. Nasdaq 100 (QQQ) dey far pass from its high at 5.48%. Year to date, the two dey at 11% and 14.8%.
The gap between an equal-weighted and a cap-weighted version of the same index na breadth reading for itself. When the equal-weighted line dey near its high, e mean say average member dey run faster than the largest members. When the cap-weighted line dey near, e mean say just small handful of very big companies dey carry the index. Neither arrangement dey forecast anything, and if person exit the market during the wrong stretch, e go pay the cost wey dey missing the market's best days.
How dem dey measure am
Every figure wey dey this page come from minute bars for US exchange tape, wey dem aggregate into daily closing prices. The full rules na:
- The universe. Only US-listed operating companies dey inside, wey dem identify by company income statement wey dem file with the SEC for period wey end inside past 400 days, so ETFs and funds no dey inside both lists. Dem exclude Leveraged and inverse ETFs by name too, just to make sure say everything correct.
- Liquidity floor. Stock must trade at least $2 billion over the past 20 calendar days. Once weekend and holiday enter, that window dey hold about twelve sessions, so the bar dey work out near $150 million per session. This one dey keep the lists to names wey reader fit actually trade, and e dey stop thin tape from making extreme data.
- Splits are excluded, not adjusted. Any ticker wey do stock split inside past 460 days, dem drop am from the screen. Dem make that window pass one full year on purpose, so e go cover the oldest prices wey the breadth chart below dey reach back to. This na the main way like this page fit publish wrong thing: one 1-for-20 reverse split fit multiply the quoted price twentyfold without trading behind am, and unadjusted screen go report spectacular new 52-week high. Forward split dey do the opposite and fake 52-week low.
- Closing prices, not intraday extremes. Dem measure the high and the low for closes. Stock fit trade pass its 52-week high during the day, close below am, and e no go show for here. Screens wey build on intraday prints dey report larger counts.
- The session must be complete. Day close na the last minute bar between 15:30 and 16:00 New York time. Session wey still dey load no get bars for that half hour, so e no fit enter the calculation, and session wey dey progress no dey enter. Early-close holiday sessions dey drop out for the same reason. The date wey dey for top na the last session wey pass the test, so e fit dey one or two days behind the calendar.
- A full year of history. Stock need at least 200 sessions inside the 52-week window and first session must be at least 350 days back. Company wey list three months ago no fit print 52-week high for here.
- The 1% band. "At a 52-week high" mean say the close dey at or within 1% of the highest close for the trailing 52 weeks, and the low list dey do the same thing. Year-to-date returns dem measure from the final close of 2025.
FAQ
To buy stock wey dey 52-week high na good idea?
No single answer dey, and wetin we write here no be advice. Wetin this page fit show na wetin happen before: stocks wey dey within 1% of 52-week high get median year-to-date return of 29%, while stocks wey dey more than 35% below their high get -28.8%. That one na wetin happen for the year wey pass, no be for the year wey dey come. The label just show where the price dey for one range, e no be valuation.
Wetin e mean when stock hit 52-week low?
E mean say the stock close lower than any price wey e reach for the last 52 weeks. For Jul 22, 2026, that one apply to 12 names for this screen. Low price fit happen because business dey spoil or because profitable business just dey drift for long, and the price alone no go tell you which one dey happen.
How many stocks dey at 52-week highs right now?
As at the close on Jul 22, 2026, 29 stocks for this screen close at or within 1% of 52-week high, while 12 dey at or within 1% of 52-week low. This screen only hold big, liquid US operating companies wey get at least $2 billion turnover for the past 20 calendar days, so these numbers small pass wetin all-listings screen go show.
How dem take calculate 52-week high?
Take every closing price for the trailing 52 weeks and find the biggest one. If the latest close na that same price, the stock don set 52-week closing high. This page also count any stock wey dey within 1% of that level, and dem dey drop any ticker wey get split for the past 460 days, because split dey change the quoted price without changing wetin the holding worth.
Every panel for up dey store the SQL wey dey behind am. Open the query under any table if you wan check the screen, or run am for the Strasmore terminal. For the week's largest moves instead of the year's extremes, see the biggest stock gainers and losers this week.