BorderFolio/Blog/Portfolio performance

How to track portfolio performance: XIRR, TWR and the metrics that matter

30 August 2026 · Steffan Kharmaaiarvi · 12 min read

The portfolio in the screenshots below is worth $47,536. Its owner deposited $41,315 of that. So how did they actually do? Every performance metric in this article is an attempt to answer some version of that question, and the reason there are several of them is that "how did I do" is really four different questions wearing one coat.

What this covers

  1. Step one: take your own money out
  2. Total investment gain, and the two slices inside it
  3. Personal return (XIRR): what your money earned
  4. Portfolio return (TWR): what the strategy earned
  5. A worked example: +35% and −9.7% in the same year
  6. The costs most trackers never subtract
  7. Your tax residence is a performance metric
  8. A monthly checklist
  9. FAQ

1. Step one: take your own money out

Before any percentage is worth calculating, the balance has to be split into the things that produced it. A portfolio grows for five separate reasons, and only four of them are performance:

Written as an identity, for any period:

value at start + contributions + market gains + income − fees − withholding = value at end

This is worth insisting on for a reason that sounds pedantic and isn't: if "market gains" is computed as whatever is left over once everything else is subtracted, the identity can never fail — and a number that can never fail is a number you cannot check. Every missing transaction, every unimported position, every rounding error silently becomes "market growth". Measure each term separately and the two sides of the equation are allowed to disagree, which is exactly what makes them worth trusting when they don't.

BorderFolio Performance page: the waterfall from net contributions, market gains, dividends, broker fees and withholding to the current portfolio value, with a bar splitting the balance into contributions and investment gain
The decomposition on BorderFolio’s Performance page, since inception. The balance is $47,536 and $41,315 of it was deposits. If the column does not sum to the portfolio value, the page shows nothing rather than a breakdown with the difference hidden inside one of the rows. Demo portfolio, sample figures.
Portfolio growth chart: cumulative contributions as a straight line and portfolio value above it, the gap between them being the investment gain
The same split over time. The lower line is money deposited, the upper one is what the portfolio was worth, and the band between them is everything the investments added — $6,221 today. Points are plotted only where a real valuation exists; the gaps are not interpolated. Demo portfolio, sample figures.

The interesting number here is not $47,536 and not even $6,221. It is the ratio the bar underneath states: 86.9% of this portfolio is money its owner deposited, and 13.1% is what the investments added on top. That is a completely legitimate way to get richer — it is what a savings rate looks like in the first years of a portfolio — and it is exactly the ratio a tracker that shows only a balance line lets you mistake for skill.

2. Total investment gain, and the two slices inside it

Once your deposits are out of the picture, everything the investments actually did is:

total investment gain = market gains + income − fees − withholding

Two other figures cut the same total a different way, and they are frequently confused with additional money:

Unrealized and realized are two slices of market movement, not extra layers on top of it. Income and costs make up the rest of the total. If a tracker shows all four and they appear to sum to more than the total, it is presenting slices as additions.

In the screenshot below the realized row reads $0 · no positions closed yet, which is the honest answer for a portfolio that has only ever bought — and a different statement from "we could not work it out". A metric that cannot be computed and a metric that computes to zero must not look the same on screen.

Return metrics on the Performance page: total investment gain, unrealized gain, realized gain, personal return (XIRR) 12.5% a year and portfolio return (TWR) 13.1% a year
The same period read five ways. Personal return and portfolio return are the two annualised figures the rest of this article is about — here they land 0.6 points apart, which is what a steady monthly contribution schedule looks like. Demo portfolio, sample figures.

3. Personal return (XIRR): what your money earned

XIRR — extended internal rate of return, also called the money-weighted or personal return — is the single annualised rate that, applied to every deposit from the day it landed, produces exactly the value you hold today.

The mechanics: each cash flow is a dated amount (deposits negative, withdrawals and the final value positive), and XIRR is the rate r that solves

Σ Cᵢ / (1 + r)^(dᵢ / 365) = 0

where dᵢ is the number of days from the first flow. There is no closed-form solution; every implementation, including the =XIRR(values, dates) function in Excel and Google Sheets, finds it by iteration.

What matters in practice is the consequence of that date weighting: money that was invested longer counts for more. A $500 deposit in January and a $500 deposit in December are not equal contributors to this year's outcome, and XIRR is the only common metric that admits it. If you are a regular contributor — the entire premise of index investing and of FIRE — this is the number that describes your actual experience.

XIRR and CAGR are the same thing when there is only one deposit. CAGR assumes a single lump sum, untouched. The moment you add a second contribution, CAGR has no defined answer and XIRR does.

What XIRR cannot do is tell you whether your choices were good. It rewards having had a lot of money invested during a rising market, which is partly luck of timing, and it punishes the opposite. That is a feature when you are asking "how am I doing", and a bug when you are asking "was this fund worth holding".

4. Portfolio return (TWR): what the strategy earned

TWR — time-weighted return — answers the other question. It cuts the period at every cash flow, computes the return of each sub-period on its own, and chains them together:

TWR = (1 + r₁) × (1 + r₂) × … × (1 + rₙ) − 1

Because each sub-period return is a pure percentage, the size of the deposits cancels out entirely. A $10 portfolio and a $10 million portfolio holding the same thing get the same TWR. This is why every fund and index publishes a time-weighted number: it is the only way to compare two strategies without the comparison being contaminated by who happened to deposit more.

TWR is also the more demanding number to compute honestly. It needs a valuation of the portfolio on the date of every flow. Where an exact valuation is missing, the standard workaround is a Modified Dietz weighting of the flow inside the sub-period — a good approximation, but an approximation, and one that should be labelled as such rather than blended silently into a headline figure.

5. A worked example: +35% and −9.7% in the same year

The clearest way to see that these are different questions is a year where the two answers point in opposite directions.

DateEventPortfolio value
1 JanDeposit $1,000$1,000
1 JulHoldings have risen 50%$1,500
1 JulDeposit $9,000 — the plan is working$10,500
31 DecHoldings fall 10%$9,450

Time-weighted return. Two sub-periods: +50% and −10%. Chained: 1.50 × 0.90 − 1 = +35%. The strategy had an excellent year.

Money-weighted return. Flows of −$1,000 on 1 Jan, −$9,000 on 1 Jul, +$9,450 on 31 Dec solve to an XIRR of about −9.7%. You put in $10,000 and ended with $9,450.

Both numbers are correct. The strategy returned +35%; the investor lost $550, because 90% of the money only showed up for the bad half. Any tracker that reports one of these and calls it "your return" is answering a question you did not necessarily ask.

 Personal return (XIRR)Portfolio return (TWR)
AnswersWhat did my money earn?How did the strategy do?
Affected by deposit timingYes — that is the pointNo — cancelled out by design
Comparable to an indexNoYes
Needs valuations at every flowNoYes
Use it whenJudging your own progress and savings planJudging a fund, an allocation or a manager

Track both. When they diverge sharply, the gap itself is the finding: it means the timing of your contributions, not the holdings, dominated your year.

6. The costs most trackers never subtract

Three drains rarely appear on a performance screen, because none of them show up as a transaction you can see.

Dividend tax withheld at source. It is deducted before the money reaches your account, so a return computed on gross dividends counts money you never received. For a non-US investor in a US-domiciled fund the statutory rate is 30%; a tax treaty commonly reduces it to 15%, and only if the broker holds a valid W-8BEN for you.

The fund's expense ratio. It is charged against the whole position, every year, and never appears on a statement line — it is simply absorbed into the price. On a low-yield fund it can easily exceed the withholding.

Exchange rates on the wrong date. If a tracker converts a EUR deposit from three years ago at today's rate, your contribution history quietly resizes itself every time the currency moves. Flows belong at the rate on the day of the trade; only what you hold today belongs at today's rate.

The second and third only matter when you compare alternatives — which is exactly what people do with fund domicile:

By-fund table: for each holding the expense ratio, annual dividends, withholding at 30 percent, the net effect of switching to the Irish-domiciled analog, and that analog's own expense ratio
Both sides of the switch, per holding. VOO→VUAA nets +$32 a year; QQQ→CNDX nets −$7 — barely any dividends to save on, and the Irish fund’s higher expense ratio is charged on the whole position. Counting only the tax saving would have made every row look free. Demo portfolio, sample figures.

7. Your tax residence is a performance metric

This is the part that has no equivalent in a domestic tracker. Two people can hold the identical fund, in the identical amount, on the identical dates, and keep different amounts of the dividend — because withholding is decided by the fund's country and the investor's country together.

The demo portfolio above throws off $571 of gross dividends a year, all of it from US-domiciled funds. Here is the first step alone — what the United States takes before any home-country tax exists:

Tax residenceUS treaty statusWithheld at sourceReaches you
United Arab EmiratesNo US tax treaty30% · $171$400
PortugalTreaty rate on portfolio dividends15% · $86$485
GermanyTreaty rate on portfolio dividends15% · $86$485

That is $85 a year of difference on an identical portfolio, before anyone has picked a single stock — and it recurs every year, compounding against you. On a portfolio ten times the size it is $850. The treaty rate is not automatic either: it applies only where the broker holds valid documentation for you.

Then comes the second step, at home, and it is genuinely different everywhere: some residences tax the dividend again at a flat rate, some at a marginal rate, some credit the tax already withheld, and some — the UAE among them — add nothing at all. A zero-income-tax residence does not make the first step disappear, which surprises a great many people who move specifically for the tax.

There is a third country effect that almost nobody is told about: US estate tax on US-situs assets. A non-resident holding more than $60,000 of US-domiciled securities can face estate tax of up to 40% on the excess — how much, if any, depends on treaty relief, available deductions and the circumstances of the estate. The threshold itself has nothing to do with income tax, and a long-term index investor crosses it quietly, in an ordinary year, without any event marking it.

Dividend tax drag for a UAE resident: $171 a year withheld at source on $571 of dividends at the US 30 percent rate, nothing taxed at home, $400 kept
The same portfolio, read through one tax residence. Both steps are always computed and the second is shown at $0 rather than hidden — otherwise you cannot tell whether it was calculated at all. Method and sources: cross-border dividend withholding methodology. Demo portfolio, sample figures.

8. A monthly checklist

Once a month, after the statement lands, is enough. Daily checking measures your anxiety, not your portfolio.

Most of this is arithmetic you can run in a spreadsheet, and for a single-currency, single-broker portfolio a spreadsheet is genuinely fine. It stops being fine at the point where statements arrive in three formats, dividends arrive net of a withholding rate you have to look up per fund, and half the flows are in a currency that needs the rate from the trade date rather than today's.

That is the point BorderFolio was built for: import the statements, keep the contribution history immutable, and let the performance breakdown, the cross-border layer and the monthly snapshots come out of the same set of confirmed transactions rather than three tools that disagree.

FAQ

What is a good XIRR?

There is no universal answer, and anyone quoting one is selling something. The only honest comparison is against the time-weighted return of a portfolio you could have held instead — that is precisely why both numbers exist. What a personal return can tell you on its own is whether your contributions are doing the heavy lifting, which in the first years of a portfolio they almost always are.

Why doesn't my tracker's return match my broker's?

Usually one of four reasons: the broker counts deposits as growth; the broker reports gross dividends before withholding; the two use different start dates; or foreign-currency flows are being converted at different rates. The fourth is the sneakiest, because it makes last year's numbers change quietly this year.

Can I just calculate this in a spreadsheet?

Yes — =XIRR(values, dates) is built into both Excel and Google Sheets, deposits negative, current value positive. Time-weighted return is harder, because it needs the portfolio's value on the date of every flow, which is the piece a spreadsheet cannot reconstruct after the fact.

Do I need to track withholding if my country taxes foreign dividends anyway?

Yes, and separately. The tax withheld abroad and the tax due at home are two different steps with different rules, and in many residences the first can be credited against the second — but only up to the treaty rate. Anything withheld above it is usually not recoverable at all without filing in the source country.

Where can I see these metrics on my own portfolio?

BorderFolio's Performance page shows the full decomposition, total gain, and the realized/unrealized split for any period; the cross-border layer resolves withholding per fund from domicile and your configured residence. The free tier covers one portfolio with up to ten holdings and three statement imports a month.

Informational and educational content only. Nothing here is investment, tax or legal advice, and no figure in this article is a recommendation to buy, sell or hold any security. Sample values are illustrative. See the investment & tax disclaimer.

True return methodologyThe formula that separates deposits from market movement — inputs, assumptions and the limits of the method. Withholding methodologyHow the per-instrument rate is resolved from fund domicile and tax residence, and what the estimate cannot see. Contribution trackerHow the contribution record is built, and what pace, streak and gaps actually measure. FAQShort answers on imports, formats, credentials, coverage and data.
See these numbers on your portfolio Free forever tier · no broker credentials · statements in, history out.