The tiles above the Portfolio table and the columns inside it are built from one small set of metrics — principal, value, returns, yield and rate — each read over the period you have selected.
For the three methods behind the rate columns — money-weighted (MWR/IRR), time-weighted (TWR) and ROI — see Calculating returns.
How the metrics reconcile
For any period, one identity holds: End Market Value = Start Market Value + Principal Change + Total Returns. Money you pay in or take out lands in Principal Change and never touches Total Returns. Everything the investments earned — price change, income, fees, taxes, currency — lands in Total Returns and never in Principal Change.
Total returns is the Returns column in the table; the tile above it is labelled by what you include, total returns by default. Market value is the Value column.
A 1,000 EUR deposit moves Principal Change to +1,000 and leaves Total Returns at zero if prices didn't move. A 3,000 EUR withdrawal for living expenses shows as −3,000 in Principal Change and leaves the return untouched. Dividends and interest are recorded as income, so they count towards returns rather than looking like money paid in. The separation is automatic once transactions carry the right transaction types — no tax setup or advanced features needed.
When the numbers appear not to add up, the usual cause is the mental equation End MV − Start MV − my deposits = Total Returns. The identity uses Principal Change as the app reports it, not your own estimate of what you paid in. Any difference between your estimate and the figure on screen shows up as an apparent reconciliation gap. The second usual cause is period boundaries, covered in the next section.
To see what drove Total Returns rather than reconcile it by hand, open the Breakdown chart in the Returns tab. It decomposes the return into income, price change, FX and fees.
Every column is a period figure
Portfolio metrics are period deltas, not lifetime totals: change the date range and nearly every number changes with it. Value and principal columns are snapshots at the end of the period, while return columns are the change across it. That is why Invested Principal never sums to Principal Change — one is a level, the other a flow.
The tooltip formula for Total Returns, value − principal + realized returns, describes the cumulative all-time figure. For a selected period, every term is a change:
One consequence: Realized Returns for a period can exceed Total Returns for the same period. If a gain was already unrealized before the period started and the position was sold inside it, that gain becomes realized within the period but had already been counted in Total Returns before the period began — so it is not a new gain. Switch to the max period and the two agree: for a fully sold asset, market value and principal are both zero, and Total Returns equals Realized Returns.
Which positions are counted at all depends on the filter in play — see Filters. On Summary, max and hold resolve against the active filters, so the same comparison can read differently there than in Portfolio.
Principal: what you paid for what you hold
Invested Principal is the sum of what you paid for the positions that are open right now, converted into your viewing currency and excluding fees and taxes. It is not the total you deposited: closed positions drop out of it, and gains that were sold and reinvested are added to it.
- Invested Principal — how much the currently open positions cost you. Foreign-currency purchases are converted into the viewing currency, so small differences against your broker's figure are normal when several currencies are involved. It includes reinvested gains from closed positions.
- Average Principal — the time-weighted average of invested principal across the selected period: how much money was actually working, rather than how much you ever committed. The table column is abbreviated Avg Principal and is hidden until you switch it on. It sizes the rectangles in the
Heatmapchart and the dots inVariation. - Max Principal — the largest invested principal the position reached at any point in the period. Also hidden by default.
- Principal Change — the net of cash in minus cash out for the selected period. Deposits and withdrawals live here, and internal shifts do not: selling one asset to buy another moves Invested Principal between positions without changing Principal Change for the portfolio. You'll find it beside Market Value in the metrics above the table, and alongside returns in Returns → Breakdown. To find the biggest flows, sort the Invested Principal column and pick Absolute difference in the sorting menu.
Why Invested Principal exceeds your deposits
Say you deposited 84,905 EUR and the Invested Principal column reads 85,396 EUR. The 491 EUR difference is realized gains that were reinvested: positions were sold along the way at a profit and the proceeds bought something else, and that reinvested profit is principal too. If your deposits and Invested Principal disagree, look for the sales in between — they explain the gap.
Approximating what you actually contributed
If you track cash balances in Capitally, principal covers cash, invested and reinvested amounts. In that case — and only if you never transferred money out — Invested Principal minus Realized Returns approximates the total you originally paid in.
Cost basis per share
Cost basis per share is Invested Principal divided by the quantity held. It excludes fees and taxes, which are typically due when a position closes rather than when it opens. To see it against the market price over time, open a single position and switch to the Asset Price metric tab — the average buy price is charted alongside the market price. The same figure is available as the Avg. Open Price column.
The ∞ marker
∞ in the Invested Principal column is the period-change percentage, and it means the position held no principal at the start of the period you selected. Viewing five years on a position opened two years ago leaves nothing to measure the change against, so Capitally shows ∞ rather than a misleading number. Shorten the period to the holding period and a percentage appears.
Market Value
Market Value is what your positions are worth at market prices — a point-in-time number rather than a period one. It moves when prices move, when you deposit or withdraw, and when you buy or sell. Start Market Value and End Market Value are the same metric read at the two ends of your selected period.
The end of the period is what the Value column shows. For the other end there is a separate column, Starting Value — the market value of the position at the start of the selected period, so the previous year-end on a year-to-date range. It is hidden until you switch it on in the columns menu.
Because it is a point-in-time number, Market Value is the one figure in the identity that carries no information about how it got there. Everything explanatory sits in the two flow terms next to it: Principal Change for your own money, Total Returns for the market's contribution.
Returns: total, capital, currency, realized, unrealized
Total returns is everything the investments earned over the period: price change, income, fees, taxes and currency effects. In the table it is the Returns column. Above the table the same figure is labelled by what you include in it — total returns by default, and price returns, nominal returns or net returns once you change the options. A + or * next to the type flags a non-default treatment of Other cashflows, and b-tax, a-tax or p-tax is added when the tax setting is not the default Paid. The other four columns slice that figure: Capital and Currency split it by source, Realized and Unrealized split it by whether the position has been closed.
- Returns — the performance-driven change in value for the period, excluding deposits and withdrawals. What counts as "everything" is configurable: by default returns include fixed income, fees and
Othercashflows, and you can strip those back to a price-only or nominal return under what is included in returns. - Capital Returns — the asset's own performance, isolated from exchange-rate movement by holding the FX rate constant at the position's opening date. Its tooltip names the exclusions: currency impact, fees and taxes. Income still counts while fixed income is included in returns, so Capital Returns can read either higher or lower than the total.
- Currency Returns — total returns minus capital returns: the difference against a world where the FX rate stayed frozen at the opening date. It excludes fees and taxes. If you converted currency at a rate away from the end-of-day market rate, that difference is booked to Capital Returns, on the reasoning that you bought the currency at a better or worse rate than the market and currency return should only reflect moves that happened after the transaction.
- Realized Returns — gains and losses crystallized by closing positions within the period. Watch the period boundary described above: a gain that was unrealized before the period began still increments Realized Returns when the sale happens inside it.
- Unrealized Returns — the gain or loss on positions still open, read at the end of the period: market value minus invested principal. As a percentage it is that amount over invested principal, which for a single lot comes to
(current asset price / open price) − 1. The open price comes from the lot a sale would close, in FIFO order unless you changed the cost basis method.
Capital Returns and Unrealized Returns are not two views of the same thing. Capital Returns contains both realized and unrealized components, so any sale inside the period opens a gap between them, and selling at a price away from the end-of-day close widens it. They agree only when nothing was realized during the period and every sale went off at the closing price.
Read currency returns across positions, not one account at a time
A single currency account viewed on its own can show a currency return close to zero — if you bought currency and immediately spent it on an asset, only a sliver of balance is left to move with the rate. View the related positions together. Your currency return for the whole period is the sum of every position's currency return plus the capital return of the cash position itself.
All of this is computed at the Position Unit level and then aggregated: every buy opens a unit, every sell closes or splits units, and each unit's opening value is compared to its current value. Every point on a chart is calculated the same way.
Returns attribution
Returns attribution shows how much of the period's gains — or losses — each position accounts for. Profits and losses are pooled separately: a winner's share is its return divided by the sum of all gains, a loser's share is its loss divided by the sum of all losses, shown with a minus sign. The positive shares add up to 100% and the negative shares to −100%.
That separation is what makes attribution readable when a portfolio contains both. Two positions, one up 1,000,000 and one down 1,000,000, are the whole of each pool: the winner shows 100%, the loser −100%. A single position at −100% means every loss in the view sits in that one row.
Ranking by attribution is therefore not the same as ranking by return, because attribution weighs the size of the gain, not its rate: a position with a smaller percentage return can outrank one with a larger one.
If a position shows 0%, it earned nothing over the period. That is attribution working correctly, not a display bug — attribution is not allocation. For portfolio composition by market value, the column you want is Allocation, which appears on the Value and Asset Price metric tabs; Returns attribution appears on Returns and Return Rate. You can keep both configured and flip between them.
Income: Yield, Yield on Cost and Income Yield
Yield and Yield on Cost differ in both base and window. Yield measures the last year of payouts against what the position is worth now, and ignores the date range you picked. Yield on Cost measures the income actually recorded in your portfolio over the selected period against the principal that was working during it.
Each appears under two names. The metric tiles on the Income tab call them Yield and Yield on Cost; the columns in the table beside them are Income Yield and Income YoC.
- Yield / Income Yield — yield on market price: income per share over the last year divided by the current price per share, drawn from market dividend data. The window is fixed at one year whatever period you select, which is why the figure carries a
/1ymarker even on a year-to-date view. Across several positions it is reported as a principal-weighted average, and it includes positions that pay no income at all, so a portfolio-level yield sits below the yield of its income-paying holdings. - Yield on Cost / Income YoC — the income you actually received in the selected period, divided by the average principal held over that period. Only the days a position actually held a balance count towards that average, so a position opened mid-period is not diluted by the months before it existed. Picking
maxgives the cumulative dividend return on average cost, which is what people usually mean by Dividend ROI.
Yield on Cost follows the Annualize setting in the returns options: Over period leaves it as the plain period figure, Auto annualizes only periods of a year or more, and Annualized always annualizes. Annualized rates are marked p.a. — see annualizing rate of return.
Average principal, rather than everything you ever invested, is the deliberate base for Yield on Cost. Using the total ever invested would overstate a position built up incrementally, because not all of that capital was working for the whole period.
When a yield looks wrong
- Yield is 0% or far off the published figure. Check the quote currency first: dividends occasionally arrive from the data provider marked in the wrong denomination, GBX pence against GBP pounds being the classic case. Fix it with Settings → Analysis → Reset data and prices cache.
- The asset is priced on the wrong exchange. A London-listed trust pulling prices from Frankfurt produces a different yield. Edit the asset, open the Prices tab and check the market symbol.
- The fund has no dividend data. Some mutual funds and bond funds aren't covered for dividends. Add or import the payments from your statement and the yield calculates from your own data.
- The amount doesn't match your broker. Capitally records the gross declared dividend per share; brokers usually show the net amount after withholding tax. The per-share figure should agree, the total often won't. Edit the transaction to the amount actually received if you'd rather track net. See Tracking Dividends for the full treatment.
Dividend or Interest transactions — those feed the yield metrics. One-off amounts recorded as Other are deliberately kept out, so a single windfall doesn't distort the fixed-income yield.Clean price, % of par and yield to maturity
Three figures describe an interest-priced bond that the ordinary price columns cannot. Clean price is the price without accrued interest, which is what the market quotes. % of par is that clean price against face value. Yield to maturity is what you would earn buying at today's dirty price and holding to maturity, as an effective annual rate.
Yield to maturity is the one figure here that measures nothing that has already happened, which is what makes it easy to confuse with Yield and Yield on Cost. Those two are built from income recorded or declared; yield to maturity is the discount rate that makes a bond's remaining coupons and principal repayments worth today's dirty price. It compounds yearly whatever the coupon frequency, so a quarterly payer and an annual payer compare directly.
Clean price is denominated in the asset's own currency rather than the currency you are viewing the portfolio in, so a EUR bond still reads in EUR inside a USD view. Both it and yield to maturity are columns under Investment Income, hidden until you switch them on, and both are Asset Price chart metrics once you open a single interest-priced asset. % of par is not a column at all — it sits beside clean price in the metrics above the table for that opened asset.
Either figure needs a row that resolves to a single asset, so both are blank on the aggregate tabs — Types, Currencies, Markets and tags — where one row covers many. They populate in the position, asset and account views and in the Taxable Income Report. Within a row they read off the earliest-opened position, which makes them approximate for a holding built from several lots bought at different prices.
Yield to maturity is blank, while the clean and dirty prices still show, when terms are configured on both the positive and the negative balance side; when the schedule never ends, with no maturity date and no finite number of periods; when the bond has already matured, so there is nothing left to discount; when the price is not positive; or when the solver cannot converge on a rate that reproduces the price. The schedule that produces those cashflows is set up in interest-based pricing.
Rate-of-return columns
Four columns answer "at what rate" from returns already earned, and they differ mainly in annualization. Return Rate gives the return for the selected period. Annualized IRR restates it as a compounded per-year rate. Annualized IRR (Simple) restates it as a linear per-year rate. Returns (1 year) ignores your selected period altogether. The one rate that looks forward instead is yield to maturity, which prices a bond's remaining cashflows rather than measuring anything recorded.
- Return Rate — the rate half of the Returns column on its own, hidden until you switch it on. The method behind it is money-weighted (IRR) by default and can be switched to TWR or ROI in Returns options, the button next to the currency selector, or set for the whole project under Settings → Analysis. It follows your Annualize setting, so with
Autoit annualizes periods of a year or more and leaves shorter ones as the plain period return. Above the table the same number is labelled with the method in use —Rate of Return (MWR),Rate of Return (TWR)orRate of Return (ROI), andDisc. Rate of Return (…)once a discount benchmark is set. - Annualized IRR — the same period IRR, compounded up to a year:
(1 + period IRR) ^ (365.25 / days) − 1. It always annualizes, whatever your Annualize setting says, and it honours the Discount by option, so it can be read as a real or excess rate. - Annualized IRR (Simple) — the same period IRR, spread linearly instead:
period IRR × 365.25 / days held. Days on which the position had no value are excluded, so a position held for three months inside a one-year window is annualized over those three months, not over the year. It is always nominal and ignores discounting. Hidden by default: enable it under Returns in the columns menu. - Returns (1 year) — always the most recent one-year period, whatever period you have selected. It belongs to a set of fixed-window columns —
1 month,3 months,6 months,1 year,3 years,5 yearsandmax— all hidden by default, all ignoring the period selector. Put one beside the plain Returns column, which does follow the selected period, to read long-run and recent performance side by side.
The two annualized columns diverge in opposite directions depending on the length of the period. A 150% gain over two years reads 75% per year simple against 58.1% compounded. A 10% gain over six months reads 20% per year simple against 21% compounded. Simple can also fall below −100% per year on a sharp short-term loss, which the compounded version mathematically cannot.
Use Annualized IRR to compare investments against each other or against a benchmark — it is the geometrically correct measure. Use Simple when you want the pace extrapolated flat, which is how banks quote nominal annual rates and is more intuitive for very short holdings.
If a number still doesn't reconcile
Work through these four checks before assuming the calculation is wrong. In practice the cause is nearly always framing rather than arithmetic: an estimated deposit figure standing in for Principal Change, or a period boundary moving a gain from one column to another.
- Read Principal Change off the screen instead of subtracting your own estimate of deposits. The identity
End MV − Start MV − Principal Change = Total Returnsonly holds with the app's figure. - Check the period. Every metric except the point-in-time value columns is a delta across the selected range, and the ∞ marker means the range is longer than the position's life.
- For a fully sold asset, switch to
max. Market value and principal go to zero, and Total Returns should equal Realized Returns. - Open Returns → Breakdown to see income, price change, FX and fees separately, instead of inferring them from the totals.
If the value rather than the return is what disagrees with your broker, that is a different question — start with Balances and cash don't match. Tax columns have their own glossary in Taxes.