Most trackers report a return that is not a return
Nearly every consumer portfolio tracker shows you value minus cost, divided by cost. That number ignores when your money arrived. It flatters anyone who has been adding contributions, and it cannot be compared to an index.
This one reports both industry-standard measures.
- Money-weighted (XIRR). What your timing actually earned.
- Time-weighted (Modified Dietz). The portfolio’s performance with contribution timing removed, which is the only figure that can fairly be compared to an index.
The naive figure is shown as well, deliberately, so you can see how far off the number your current spreadsheet reports actually is.
The XIRR solver is verified against Microsoft’s own documented example, matched to three decimal places.
FIFO tax lots, not average cost
Sales consume your oldest shares first. Lots split correctly on partial sales. Short-term and long-term gains are separated at 365 days.
On the sample data, a single sale reports a realized gain of 2,320.00 under FIFO against 1,861.67 under average cost. A difference of 458.33 on one trade in a two-holding portfolio.
Average cost is not permitted for stocks in the US.
A benchmark that is actually a comparison
Not what the index did this year. That is meaningless against an irregular contribution schedule.
This builds a shadow portfolio: every contribution you made, invested in your chosen benchmark on the date you actually made it. Then it compares. The excess return can be negative. That is the point of measuring it.
Risk, the way a committee would ask
- Herfindahl-Hirschman concentration index
- Top-N position weights
- What each position going to zero costs you
- A drawdown stress table with recovery time at a 7 percent compound return
It documents its own method
The workbook includes a methodology statement covering how every figure is calculated, including the admission that Modified Dietz is an approximation of true time-weighted return, because a spreadsheet does not hold a valuation at every cash-flow date.
Stated as an approximation rather than dressed up. Check whether anything else you are considering will tell you that about itself.
What you get
- Seven tabs: Summary, Transactions, Holdings, Tax Lots, Performance, Risk, Settings
- 600 transaction rows, 7 transaction types
- Eight sample transactions preloaded, with prices, so the workbook is populated the moment you open it
- Prices refreshed on demand and stored as static values. Live formulas recalculating on every open are the most common cause of a slow workbook
Requirements
- A free Google account. Google Sheets only, Excel cannot run the automation.
- Menu commands need a desktop browser.
- Prices are fetched through Google Finance when you ask for them. No email, and no files created in your Drive.
- No subscription, no app, no monthly fee.
Honest limitations
- Transactions are entered manually. There is no brokerage connection.
- Prices do not update on their own. You refresh them when you want to.
- Google Finance has no data for some tickers, mostly crypto and non-US listings. Type those prices in by hand. The workbook treats typed and fetched prices identically.
- There are no charts. This workbook reports numbers, not pictures.
- Analysis, not investment advice, and not a substitute for your broker’s tax documents.