Alle Anleitungen
Erste Schritte
Ihre Daten hineinbekommen
Die Zahlen lesen
Noch nicht auf Deutsch übersetzt — hier steht die englische Fassung.
Die Zahlen lesen · Anleitung 6 von 10
Read your returns
Performance shows two returns because they ask different questions. TWR is what the investments did, and the one Stonqs sets against an index. XIRR is what your money earned given when you paid it in, and it is always a yearly rate. Seven minutes, then you can follow the TWR in the calculation sheet and rerun the XIRR yourself.
A portfolio one month old, up 5.16 %, shows an XIRR of 84.5 %. Nothing is broken: XIRR is always a rate per year, and 5.16 % in 30 days, repeated for a year, is 84.5 %. The TWR tile next to it shows the 5.16 %.
That is one of three things on the Performance screen that surprise people. The other two: the XIRR tile does not start where the period you picked starts, and a return can read a dash, which is not zero. The steps below take the screen top to bottom; the arithmetic is worked under the XIRR tile and the sheet that proves it follows it.
Before you start
You have imported your files and filled the gaps, in particular the deposits that paid for your trades (fill the gaps after an import). Without them the TWR tile reads a dash. The demo portfolio (Try with a demo portfolio on first start) works for following along, but the figures below are a made-up portfolio in EUR so you can rerun them in a spreadsheet:
| Date | What happened | Value after |
|---|---|---|
| 1 Jan 2024 | Paid in 1,000 EUR, bought 10 shares at 100 EUR | 1,000 EUR |
| 30 Jun 2024 | Shares at 110 EUR | 1,100 EUR |
| 1 Jul 2024 | Paid in 900 EUR (stays as cash) | 2,000 EUR |
| 31 Dec 2024 | Shares at 132 EUR | 2,220 EUR |
These are the cash flows of the hand-worked case twr_splits_the_period_at_the_cash_flow in the app’s return tests. Your broker’s statement is the record; Stonqs only adds up what you gave it.
Pick the period
Open Performance. The period control offers 1M, 3M, YTD, 1Y, 3Y, 5Y and All, with All selected when you arrive. The TWR and earned-over-the-period tiles are figures over that window, which ends at the date the app is set to; the XIRR tile is the exception, below. The account picker applies to the screen (the user guide).
A window opens on what was there before it. A deposit made on the window’s own first day counts as money paid in, not as an opening balance (how the window opens).
Read the TWR tile
The tile labelled “TWR (portfolio return)” is the time-weighted return over the whole period, not per year. The small line under it, “a year”, is the same return converted to a yearly rate. Over a window of exactly a year the two match; over a month the yearly figure is much larger, over three years much smaller.
TWR cuts the period at every deposit and withdrawal, takes the return of each piece and multiplies the pieces. In the table above, 1,000 EUR grew to 1,100 EUR (+10 %), then 2,000 EUR grew to 2,220 EUR (+11 %):
1.10 × 1.11 − 1 = +22.1 % (2024, made-up cash flows, EUR)
The 900 EUR paid in on 1 July never enters the arithmetic. Stonqs sets this tile, and only this one, against an index, because neither is judged on when money arrived (the reference). Why the two returns disagree has the longer case, with the deposit placed so the gap is large.
A dash instead of a number is not a zero: the tile then says “No period with capital to earn on”. It means the ledger holds no stretch with money invested, usually because the deposits are missing (the fix).
Read the XIRR tile
The tile labelled “XIRR (investor return)” is the one yearly rate that turns every payment you made, on its real date, into what the portfolio is worth at the end of the period. For the table above the payments are −1,000 EUR on 1 January, −900 EUR on 1 July and +2,220 EUR on 31 December:
−1000 − 900 / (1+r)^(182/365) + 2220 / (1+r) = 0 → r = 22.4 % a year
The 0.3 points above the TWR are the timing: the second deposit met a better half-year. Paste the three flows into a spreadsheet’s XIRR function and compare. The app discounts over 365-day years, which the solver’s source comment calls Excel-compatible (the solver); we did not run Excel.
Two things to know before you compare it with anything.
It is always annualised. The test for a one-month case works it longhand: 920 EUR in on 1 June, 967.50 EUR on 1 July. That is +5.16 % for the month, and (967.5 / 920)^(365/30) − 1 is 84.5 % a year (the case). The tile does not say “per month” because it never is.
The period you picked sets only its end. The Performance screen asks for the XIRR as of the window’s last day, and the rate is built from every deposit and withdrawal since your first one (the call, investor_cash_flows). So switching from All to 1M moves the TWR tile to the last month and leaves the XIRR tile counting from the start. The user guide calls every figure a window figure, which this one is not. We read this in the code and did not run it on a long history: switch the period on your own data and watch the tile.
The tile reads a dash with the line “No single yearly rate fits these deposits and withdrawals” when there is nothing to solve (it needs payments in and a value out, with at least two cash flows of opposite sign) or the rate lies outside −99.99 % to 100,000 % a year.
Compare with an index
The “Benchmark instrument” control takes any instrument from your directory. It adds two tiles: the benchmark’s own return over the period, and the excess, your TWR minus it. The comparison is against TWR because an index has no deposits to be judged on. If the benchmark has less history than the period, the comparison starts where its prices start and the tile names the window it used. Compare the excess only with that window, not with the period in the strip.
Follow the result in the calculation sheet
“Earned over the period” is the change in value with deposits and withdrawals taken back out. The line under it, “value changed by”, is the change a statement shows, and it includes money you paid in. For the table above both are in EUR over 1 Jan to 31 Dec 2024: the value rose by 2,220 EUR, the deposits were 1,900 EUR, so the portfolio earned 320 EUR.
The panel “How the result adds up” writes that out per row. “Split the period by” starts on month and switches between day, week, month, quarter and year; day and week appear only for a period short enough to read. Every row opens where the one above closed, and the footer is the return at the top of the screen. Splitting finer never changes the totals. Split by year, the made-up portfolio is one row:
| Period | Opening | Flows | Market | Income | Costs | Result | Closing | Return | Chained |
|---|---|---|---|---|---|---|---|---|---|
| 2024 | 0 | +1,900 | +320 | 0 | 0 | +320 | 2,220 | +22.10 % | +22.10 % |
Opening + flows + result = closing: 0 + 1,900 + 320 = 2,220. The narrower columns hide on a small window. Income is shown gross, before withholding, and costs are wider than on the charges screen: a purchase commission is part of them (the sheet’s rules).
“Export CSV” writes the sheet as currently split. The file is named calculation-<from>_<to>.csv, separated by semicolons with a decimal comma and a byte-order mark, so a spreadsheet on a European locale opens it directly. Fractions, not percentages, with a last row that repeats the whole period. Decimal places follow your data:
from;to;opening EUR;flows EUR;market EUR;income EUR;costs EUR;result EUR;closing EUR;return;chained return
2024-01-01;2024-12-31;0;1900;320;0;0;320;2220;0,2210;0,2210
2024-01-01;2024-12-31;0;1900;;;;320;2220;;0,2210
When a figure disagrees with a statement, look first at the flows column: the change a statement shows includes money paid in, and “Earned” does not.
If something goes wrong
TWR reads a dash and the other tiles are fine. The deposits behind the trades are missing, or sit on an account outside the account picker. Add them or pick all accounts (the fix).
XIRR reads a dash. Check that there is at least one payment in before the end of the period. A window ending before your first deposit has nothing to solve.
The XIRR is wildly high or low on a short window. It is a yearly rate, extrapolated: 5.16 % in a month reads as 84.5 %. Read TWR for the period and use XIRR on a window of a year or more.
Your broker’s return is a different number. Which figure the broker shows is in its own documentation. Compare like with like: the broker’s “change in value” against the sheet’s “value changed by”, and a time-weighted figure against TWR. We have not checked any broker’s definition here.
Figures on this page come from made-up cash flows, not from a real portfolio. Market data in the app comes from free third-party sources without warranty, and your broker’s statements are what counts. Nothing here is investment or tax advice.
Quellen
- Stonqs: performance · The tiles, the sheet and the benchmark control, screen by screen.
- Stonqs: returns, time-weighted and money-weighted
- Stonqs: the calculation sheet
- Stonqs: hand-worked return cases · The one-month XIRR case and the deposit-in-the-middle TWR case, worked longhand in the comments.
- Stonqs: how the investor's cash flows are built · investor_cash_flows and the xirr call the Performance screen makes.