BorderFolio/Methodology/True return
True return: contributions vs market growth
Last reviewed 31 August 2026
A portfolio that grew from $40,000 to $60,000 tells you nothing on its own — the $20,000 could be entirely your own deposits. BorderFolio answers the question directly: how much of the portfolio you put in, and how much the market added. This page states the formula, the inputs, the assumptions and the limits, so the numbers can be checked rather than believed.
The formula
For any period — a month, a year, the whole history — the portfolio's value is the sum of the things that produced it:
value at start + net contributions + market gains + income received − fees paid − tax withheld at source = value at end
Every term is measured independently. Contributions are recorded purchases with a date, quantity, price and commission. Income is the dividends and interest actually credited. Fees and withholding are the amounts actually taken, read from your statements — historical sums, not the forward-looking annual estimates shown in the cross-border analysis. Market gains come from revaluing the positions held over the period, price by price.
Market gains are deliberately not calculated as "whatever is left over once everything else is removed". A residual absorbs every gap in the data silently and can never disagree with the total, so it cannot be checked. Because each term here is measured on its own, the two sides of the identity can disagree — and that makes the identity a test. BorderFolio asserts it before the figures are sent, and if the parts do not add up to the portfolio value, the breakdown is withheld rather than displayed with the difference hidden somewhere.
The same decomposition is available since inception, year to date, one year, or over a range you choose. Over a period that starts mid-history, the first term is the portfolio's value at that starting point; since inception it is zero.
Monthly snapshots apply the identity per calendar month, so each month keeps its own components — contributed, market growth and income — rather than collapsing into a single lifetime figure that hides when the growth actually happened.
The total investment gain quoted on the Performance page is the same arithmetic without your own money in it: market gains + income − fees − withholding. It is split further into the part locked in by positions you have closed and the part that is still only a valuation of positions you hold.
What counts as a contribution
- The cash cost of a purchase, including the commission stated on that trade line.
- Purchases imported from a statement, dated to the trade date — not to the day you uploaded the file.
- Purchases entered manually.
Not counted as a contribution: reinvested dividends (they are income the portfolio produced, not new money you added), transfers of existing holdings between your own accounts, and price movement of any kind.
Assumptions
- Valuation. Covered instruments are valued at market quotes; instruments without coverage use the values you maintain. Month-end values are the reference points.
- One base currency. Figures are expressed in the portfolio's base currency. Amounts in another currency are converted at the rate on the date of the transaction, not at today's rate; only the present value of what you still hold uses the current rate. A deposit therefore keeps the size it had when you made it, and the currency move between then and now shows up as market movement rather than quietly resizing your contribution history.
- Trade-date accounting. A contribution belongs to the month of the trade, not the settlement or import date.
- Costs are historical. Fees and withholding count what was already charged over the period. The forward annual estimates on the cross-border pages are a different question and are never mixed into this one.
- Completeness. The attribution is only as complete as the transactions on record. A position your statement carried but the import could not resolve is named on the page as not imported, with the caveat attached to the total, rather than left to be discovered.
Limitations
- The decomposition is not a time-weighted return. It answers "how much of this is mine", not "how well timed was it", and it is not comparable to a fund's published performance or to an index return.
- Annualised returns need a complete ledger. Personal return (XIRR) and portfolio return (TWR) are computed on the Performance page, but both need every flow and enough valuations around it. Where that does not exist for your portfolio, those figures are shown as unavailable with the reason named — a short history, too few valuations, or flows that predate the first known valuation. An approximate number in their place would look exactly like a real one.
- Costs inside a fund are invisible. Expense ratios and FX spreads never appear on a statement; they are absorbed into market movement rather than estimated. Fund expense ratios are used in the cross-border comparison, where they are sourced and dated, not in this historical breakdown.
- Unreviewed imports show nothing. Until the transactions from an import are confirmed, the deposits in them would be read as market movement — so the breakdown is not rendered at all until the review is finished.
- Sales return capital. A sale reduces holdings and adds cash; it is not negative contribution, and a portfolio that is being drawn down needs to be read with that in mind.
- Backfilled months are reconstructions. Months rebuilt from an imported statement use the transactions and dividend history in that statement; they are as accurate as the document, not more.
- Manual holdings drift. An instrument you value by hand is only as current as the last value you set.
Sources
- Your own broker statements and manual entries — the only source of contribution data.
- Market data providers for quotes on covered instruments.
- No third-party performance database is used, and no return assumption enters a historical figure. Forward-looking numbers, where shown, are labelled as projections and use the expected return of your current allocation rather than a hardcoded rate.