How to compare your portfolio to the S&P 500
- List every deposit and withdrawal with its date. Use money that moved between your bank and the account — not trades inside it. A lump sum is one row.
- Enter today’s value from your brokerage statement or app.
- Add the benchmark. The exact way: look up the benchmark’s total-return level on each of your dates and on the as-of date, and enter them. The quick way: type in its annualized total return from your first date to today.
- Read the gap. Positive means your money compounded faster than the same money in the benchmark; negative means slower. Under a year, both returns are shown as plain cumulative percentages, never annualized.
How the return is defined — the day count, what happens under one year, and when no number is shown — is set out on how Tradune calculates your real return. This calculator uses the same solver and day count as the app.
Why your money-weighted return (XIRR) is the right number
There are two honest ways to measure a portfolio’s return, and they answer different questions:
- Money-weighted return (MWRR / XIRR) — the single annual rate that makes all your deposits and withdrawals, on the dates they happened, add up to today’s value. It reflects your actual experience, including whether you added money at good or bad times. This is the number that answers “how did I do?”
- Time-weighted return (TWR) — strips out the effect of your deposit timing, so it measures the strategy or fund, not your cash-flow decisions. It’s what a fund quotes, and it’s the fair way to compare against a benchmark that had no deposits.
“Am I beating the market?” is really a money-weighted question — and a fair answer feeds the same cash flows, on the same dates, into the benchmark. That is what the levels option above does with the figures you enter. The Tradune app does it for you against a buy-and-hold SPY twin on your real holdings.
0 = Σ cashflowᵢ ÷ (1 + XIRR)^(daysᵢ/365)
Some cash-flow patterns have no rate that solves this, and patterns that switch between money in and money out more than once can have several. In both cases the calculator shows no rate and says why, rather than printing one that could be wrong.
Check it yourself in Google Sheets with =XIRR
Google Sheets has the same function. Put dates in column A and amounts in column B — money you put in as a negative number, money you took out and today’s value as positive numbers:
| Row | A (date) | B (amount) |
|---|---|---|
| 2 | 2023-01-01 | -1000 |
| 3 | 2024-01-01 | -1000 |
| 4 | 2024-12-31 | 2400 |
In any empty cell, =XIRR(B2:B4, A2:A4) returns 12.79% (format the cell as a percentage). Enter the same two deposits and the same final value with that as-of date in the calculator above, and it shows the same annual rate rounded to one decimal, 12.8%. Sheets also uses a 365-day year counted from the first date.
Choosing a fair benchmark
- Match what you actually hold. A portfolio of large US stocks is fairly measured against a broad US large-cap index; a mix of stocks and bonds against a blend in the same proportions. Comparing a bond-heavy portfolio to an all-stock index tells you about the asset mix, not your choices.
- Use total return, not price. Your account value includes the dividends you kept. A price-only index leaves them out, so it makes almost any portfolio look better than it did.
- Choose it before you look at the result. Trying several benchmarks and keeping the one you beat answers a different question.
- Use the same dates and the same cash flows. The levels option does this exactly. A single annual figure from your first date is an approximation whenever you added or took out money along the way.
- Stay in one currency. A US-dollar portfolio against a US-dollar series.
Beat the S&P 500? FAQ
How do I compare my portfolio to the S&P 500?
Put your returns on the same footing. Enter every deposit and withdrawal with its date and your portfolio’s value today; the calculator turns that into your money-weighted return (XIRR). Then either type in the index’s annualized total return over the same period, or — the exact way — enter the index’s total-return level on each of your dates, and the calculator puts the same cash flows into the index and compares the two.
Did I beat the S&P 500 if my total gain is bigger than the index’s?
Not necessarily. A total gain mixes your return with how much you added and when. Money you deposited last month has had no time to earn anything, so comparing your cumulative percentage to the index’s cumulative percentage over several years is usually misleading. Compare money-weighted returns on the same cash flows instead — that is what this page does.
Can I enter withdrawals?
Yes. Mark a row as a withdrawal and enter the amount you took out. If your cash flows change direction more than once, more than one rate can fit them; the calculator then says the rate is not unique instead of picking one.
Why does this page use XIRR?
XIRR (money-weighted return) is the single annual rate that turns your dated deposits and withdrawals into today’s value. It accounts for the timing of your own cash, so it answers “how did my money do?” — the right question when you are asking whether you beat the market.
Why doesn’t the calculator fill in the S&P 500 for me?
Index price history is licensed market data, and this public page does not publish it. You type the benchmark figures in yourself, from a source you trust. The Tradune app runs the same comparison on your real holdings — your same cash flows, on the same dates, into a buy-and-hold SPY twin.
Are my numbers sent anywhere?
No. The calculation runs entirely in your browser; your amounts, values and benchmark figures are not transmitted, stored, or put in the URL.