What is the difference between XIRR and CAGR?
CAGR, the compound annual growth rate, needs three things: a starting value, an ending value and the years in between. ₹1 lakh that becomes ₹2 lakh in five years grew at 14.9% a year. The formula assumes the money sat still the whole time, so it fits an FD, a single lump-sum purchase, a fund's NAV or an index level.
XIRR, the extended internal rate of return, is built for money that moves. You give it every amount you put in and took out, with the date of each, and it finds the one yearly rate that makes them add up. It weighs each rupee by how long it was invested, which makes it the measure of what your money earned. What XIRR means for a stock investor covers how to read it.
Here is the mistake most investors make. They work out their portfolio's CAGR the way you would for an FD: the total they put in, today's value, and the years since their first buy. Say you invested ₹1 lakh five years ago and another ₹9 lakh a year ago, and the portfolio is worth ₹12 lakh today. The sum treats all ₹10 lakh as if it had been invested for five years, so it says you made 3.7% a year. But ₹9 lakh of it has only been invested for one year. Your XIRR, which counts that, is 12.9% a year.
A mutual fund's CAGR is worked out differently. It tracks the value of one unit of the fund, so money coming in or going out doesn't change it. The same measure for your own portfolio is called TWRR, the time-weighted return.
Three returns for one portfolio
| Return | What it measures | Does adding or taking out money change it? | Where you see it | Use it for |
|---|---|---|---|---|
| XIRR | What your money made, each rupee for the days it was invested | Yes | Broker consoles, the XIRR function in Excel, the free calculator | What the portfolio did for your money |
| CAGR, start value to end value | How one amount grew with nothing added or taken out | The formula has nowhere to put new money, so it breaks | FDs, a fund's NAV history, index returns | A lump sum left alone, or an index |
| TWRR | What the holdings made, period by period, whatever amount sat in them | No | Fund factsheets (as the fund's CAGR), the free calculator | Judging stock selection, and setting your picks beside the Nifty |
When no money moves, all three give the same answer. They split apart the moment you add money, sell or receive a dividend, which in a portfolio of your own stocks happens most months.
One portfolio, three answers: a worked example
You start with ₹1 lakh, and in the first year it doubles to ₹2 lakh. Pleased, you add ₹9 lakh at the start of the second year, so the portfolio holds ₹11 lakh. In the second year the portfolio falls 25%, to ₹8.25 lakh.
| Return | Result | Why |
|---|---|---|
| TWRR | +22.5% a year | The stocks doubled, then lost a quarter: 2 × 0.75 = 1.5 over two years |
| XIRR | −16.1% a year | Nine-tenths of the money arrived right before the fall |
| "CAGR" from ₹10 lakh to ₹8.25 lakh | −9.2% a year | Treats the ₹9 lakh as if it had been invested from day one |
The TWRR says the picks were good. The XIRR says the money had a bad two years. The third number is the one most people work out, and it answers neither question: it charges the ₹9 lakh for a year in which it wasn't invested.
Now flip the order. Put ₹9 lakh in on day one and the other ₹1 lakh at the start of year two. The stocks do exactly the same thing, so the TWRR is still 22.5%. You end with ₹14.25 lakh, and your XIRR is +20.4%.
Nothing about the stock picking changed between the two versions. Only the timing and size of the money did, and that moved the XIRR by more than 36 points.
The gap between them is the behaviour gap
Subtract XIRR from TWRR and you get the behaviour gap, in points a year. When TWRR is higher, your stocks did better than your money, and the difference is a behavioural tax paid on your own timing and sizing. When XIRR is higher, your money arrived at good moments and the timing added to what the stocks earned.
The tax is made of trades you can name. Adding after a run-up puts your largest amount in at the highest price, and it is the buy that the four questions before you size a position are meant to slow down. Booking part of a winner early, or selling on a fall the thesis didn't call for, takes money out before what you still hold has its better stretch. Profit booking and writing exit conditions before you buy deal with those two. Sell a whole position and its later run is in neither number, so that cost never shows up here at all.
Your XIRR carries all of this mixed in with the stock picking. Only the TWRR beside it pulls the two apart.
My own gap: under a point overall, five points in a bad year
I ran my 11 Zerodha tradebooks, 18 November 2021 to 15 October 2026, through the free calculator. Over those 4.9 years my XIRR was 10.32% a year and my TWRR 11.16%. My stocks did a little better than my money, a behaviour drag of 0.84 points a year, small enough to pass for a rounding error until I split it by financial year.
| Financial year | XIRR (my money) | TWRR (my stocks) | Gap |
|---|---|---|---|
| FY22, from 18 Nov 2021 | +8.3% | −1.1% | 9.4 points boost |
| FY23 | −4.3% | −5.0% | 0.7 points boost |
| FY24 | +49.6% | +52.9% | 3.3 points drag |
| FY25 | −7.6% | −2.2% | 5.4 points drag |
| FY26 | +3.8% | +3.3% | 0.5 points boost |
| FY27 so far, to 15 Oct 2026 | +18.1% | +15.7% | 2.4 points boost |
FY22 and FY27 are part-years, so those rows show the plain return over the stretch, not a yearly rate.
In the year my stocks made 52.9%, my money made 49.6%. In the year they fell 2.2%, my money fell 7.6%. Timing added to the return in four years out of six, though two of those were under a point, and it still cost me 0.84 points a year overall. The yearly gaps don't add up to the total, because the whole-window XIRR weighs each stretch by the money that was in it.
The single number hid two years, FY24 and FY25, in which my timing cost me three and five points. Those are the years to go back to, trade by trade: what I added and when, what I sold and why.
Which return should you compare with the Nifty?
Compare your TWRR with the Nifty 50 TRI over the same dates. Both are time-weighted and both count dividends, so the comparison is a fair test of your stock selection. Over my window it puts my picks 4.52 points a year ahead.
Your XIRR also carries the timing of your money, so against the index it is a rough read at best. And the Nifty 50 figure on most screens is the price index, which leaves dividends out. Nifty 50 vs Nifty 50 TRI works through both with my own numbers.
When the difference doesn't matter
If you invested once and left it, the three numbers agree, as the table shows, and any of them will do.
Under a year, annualised numbers mislead in both directions, which is why the calculator shows the plain return for any stretch shorter than a year. What XIRR means works through the arithmetic.
A gap of a point or two in a single year is noise. The behaviour gap is worth acting on when it points the same way for several years, or when one year's gap is large enough to trace to specific trades.