Strasmore Research
Market Recap

US market week for numbers: index, sector, movers

Matt ConnorBy Matt Connor Updated 2026-07-25

Dis na di past week for US market, as e be. Every figure wey dey below na from stored query wey dem run against di real tape, and dis page dey refresh every week, so di numbers na always di most recent full week of trading.

Di index scoreboard

QueryDi major index ETFs for di past week
The exact SQL behind every number
WITH sess AS (
    SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS o,
        argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('SPY', 'QQQ', 'DIA', 'IWM')
      AND window_start >= now() - INTERVAL 12 DAY AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, d
),
wk AS (SELECT ticker, argMin(o, d) AS wo, argMax(c, d) AS wc, min(d) AS d0, max(d) AS d1
       FROM sess WHERE d >= (SELECT max(d) FROM sess) - 6 GROUP BY ticker)
SELECT multiIf(ticker = 'SPY', 'S&P 500 (SPY)', ticker = 'QQQ', 'Nasdaq 100 (QQQ)', ticker = 'DIA', 'Dow (DIA)', 'Russell 2000 (IWM)') AS index_etf,
    round((wc / wo - 1) * 100, 2) AS week_return_pct,
    (SELECT formatDateTime(min(d0), '%b %e') FROM wk) AS week_start,
    (SELECT formatDateTime(max(d1), '%b %e') FROM wk) AS week_end
FROM wk
ORDER BY multiIf(ticker = 'SPY', 0, ticker = 'QQQ', 1, ticker = 'DIA', 2, 3)

For di week of Jul 17 to Jul 23, di S&P 500 (SPY) return na -0.45%, di Nasdaq 100 (QQQ) na 0.28%, di Dow (DIA) na -0.67%, and di small-cap Russell 2000 (IWM) na -0.09%. Di gap between di four na di week story for one line: when Nasdaq and Russell diverge, di market dey choose between megacap growth and every other thing.

Under di surface: breadth

One index level dey hide how many stocks actually participate. Dis one dey count dem each session: among names wey trade at least $500 million, how many close higher dan di session before, and how many close lower.

QueryDaily market breadth: advancers vs decliners each session (names wey dey trade $500M+)
The exact SQL behind every number
WITH day AS (
    SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c,
        sum(toFloat64(close) * toFloat64(volume)) AS dv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 14 DAY AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, d
),
chg AS (SELECT ticker, d, c, dv, lagInFrame(c) OVER (PARTITION BY ticker ORDER BY d) AS prev_c FROM day),
per_day AS (
    SELECT d,
        countIf(c > prev_c AND dv >= 500000000 AND prev_c > 3) AS advancers,
        countIf(c < prev_c AND dv >= 500000000 AND prev_c > 3) AS decliners,
        countIf(dv >= 500000000 AND prev_c > 3) AS total
    FROM chg WHERE d >= (SELECT max(d) FROM day) - 12 AND prev_c > 0
    GROUP BY d HAVING total >= 100
),
recent AS (SELECT d, advancers, decliners FROM per_day ORDER BY d DESC LIMIT 5)
SELECT d AS date, advancers, decliners FROM recent ORDER BY d ASC

Di two lines na participation itself. When advancers dey run well above decliners across di week, one rising index get di whole market behind am; when dem converge or cross, one green index na handful of large names dey carry tape wey most stocks sit out. For di latest session, 101 names advance against 128 wey fall.

Sectors, best to worst

QueryDi eleven S&P 500 sectors for di past week
The exact SQL behind every number
WITH sess AS (
    SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS o,
        argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
      AND window_start >= now() - INTERVAL 12 DAY AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, d
),
wk AS (SELECT ticker, argMin(o, d) AS wo, argMax(c, d) AS wc FROM sess WHERE d >= (SELECT max(d) FROM sess) - 6 GROUP BY ticker)
SELECT multiIf(ticker = 'XLK', 'Technology', ticker = 'XLC', 'Communications', ticker = 'XLE', 'Energy',
    ticker = 'XLF', 'Financials', ticker = 'XLI', 'Industrials', ticker = 'XLB', 'Materials',
    ticker = 'XLP', 'Staples', ticker = 'XLRE', 'Real Estate', ticker = 'XLU', 'Utilities',
    ticker = 'XLV', 'Health Care', 'Consumer Disc.') AS sector,
    round((wc / wo - 1) * 100, 2) AS week_return_pct
FROM wk ORDER BY week_return_pct DESC

Di sector board dey sort di week into leaders and laggards. Technology lead at 3.53%, and Consumer Disc. lag at -5.75%. Di spread between di top and bottom sector na read on how much rotation drive di week versus one uniform move.

Di week biggest movers

Di largest weekly gains among heavily traded stocks (over $1 billion dey change hands, leveraged and inverse ETFs dey excluded):

QueryBiggest stock gainers for di past week
The exact SQL behind every number
WITH sess AS (
    SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS o,
        argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c,
        sum(toFloat64(close) * toFloat64(volume)) AS dv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 12 DAY AND ticker NOT IN ('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 (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, d
),
wk AS (SELECT ticker, argMin(o, d) AS wo, argMax(c, d) AS wc, sum(dv) AS wd, count() AS n
       FROM sess WHERE d >= (SELECT max(d) FROM sess) - 6 GROUP BY ticker)
SELECT ticker, round((wc / wo - 1) * 100, 1) AS week_return_pct, round(wd / 1e9, 1) AS week_dollar_bn
FROM wk WHERE wd >= 1000000000 AND wo >= 10 AND n >= 4
ORDER BY (wc / wo - 1) DESC LIMIT 7

CIFR lead all liquid names, up 52.4% for di week. Di steepest declines run di other way:

QueryBiggest stock losers for di past week
The exact SQL behind every number
WITH sess AS (
    SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        argMin(toFloat64(open), toTimeZone(window_start, 'America/New_York')) AS o,
        argMax(toFloat64(close), toTimeZone(window_start, 'America/New_York')) AS c,
        sum(toFloat64(close) * toFloat64(volume)) AS dv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 12 DAY AND ticker NOT IN ('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 (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, d
),
wk AS (SELECT ticker, argMin(o, d) AS wo, argMax(c, d) AS wc, sum(dv) AS wd, count() AS n
       FROM sess WHERE d >= (SELECT max(d) FROM sess) - 6 GROUP BY ticker)
SELECT ticker, round((wc / wo - 1) * 100, 1) AS week_return_pct, round(wd / 1e9, 1) AS week_dollar_bn
FROM wk WHERE wd >= 1000000000 AND wo >= 10 AND n >= 4
ORDER BY (wc / wo - 1) ASC LIMIT 7

PATH fall di most among heavily traded stocks, at -15.2%. Di full rolling leaderboard, wey dey refresh continuously, dey on di weekly movers page.

Where di volume concentrate

Dollars traded dey show where di market attention actually go, wey no always be where di biggest percentage moves dey.

QueryWhere di volume go: most dollars traded for di past week
The exact SQL behind every number
WITH sess AS (
    SELECT ticker, toDate(toTimeZone(window_start, 'America/New_York')) AS d,
        sum(toFloat64(close) * toFloat64(volume)) AS dv
    FROM global_markets.delayed_stocks_minute_aggs
    WHERE window_start >= now() - INTERVAL 12 DAY AND ticker NOT IN ('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 (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959
    GROUP BY ticker, d
),
wk AS (SELECT ticker, sum(dv) AS wd FROM sess WHERE d >= (SELECT max(d) FROM sess) - 6 GROUP BY ticker)
SELECT ticker, round(wd / 1e9, 1) AS week_dollar_bn FROM wk ORDER BY wd DESC LIMIT 8

MU see di most dollar volume of any stock for di week, $140.2 billion. Heavy volume on one small price move na one crowded, liquid name dey change hands; heavy volume on one large move na conviction. Di names near di top of dis list na usually di megacaps and di week news stocks, and to compare am against di movers list above dey separate di stocks wey move a lot from di stocks wey simply trade a lot.

How to read one week for di market

Four numbers, read together, dey describe one week better dan any single index level. Di index scoreboard dey talk how di average dollar do, weighted toward di largest companies. Breadth dey talk how many stocks actually take part: one strong index on thin breadth na one narrow, top-heavy move wey history talk say e no dey last, while broad breadth na one durable, whole-market shift. Di sector board dey talk wetin kind week e be, one wide spread between di best and worst sector dey point to rotation and stock-picking, one narrow spread to one tide wey move everything at once. Di movers and di volume leaders den name di specific stocks wey drive am, separating di loud percentage moves from di quiet, heavily traded giants. Dis recap dey lay all four side by side each week so di week dey read as picture, no be headline. With every figure computed from one stored query, none of am fit drift from wetin di tape actually print.

FAQ

Wetin happen for di market dis week?

For di week of Jul 17 to Jul 23, di S&P 500 return na -0.45% and di Nasdaq 100 na 0.28%. Technology na di strongest sector and Consumer Disc. di weakest, and for di latest session 101 heavily traded stocks advance against 128 wey fall. Di panels above get di full detail.

How often dem dey update dis recap?

Every week. Dem compute di page from live queries over di trailing five trading sessions, so e always dey reflect di most recent full week. Subscribers dey get am as one email per week.

Where di numbers dey come from?

Dem read every figure from one stored query against di market tape (equities minute bars). Open di SQL under any panel to audit am, or run di same query yourself on di Strasmore terminal.


You want dis one for your inbox? Na di weekly recap wey subscribers dey receive: one email per week, di market week in numbers, every figure wey you fit audit. For di day-to-day, di movers and short-interest pages dey refresh continuously.

#market recap#weekly recap#market data#indexes