RSP vs SPY: Equal Weight S&P 500
RSP vs SPY: there is no equal weighted SPY. See how much of cap weighted exposure sits in the top names, and what the quarterly rebalance changes.
RSP vs SPY is a question about two funds that own the same 500 companies in completely different proportions. There is no equal weighted version of SPY: SPY tracks the cap weighted S&P 500, where each company's weight is its share of the group's market value, and the equal weight version of that index is tracked by a separate fund, RSP, which resets all 500 members to the same 0.2% of the portfolio four times a year. Everything below follows from that one construction choice.
Is there an equal weighted SPY?
No, and the naming trips people up. SPY is a unit investment trust that has tracked the cap weighted S&P 500 since 1993, and its sponsor has never issued an equal weighted share class of it. The equal weight exposure lives in a different fund from a different sponsor: RSP, the Invesco S&P 500 Equal Weight ETF, trading since 2003 and tracking the S&P 500 Equal Weight Index.
Same membership list, one difference in the weighting rule. Cap weighting sets each member's weight to its float adjusted market value divided by the market value of all 500 together. Equal weighting sets each weight to 1 divided by 500, which is 0.2%, then lets prices push those weights around until the next reset. The portfolio theory behind flat weighting, and the awkward fact that it is hard to improve on, is laid out in when equal weight beats optimization. This page is about the plumbing.
How lopsided is cap weighting?
Take ten household names from across the index's size range and price them off one daily snapshot. Under cap weighting the largest of them carries the weight of many smaller ones stacked together. Under equal weighting all ten would carry the same slice.
| ticker | market_cap_bn | cap_weight_pct_of_basket | equal_weight_pct | as_of_date |
|---|---|---|---|---|
| NVDA | 5434.8 | 23.08 | 10 | 2026-09-25 |
| AAPL | 4977.6 | 21.14 | 10 | 2026-09-25 |
| GOOGL | 4206.1 | 17.86 | 10 | 2026-09-25 |
| MSFT | 3832.8 | 16.28 | 10 | 2026-09-25 |
| AMZN | 2693 | 11.44 | 10 | 2026-09-25 |
| META | 1914.9 | 8.13 | 10 | 2026-09-25 |
| KO | 377.8 | 1.6 | 10 | 2026-09-25 |
| MMM | 87.4 | 0.37 | 10 | 2026-09-25 |
| HAS | 12.4 | 0.05 | 10 | 2026-09-25 |
| MOS | 7.3 | 0.03 | 10 | 2026-09-25 |
The exact SQL behind every number
SELECT
ticker,
round(cap / 1e9, 1) AS market_cap_bn,
round(100 * cap / sum(cap) OVER (), 2) AS cap_weight_pct_of_basket,
round(100.0 / count() OVER (), 2) AS equal_weight_pct,
toString(snapshot_date) AS as_of_date
FROM
(
SELECT
ticker,
toFloat64(argMax(market_cap, date)) AS cap,
max(date) AS snapshot_date
FROM global_markets.stocks_ratios
WHERE ticker IN ('NVDA', 'MSFT', 'AAPL', 'AMZN', 'GOOGL', 'META', 'KO', 'MMM', 'MOS', 'HAS')
AND date >= today() - 45
AND market_cap > 0
GROUP BY ticker
)
ORDER BY cap DESCAs of 2026-09-25, NVDA carried a market value of roughly $5434.8 billion, which works out to 23.08% of this basket under cap weighting against the 10% a flat split hands every name. At the other end, MOS came to $7.3 billion, or 0.03% of the basket. Equal weighting gives those two positions an identical slice.
Now scale that arithmetic to 500 names. The ten largest members of the cap weighted index hold whatever their market values say they hold, a share both fund sponsors publish on a dated daily holdings page. Under equal weighting the top ten hold 2.0% between them, ten slices of 0.2%, and that figure cannot drift far for more than a quarter at a time. The distance between those two numbers is what people mean by index concentration, which concentration risk takes apart in more detail.
The equal weight S&P 500 quarterly rebalance
The S&P 500 Equal Weight Index resets after the close on the third Friday of March, June, September and December. Every member goes back to 0.2% on that date, and a tracking fund has to trade to follow it: trim whatever grew past its slice, top up whatever fell below it. A cap weighted tracker needs none of that. Market value weights maintain themselves as prices move, and the fund trades mainly on membership changes, share count updates, corporate actions and investor flows. That is the source of the turnover difference between the two.
The reset is visible on the tape.
| quarter | peak_session | peak_weekday | peak_volume_m | median_volume_m | peak_vs_median |
|---|---|---|---|---|---|
| 2024 Q1 | Feb 14, 2024 | Wed | 11.29 | 6.06 | 1.9 |
| 2024 Q2 | Apr 8, 2024 | Mon | 22.5 | 5.34 | 4.2 |
| 2024 Q3 | Aug 5, 2024 | Mon | 13.75 | 5.8 | 2.4 |
| 2024 Q4 | Nov 6, 2024 | Wed | 12.97 | 5.38 | 2.4 |
| 2025 Q1 | Feb 3, 2025 | Mon | 23.42 | 7.7 | 3 |
| 2025 Q2 | Apr 9, 2025 | Wed | 37.77 | 9.1 | 4.2 |
| 2025 Q3 | Jul 31, 2025 | Thu | 21.53 | 11.83 | 1.8 |
| 2025 Q4 | Nov 21, 2025 | Fri | 57.47 | 14.81 | 3.9 |
| 2026 Q1 | Feb 12, 2026 | Thu | 38.64 | 18.1 | 2.1 |
| 2026 Q2 | May 20, 2026 | Wed | 18.99 | 9.67 | 2 |
| 2026 Q3 | Jul 8, 2026 | Wed | 13.65 | 6.44 | 2.1 |
The exact SQL behind every number
SELECT
concat(toString(toYear(date)), ' Q', toString(toQuarter(date))) AS quarter,
formatDateTime(argMax(date, volume), '%b %e, %Y') AS peak_session,
formatDateTime(argMax(date, volume), '%a') AS peak_weekday,
round(toFloat64(max(volume)) / 1e6, 2) AS peak_volume_m,
round(quantileDeterministic(0.5)(toFloat64(volume), toUInt64(toYYYYMMDD(date))) / 1e6, 2) AS median_volume_m,
round(toFloat64(max(volume)) / quantileDeterministic(0.5)(toFloat64(volume), toUInt64(toYYYYMMDD(date))), 1) AS peak_vs_median
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'RSP'
AND date >= toDate('2024-01-01')
AND date < today()
GROUP BY quarter
ORDER BY min(date)In 2026 Q3, the heaviest RSP session was Jul 8, 2026, at 13.65 million shares against a quarterly median of 6.44 million. That is 2.1 times a typical day. Read the peak_weekday column down the table: in most quarters the busiest session is a Friday, the rebalance date. Quarters containing a broad market shock carry their peak somewhere else instead, which is a useful reminder that a volume spike is evidence of trading, not proof of a rebalance.
Equal weighting is also the strictest form of capping in common use. Every position is capped at 0.2%, four times a year, by rule. Cap weighted indexes usually leave their biggest members uncapped and only intervene when a diversification requirement forces a special rebalance, which is the mechanism behind the reweightings in the Nasdaq 100 that how QQQ holdings are weighted walks through.
The size tilt and sector tilt that come with it
Equal weighting does not turn RSP into a small cap fund. Every holding is an S&P 500 member, so every holding is a large company by any ordinary standard. What changes is the average. The 400th largest member gets the same 0.2% as the largest one, so the portfolio's average company is far smaller than the cap weighted version's, and the fund behaves with a mid cap accent inside a large cap universe.
Sector weights follow headcount rather than market value. A sector with many medium sized members carries more weight under equal weighting than under cap weighting, and a sector built around a handful of giants carries less. Those splits move at each reset, and the sponsor's factsheet dates them.
Two practical knock-ons. The smaller half of the membership trades with wider spreads and thinner books, so the equal weight fund does more of its trading in the less liquid part of the list. Its distribution profile differs too, since dividend payers low in the cap ranking get the same 0.2% as the giants. Our S&P 500 dividend yield page shows how an index level yield is measured before you compare one fund's payout with another's.
When does equal weight beat cap weight?
Index both price paths to 100 at the start of a long window and the answer stops being theoretical.
| month | rsp_index | spy_index | rsp_per_spy | month_label |
|---|---|---|---|---|
| 2019-01 | 100 | 100 | 1 | Jan 2019 |
| 2019-02 | 103.7 | 103.2 | 1.004 | Feb 2019 |
| 2019-03 | 104.1 | 104.6 | 0.994 | Mar 2019 |
| 2019-04 | 107.8 | 108.9 | 0.99 | Apr 2019 |
| 2019-05 | 100.3 | 102 | 0.984 | May 2019 |
| 2019-06 | 107.4 | 108.5 | 0.989 | Jun 2019 |
| 2019-07 | 108.3 | 110.2 | 0.983 | Jul 2019 |
| 2019-08 | 104.8 | 108.3 | 0.967 | Aug 2019 |
| 2019-09 | 107.7 | 109.9 | 0.979 | Sep 2019 |
| 2019-10 | 109 | 112.4 | 0.97 | Oct 2019 |
| 2019-11 | 112.7 | 116.4 | 0.968 | Nov 2019 |
| 2019-12 | 115.3 | 119.2 | 0.967 | Dec 2019 |
| 2020-01 | 113.1 | 119.2 | 0.949 | Jan 2020 |
| 2020-02 | 103.1 | 109.8 | 0.939 | Feb 2020 |
| 2020-03 | 83.7 | 95.5 | 0.877 | Mar 2020 |
| 2020-04 | 95.8 | 107.6 | 0.89 | Apr 2020 |
| 2020-05 | 100.3 | 112.7 | 0.89 | May 2020 |
| 2020-06 | 101.4 | 114.2 | 0.887 | Jun 2020 |
| 2020-07 | 106.4 | 121 | 0.88 | Jul 2020 |
| 2020-08 | 111 | 129.4 | 0.858 | Aug 2020 |
The exact SQL behind every number
SELECT
formatDateTime(m, '%Y-%m') AS month,
round(100 * rsp_close / first_value(rsp_close) OVER (ORDER BY m), 1) AS rsp_index,
round(100 * spy_close / first_value(spy_close) OVER (ORDER BY m), 1) AS spy_index,
round((rsp_close / first_value(rsp_close) OVER (ORDER BY m))
/ (spy_close / first_value(spy_close) OVER (ORDER BY m)), 3) AS rsp_per_spy,
formatDateTime(m, '%b %Y') AS month_label
FROM
(
SELECT
toStartOfMonth(date) AS m,
argMaxIf(toFloat64(close), date, ticker = 'RSP') AS rsp_close,
argMaxIf(toFloat64(close), date, ticker = 'SPY') AS spy_close
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('RSP', 'SPY')
AND date >= toDate('2019-01-01')
AND date < toStartOfMonth(today())
GROUP BY m
)
ORDER BY mFrom a January 2019 base of 100, the price only path for RSP reached 218.6 by Aug 2026, against 284.2 for SPY. The rsp_per_spy column carries the ratio of the two paths and ends the window at 0.769. A reading under 1.00 marks a stretch where the cap weighted path sat ahead; a reading over 1.00 marks the reverse. These are unadjusted closes with distributions stripped out, so read the shape as construction rather than as total return.
Calendar years show the same thing with the swings intact.
| year | rsp_price_pct | spy_price_pct | rsp_minus_spy_pp |
|---|---|---|---|
| 2012 | 13.5 | 11.7 | 1.8 |
| 2013 | 30.4 | 26.4 | 4 |
| 2014 | 13.4 | 12.4 | 1 |
| 2015 | -4.2 | -0.8 | -3.5 |
| 2016 | 14.3 | 11.2 | 3.1 |
| 2017 | 15.7 | 18.5 | -2.8 |
| 2018 | -10.2 | -7 | -3.2 |
| 2019 | 26.5 | 28.7 | -2.1 |
| 2020 | 9.9 | 15.1 | -5.2 |
| 2021 | 29.5 | 28.8 | 0.7 |
| 2022 | -13.3 | -19.9 | 6.7 |
| 2023 | 11.8 | 24.8 | -13 |
| 2024 | 11 | 24 | -13 |
| 2025 | 9.6 | 16.6 | -7 |
| 2026 | 9.5 | 12.9 | -3.4 |
The exact SQL behind every number
SELECT
toString(toYear(date)) AS year,
round(100 * (argMaxIf(toFloat64(close), date, ticker = 'RSP')
/ argMinIf(toFloat64(close), date, ticker = 'RSP') - 1), 1) AS rsp_price_pct,
round(100 * (argMaxIf(toFloat64(close), date, ticker = 'SPY')
/ argMinIf(toFloat64(close), date, ticker = 'SPY') - 1), 1) AS spy_price_pct,
round(100 * (argMaxIf(toFloat64(close), date, ticker = 'RSP')
/ argMinIf(toFloat64(close), date, ticker = 'RSP')
- argMaxIf(toFloat64(close), date, ticker = 'SPY')
/ argMinIf(toFloat64(close), date, ticker = 'SPY')), 1) AS rsp_minus_spy_pp
FROM global_markets.stocks_daily_aggs
WHERE ticker IN ('RSP', 'SPY')
AND date >= toDate('2012-01-01')
AND date < today()
GROUP BY year
ORDER BY yearThe final row, 2026, reads 9.5% for RSP and 12.9% for SPY, a spread of -3.4 percentage points, and it covers the year to date rather than a full year. Positive readings in rsp_minus_spy_pp mark calendar years the flat weighted path ran ahead. Those years coincide with gains spreading across the membership. Negative readings coincide with a small group of the largest members setting the pace. Neither pattern predicts the next one.
Costs belong in the same column of the ledger. The equal weight fund's expense ratio has run above the cheapest cap weighted S&P 500 trackers, and its quarterly trades carry costs the cap weighted fund largely avoids. Both sponsors publish current fee figures on their fund pages, and fee drag compounds the same quiet way that the cash handling described in SPY dividend yield and UIT cash drag does.
Data notes and caveats
- The ten name basket is an illustration of the weighting arithmetic, not a top ten holdings list. Market values come from the latest daily snapshot in a 45 day window, one row per ticker.
- Both price series are unadjusted closes, so distributions are excluded from every percentage on this page.
- Calendar year changes are measured from the first session's close to the last session's close in each year, which makes the current year's row a partial year.
- The volume panel uses a deterministic median, so a regeneration of this page renders the identical figure.
FAQ
Is there an equal weighted SPY ETF?
No. SPY tracks the cap weighted S&P 500 and has no equal weighted share class. Equal weight exposure to the same 500 companies comes from a separate fund, RSP, run by a different sponsor.
What is the main difference between RSP and SPY?
Weighting, not membership. SPY sizes each holding by its float adjusted market value, so the largest companies dominate. RSP sets every holding back to 0.2% at each quarterly reset, which gives the 500th name the same slice as the first.
How often does the equal weight S&P 500 rebalance?
Four times a year, after the close on the third Friday of March, June, September and December. Weights drift with prices between those dates, so an equal weight fund is exactly equal weighted only on the reset date.
Does equal weighting remove concentration risk?
It removes single name concentration at each reset, since no holding starts a quarter above 0.2%. It leaves broad market risk untouched and adds a tilt toward the index's smaller members, which trade with wider spreads.
Is RSP a mid cap fund?
No. Every holding is an S&P 500 member. Equal weighting raises the share of the portfolio sitting in the index's smaller members, so the fund behaves with a mid cap accent while staying inside a large cap universe.
Every panel above ships with its SQL underneath. To run the same weighting arithmetic on a different basket, or check which Friday a fund's volume actually spiked, ask the question in plain English on the Strasmore terminal.