Return percentages differ across platforms far more often than balances do, and usually for a methodology reason rather than a data error. This article covers a return that disagrees with your broker or another tracker, a period return that reads oddly, and the numbers that really are broken - a chart spike, -100%, 0%, NaN. If a value rather than a percentage is off, see Balances and cash don't match; if you suspect the price or the symbol behind it, see Prices, symbols and market data.
Why don't my returns match my broker or another tracker?
A return that disagrees with another platform is almost always a methodology difference rather than a data error. Check share counts first - they should match your broker exactly, and when they do your data is right and the gap is one of the causes here. The first four are settings, so you can reproduce your broker's basis yourself.
- A different method. Capitally defaults to MWR (IRR); your broker may show ROI, TWR, or something proprietary. Switch method in settings to compare like for like - see Calculating returns.
- Annualization. Tools built on spreadsheet XIRR always annualize. Capitally shows the return
Over periodunless you set annualization toAutoorAnnualizedinReturns options. - Currency. Capitally reports in your project currency, the broker usually in the asset's own currency.
- What is included. Capitally shows realized plus unrealized profit and includes dividends and fees by default. Brokers frequently leave components out.
- Price sources and exchange timing. Different closing prices and different FX sources produce small, expected gaps - see Prices, symbols and market data.
- TWR methodology. Capitally computes TWR strictly on closing prices, ignoring purchase and sale prices in line with TWR principles. Other tools fold purchase prices in.
- Missing transactions. Several brokers cap export history - Interactive Brokers at one year - and missing rows change returns. Import problems covers how to find them.
- Period boundaries. A partial-period lot in the transaction view shows the return for that lot alone, not for the whole position. Check the summary at the top and set the period to
Max.
What matters for monitoring is the trend and the order of magnitude. As long as quantities and dates match for tax purposes, small differences in return percentages across platforms are expected. If share counts don't match, that is a data problem rather than a methodology one - start with How to verify your data.
Why isn't my return profit divided by the money I put in?
IRR weights the timing and size of every cash flow, so a portfolio worth 43M with 9.2M of returns does not have an IRR of 43 / (43 - 9.2) - 1 = 27%; money invested early and left to compound lifts the rate above that arithmetic.
The reference point IRR measures from also explains why MWR, TWR and ROI differ even with no deposits or withdrawals: MWR and TWR use the day's closing price as the day-one reference, not your fill price, so buying intraday away from the close shows an immediate unrealized gain or loss by design. Start the chart one day after the transaction to line it up with your purchase price.
Why doesn't my YTD or 1Y return start from when I bought?
Returns are measured from the start of the selected period, never from when you opened the position. For YTD that is Return = Current Value - Jan 1st Value and rate = Current Price / Jan 1st Price - 1, substituting the opening value for positions started after 1 January; 1M, 3M and 1Y follow the same rule.
Deposits and withdrawals do not move returns (ROI aside), and cash generates none because its valuation is fixed apart from FX - a cash-only account reads 0 and 0%. Combining positions switches the rate to MWR (XIRR) so different amounts and timings are weighted correctly. Capitally's YTD also measures from the 31 December close where Google Finance measures from the first trading day's close, so a gain on 2 January is inside Capitally's figure and outside Google's.
How to find the position behind a wrong number
Spikes, -100%, 0% and NaN each have a specific, checkable cause. The method is the same in every case: narrow the chart period around the event, compare individual asset returns to find the single position responsible, then check that position's transactions and its price source. Each section below covers one of those causes.
An unexplained spike or drop in the portfolio chart
Four causes, in the order worth checking: an incorrect or missing transaction, stale price data, a transient FX-rate anomaly, or an unrecorded split. Start with the transactions - a missing sell, a duplicated buy, a wrong quantity - on the Positions and Transactions tabs for that period.
If the transactions are right, the prices behind them usually are the problem. Settings → Analysis → Reset data and prices cache forces a full re-download. A transient FX-rate anomaly on a foreign-currency asset normally clears within a day. An unrecorded split or reverse split makes historical prices look wrong, and is fixed on the asset rather than on the chart - see Prices, symbols and market data.
The rate of return chart shows -100%
Almost always a stock transfer entered as a Buy with price 0, which tells Capitally the asset cost nothing while its market value is not zero. Change the transaction type to Transfer and either leave the price empty or set it to the real cost basis - for employee stock plans, the fair market value at the time you received the shares.
A custom asset shows 0% return
A property, venture or other custom asset shows 0% when its Buy transaction was edited to today's value instead of being left at the purchase price: Capitally derives the return by comparing the current market price entry against the price on the Buy, so when both are identical the return really is zero.
Keep the Buy at the original purchase price and record the current value as a separate, dated price entry - add a row for today in the asset's Prices tab, or double-click the position in the Positions tab and update the Market Price (check the date selector above the graph is set to today, because it writes to whatever date the view is on), or add an Account Balance transaction carrying the new value. See Setting custom asset prices.
Returns drop sharply right after a sale
A double-digit drop straight after a sale means the position was recorded as sold below the market value Capitally holds. Check that the asset is mapped to the right symbol and currency, that the transaction's own price and currency are right, and whether your fill genuinely differed from Capitally's reference close.
No compensating cash position is needed after a sale: when the sale price matches the market price, the return moves from unrealized to realized with no step change. If the symbol or the price source turns out to be the culprit, Prices, symbols and market data has the fix.
A return shows NaN
MWR is a polynomial that can have several solutions or none when large inflows and outflows alternate, so the solver may not converge - a property of IRR rather than a defect, and Capitally seeds it with a ROI estimate to improve the odds. Switch to TWR or ROI, which always resolve, then find the position responsible.
Open the Rate of Return tab and scan individual positions in the table, then check that position's transactions for a price of zero or a wrong currency. Portfolio-level NaN is rare because large swings stay local to positions. A zero cost basis is a separate case: the calculation still consumes whatever cash flows exist, such as a fee, but a rate of return cannot be computed meaningfully at all. A NaN that turned up immediately after an import has its own causes - see Import problems.
A huge first-day move on a forex position
Forex MWR is computed like any other asset, so day one is your purchase price against that day's close. Check the transaction price and currency, then fees - included by default, they weigh disproportionately on day one and can be excluded in settings.
Then check Capitally's market price for the pair, and annualization: it extrapolates tiny moves across a year, so set it to Auto and only periods beyond a year are annualized.