In short. If money was deposited or withdrawn, «it was $10,000, now it is $15,200» is not a return: part of the growth is your own deposits. There are two honest ways. TWR (time-weighted return) removes the effect of deposits and shows the quality of the investments themselves. XIRR (money-weighted return, MWR) accounts for when and how much you deposited and shows what happened to your money.
Why «start vs end» misleads
A one-year example. On January 1 the account holds $10,000. By July 1 the portfolio grew to $11,000 and you added $5,000 — now $16,000. The market fell in the second half, and on December 31 the account holds $15,200.
- «Start vs end»: (15,200 − 10,000) / 10,000 = +52% — wrong, $5,000 of the growth is a deposit.
- Net profit: 15,200 − 10,000 − 5,000 = +$200.
- Profit over total contributions: 200 / 15,000 ≈ 1.33% — closer, but it ignores that the $5,000 worked for only half a year.
TWR — time-weighted return
The period is cut into sub-periods at every deposit and withdrawal. Each sub-period return is calculated without the cash flow, and then the returns are chained:
TWR = (1 + r₁) × (1 + r₂) × … × (1 + rₙ) − 1, where rᵢ = value at the end of the sub-period / value at its start − 1
In the example: first half 11,000 / 10,000 = 1.10; second half 15,200 / 16,000 = 0.95 (the start of the second sub-period already includes the deposit). TWR = 1.10 × 0.95 − 1 = +4.5%. The deposit does not affect the result: the investments would have performed the same with any amount in the account.
Use TWR to judge a strategy or a manager and compare them with an index or another portfolio: the decision when to add money is not the strategy's, so it is unfair to include it. There is one requirement — the portfolio value must be known at each deposit or withdrawal.
XIRR — money-weighted return
XIRR is the annual rate r at which all your contributions, grown at that rate to the end of the period, add up to the final value. For the example:
10,000 × (1 + r)¹ + 5,000 × (1 + r)^0.5 = 15,200
The first contribution worked for a year, the second for half a year. The equation is solved iteratively (the XIRR function in Excel and Google Sheets), the answer is r ≈ +1.6% per year. A quick approximation is the Dietz method: profit divided by time-weighted capital, 200 / (10,000 + 5,000 × 0.5) = 1.6%.
XIRR is below TWR because the larger amount was invested during the weak half. The opposite case: the same $10,000 fell to $9,000 by July, you bought $5,000 more (now $14,000), and by year end the portfolio grew to $15,400. TWR = 0.90 × 1.10 − 1 = −1%, while XIRR ≈ +3.2%: the strategy lost slightly over the year, but your money made a profit thanks to buying the dip. To run your own dates and amounts — any number of deposits and withdrawals — use the TWR and XIRR return calculator.
Which return to look at
| Question | Metric |
|---|---|
| Does the strategy or manager perform well? | TWR |
| How does the strategy compare with an index or another portfolio? | TWR |
| How much did my money earn, given when I contributed it? | XIRR |
| Did my decisions to add and withdraw help or hurt? | XIRR minus TWR |
Common mistakes
- Counting a deposit as return. Any growth after a contribution must be separated from the contribution itself — otherwise the return is overstated.
- Annualizing a very short period. +3% in two weeks annualizes to more than 100% — that is compounding arithmetic, not a forecast.
- Ignoring dividends and fees. Payouts left in the account are income, not deposits; fees reduce the result.
- Comparing one investor's XIRR with another's TWR. They answer different questions — compare like with like.
How Davinchu calculates it
In «Investments», the «Overview» tab shows both metrics — «TWR return» and «XIRR / MWR». The portfolio records its value every hour, and TWR is calculated from these snapshots: a deposit, a purchase with new money or an imported position is a cash flow, not income. XIRR appears once the portfolio has at least 30 days of history. Next to them are Max Drawdown from the peak of the TWR index, annual volatility and Sharpe / Sortino from daily returns (with the risk-free rate from the portfolio settings, 4% by default). The «Analytics» tab adds a benchmark comparison (BTC, ETH or 60/40 BTC-ETH) and monthly returns, and the «Investor report» PDF shows both returns with a note on the method. Deposits and withdrawals from Interactive Brokers and T-Bank are loaded automatically. The «Investments» section is on every plan.
More in «Tracking stocks from Interactive Brokers and T-Bank» and on the «Davinchu for investors» page. Risk metrics are covered in «Sharpe ratio, Z-score, AHPR and GHPR».