S&P 500 sector ETF H1 2026 scorecard: who win, who lose
All eleven S&P 500 sector ETFs rank for H1 2026. See di winners and losers, di Q1-to-Q2 rotation, breadth inside each sector, and wetin each one cost to trade.
Di H1 2026 sector scorecard show full spread of outcomes: technology (XLK) finish di six months up 30.8%, communication services (XLC) finish -9.3%, and roughly forty percentage points separate di best sector from di worst. Three out of di eleven S&P 500 sector ETFs end di half for red, and almost nothing keep im rank from first quarter go second quarter — di half na two opposite markets wey dem stitch together, and dis page score both. Every number wey dey below na stored query result; expand any panel for di exact SQL.
Wetin sector ETF be — and how dis page dey score am
Di eleven Select Sector SPDR funds divide di S&P 500 into industry groups, so one ticker fit buy — or hedge — one sector view. Each fund hold im sector index members, dem weight am by market value, and e dey trade all session like stock. Dis page dey score each fund four ways: price return (first regular-hours open to last regular-hours close), di quarter split under di half number, dollar volume (price times shares wey dem trade — di cleanest measure of how much money change hands), and di bid-ask spread — di gap between di best price to buy at and di best price to sell at, wey be wetin round trip cost. Di index-level ledger for di same six months — rates, options, IPOs, breadth — dey inside di H1 2026 market recap.
Di scorecard: eleven sectors, half and quarter splits
The exact SQL behind every number
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-01-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-06-30') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY tickerRead di half column first: technology lead for 30.8%, with industrials at 19% and energy at 18.8% dey behind am, while three sectors finish negative — communication services at -9.3%, consumer discretionary at -2.3%, and financials at -2.2%. Eight out of eleven positive na respectable breadth for one half wey start with indexes wey dey fall.
Di quarter columns hold di real story. Q1 leaders na energy (36.9%), materials (9.8%), utilities (7%), and staples (5.5%) — one commodity trade plus di classic defensives — while technology (-8.7%), financials (-9.9%), and discretionary (-9.3%) fall follow di broad market. Q2 turn di table upside down: technology return 42%, industrials 13.3%, and health care 7.8%, while energy (-11%), communication services (-3.7%), and utilities (-1%) finish di quarter for red. Energy round trip — 36.9% then -11% — and financials mirror image — -9.9% then 7.7% — na di two cleanest illustrations of wetin one single half-year number dey hide.
Di rotation, month by month
Three tickers dey carry di whole rotation story, so dis panel dey track dem for month level: XLE (Q1 leader), XLK (Q2 own), and XLF (di mirror trade).
The exact SQL behind every number
SELECT toString(toStartOfMonth(toDate(toTimeZone(window_start, 'America/New_York')))) AS month, ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS month_return_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLE', 'XLF', 'XLK')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY month, ticker
ORDER BY month, tickerXLE rise for each of di first three months — 14.1% for January, 11.6% for February, 6% for March, e be like staircase wey dey slow down — den e go three straight months witout any gain (-0.2%, -4.7%, -6.8%). XLK run di opposite picture: e negative for January, February, and March, den 18.9% for April and 19.1% for May — back-to-back months wey nearly build di whole sector-leading half. April na di handoff: di leadership flip just siddon for one single column of dis table. XLF two positive months na April and June, at 4.7% and 4.7%. Di releases wey di half trade against — inflation prints, payrolls, di Treasury curve — dem dey inside di macro picture as we dey enter H2 2026.
Breadth inside each sector
Return wey sector fund get no dey tell you how many of im members follow body. The warehouse no carry any column for sector classification, so this panel dey measure breadth inside each sector with one fixed basket wey dem show fully: five big-cap household names for each sector, fifty-five in total, every single one dey inside the SQL. Na sample of popular names, no be the actual holdings wey the funds get — the limits of the basket dey inside the data notes.
The exact SQL behind every number
SELECT sector,
count() AS members,
countIf(ret_pct > 0) AS members_up,
countIf(ret_pct <= 0) AS members_down,
round(quantileDeterministic(0.5)(ret_pct, cityHash64(ticker)), 1) AS median_member_pct,
argMax(ticker, (ret_pct, ticker)) AS best_member,
round(max(ret_pct), 1) AS best_member_pct,
argMin(ticker, (ret_pct, ticker)) AS worst_member,
round(min(ret_pct), 1) AS worst_member_pct
FROM (
SELECT ticker,
multiIf(ticker IN ('AAPL','MSFT','NVDA','AVGO','ORCL'), 'technology (XLK)',
ticker IN ('META','GOOGL','NFLX','DIS','TMUS'), 'communication services (XLC)',
ticker IN ('XOM','CVX','COP','EOG','SLB'), 'energy (XLE)',
ticker IN ('JPM','BAC','WFC','GS','MS'), 'financials (XLF)',
ticker IN ('GE','CAT','RTX','UNP','UPS'), 'industrials (XLI)',
ticker IN ('LLY','UNH','JNJ','ABBV','MRK'), 'health care (XLV)',
ticker IN ('AMZN','TSLA','HD','MCD','NKE'), 'consumer discretionary (XLY)',
ticker IN ('PG','COST','WMT','KO','PEP'), 'consumer staples (XLP)',
ticker IN ('NEE','SO','DUK','CEG','AEP'), 'utilities (XLU)',
ticker IN ('PLD','AMT','EQIX','WELL','SPG'), 'real estate (XLRE)',
'materials (XLB)') AS sector,
(argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100 AS ret_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('AAPL','MSFT','NVDA','AVGO','ORCL','META','GOOGL','NFLX','DIS','TMUS','XOM','CVX','COP','EOG','SLB','JPM','BAC','WFC','GS','MS','GE','CAT','RTX','UNP','UPS','LLY','UNH','JNJ','ABBV','MRK','AMZN','TSLA','HD','MCD','NKE','PG','COST','WMT','KO','PEP','NEE','SO','DUK','CEG','AEP','PLD','AMT','EQIX','WELL','SPG','LIN','SHW','APD','FCX','ECL')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
)
GROUP BY sector
ORDER BY median_member_pct DESC, sectorTwo rows dey catch attention pass. Health care: all 5 of im five basket names rise, with median of 21.7% — while XLV, the fund, gain 2.5% for the half. Fund return dey weighted by market value; basket median dey weight every member equally — health care na the widest case where the basket beat the fund. Technology na the same gap but for reverse — and, measure from start to finish, e wide pass all: the fund gain 30.8% while im five biggest household names split 3 up and 2 down with median of 5.2%, and ORCL print -25.7%. The headline gain wey the sector get no come from im classic megacaps — where e come from na the next panel. For other places inside the table: CAT im 84.3% na the best print among all fifty-five names, and communication services na the weakest room for the building — 1 out of five up, median of -15.2%, with NFLX at -24.2%.
Di memory-semis trade inside technology
The exact SQL behind every number
SELECT ticker,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS h1_return_pct,
round((argMaxIf(toFloat64(close), window_start, toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q1_return_pct,
round((argMaxIf(toFloat64(close), window_start, (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ argMinIf(toFloat64(open), window_start, window_start >= toDateTime('2026-04-01 00:00:00') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 1) AS q2_return_pct,
round(sumIf(toFloat64(close) * toFloat64(volume), (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS h1_dollar_bn
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('MU', 'SNDK', 'NVDA', 'AMD', 'INTC', 'AVGO', 'QCOM', 'TXN')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY h1_return_pct DESC, tickerIf you break technology apart, di half im defining single-name trade go show face. SNDK return 830.1% for six months, MU 290%, INTC 269.3%, and AMD 165.3% — while NVDA, wey be di biggest single-name tape for di set with $3287.9 billion of half-year turnover, return 5.2%, with AVGO at 6.9% and QCOM at 6.3%. Di complex split into two: di memory-and-foundry names multiply while di established AI-accelerator names dey move sideways. Di Q2 column carry di timing: MU im 229.9%, INTC im 210%, and AMD im 179.8% land for di same quarter wey XLK print im 42% — di sector fund rally and di memory repricing na di same three months of tape. Dem break down MU June tick by tick here, and NVDA June deep-dive dey track di divergence session by session.
Where the trading dollars waka go
The exact SQL behind every number
SELECT ticker,
round(sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS q1_dollar_bn,
round(sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) / 1e9, 1) AS q2_dollar_bn,
round((sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) >= toDate('2026-04-01') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959)
/ sumIf(toFloat64(close) * toFloat64(volume), toDate(toTimeZone(window_start, 'America/New_York')) <= toDate('2026-03-31') AND (toHour(toTimeZone(window_start, 'America/New_York')) * 60 + toMinute(toTimeZone(window_start, 'America/New_York'))) BETWEEN 570 AND 959) - 1) * 100, 0) AS q2_vs_q1_pct
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND window_start >= toDateTime('2026-01-01 00:00:00') AND window_start < toDateTime('2026-07-01 00:00:00')
GROUP BY ticker
ORDER BY q2_vs_q1_pct DESC, tickerDollar volume move for one direction: every single one of di eleven sector funds trade fewer dollars for second quarter pass first quarter. Di top row of di table na di smallest decline — XLK at -23%, from $161.2 billion to $124.8 billion — and di bottom na real estate at -45%. Di sector wrappers busy well well for di quarter wey di indexes fall, and activity inside dem reduce as di recovery dey run. Two scale notes from di panels wey dey up: XLE na di half most-traded sector fund at $316.2 billion, and MU alone turn over $2862.1 billion — roughly ten times di XLK fund own $286 billion. Sector products na di scoreboard; single names na where dem play di H1 game.
How much e dey cost to trade each sector
Return tables full ground, but quote tapes no dey common. Dis panel dey measure each fund median quoted bid-ask spread — di cost of one round trip — across one full session wey dem label, June 29, 2026, from every NBBO update wey dem print dat day.
The exact SQL behind every number
SELECT ticker,
round(quantileDeterministicIf(0.5)((toFloat64(ask_price) - toFloat64(bid_price)) / ((toFloat64(ask_price) + toFloat64(bid_price)) / 2) * 10000, toUInt64(toUnixTimestamp64Micro(sip_timestamp)), bid_price > 0 AND ask_price >= bid_price), 2) AS med_spread_bps,
round(count() / 1e6, 2) AS quote_updates_m,
countIf(NOT (bid_price > 0 AND ask_price > 0 AND ask_price >= bid_price)) AS invalid_dropped
FROM global_markets.cache_stocks_quotes
WHERE ticker IN ('XLB', 'XLC', 'XLE', 'XLF', 'XLI', 'XLK', 'XLP', 'XLRE', 'XLU', 'XLV', 'XLY')
AND sip_timestamp >= toDateTime64('2026-06-29 13:30:00', 9) AND sip_timestamp < toDateTime64('2026-06-29 20:00:00', 9)
GROUP BY ticker
ORDER BY med_spread_bps, tickerDi cheapest fund to trade dat session na XLV for median of 0.62 basis points; di widest na XLRE for 2.23. One basis point na hundredth of one percent, so di whole table dey for hundredths of one percent per round trip — di practical meaning of "sector ETFs dey liquid." Quote-update counts vary almost tenfold across di table, and di medians still cluster within two or three basis points of each other. For contrast, di June 29 microstructure deep-dive dey work di same session SPY quote tape, wey dey run tighter still pass any fund for dis table.
FAQ
Which sector perform best for di first half of 2026?
Na Technology. XLK return 30.8% for di half, and all of am come from di second quarter (42% for Q2 afta -8.7% for Q1). Communication services (XLC) be di worst one at -9.3%.
Di same sectors lead for Q1 and Q2 2026?
No — di two quarters near-opposite. Energy lead Q1 at 36.9% and finish Q2 at -11%; technology print -8.7% for Q1 and lead Q2 at 42%. Utilities and staples lead early but fade late.
How much e cost to trade a sector SPDR ETF?
For di measured session of June 29, 2026, median quoted spreads run from 0.62 basis points (XLV) go reach 2.23 (XLRE) — na hundredths of a percent per round trip, far tighter pass wetin you go see for a typical single stock.
Why a sector ETF return dey different from di return of di members wey dey inside am?
Di funds dey weight holdings by market value, so a few giant members dey control di print, while a basket median dey treat every member equally. For H1 2026 di gap wide pass for health care: a five-name basket median of 21.7% against XLV own wey be 2.5%.
Which ones be di eleven sector ETFs?
XLB (materials), XLC (communication services), XLE (energy), XLF (financials), XLI (industrials), XLK (technology), XLP (consumer staples), XLRE (real estate), XLU (utilities), XLV (health care), and XLY (consumer discretionary). All of dem together dey partition di S&P 500.
Data notes
Full data notes
- Di breadth baskets na fixed editorial samples of five household large-caps per sector, no be fund holdings, and dem no carry weights. We screen candidates against di half im split calendar — minute bars na unadjusted, and a mid-period split dey spoil an open-to-close return — and we replace two names wey for obvious show for dat screen. Every figure for dis page na price return; dividends no dey inside.
- Basket medians dey use deterministic quantiles, and we dey break best/worst members tie by ticker, so regeneration no fit reorder ties.
- Di spread panel dey measure one labeled session (June 29, 2026), no be di whole half; a six-month whole-quote-tape scan across eleven tickers pass di query budget wey dis page dey generate under. Invalid quotes (crossed or one-sided) dey count for di panel, we no dey silently drop dem.
- Di scorecard panel na di same query wey di H1 recap dey carry, so di two pages no fit disagree on a sector number.
How We Do Am
- Di window na January 1 – June 30, 2026. Returns na from first regular-hours open to last regular-hours close inside each window, wey dem compute inside di queries wey show. Dem filter regular hours for Eastern wall clock (9:30–15:59, dem convert per row) — e dey safe for DST across di half im EST and EDT months.
- Dem apply quarter boundaries for di Eastern trading date: Q1 end March 31, Q2 start April 1.
- Dollar volume na price times shares wey dem sum over regular hours for di same queries.
- Generation dey run through di gated read-only path; di public page never dey query live. Warehouse state as of July 12, 2026.
Di half im full ledger — indexes, rates, di options tape — dey inside di H1 2026 market recap. To slice a sector differently, every panel im SQL dey run as e be for di Strasmore terminal.