Portfolio value over time is reconstructed from your own records. Share balances are walked forward from every transaction and priced with the stored history supplied by each ticker's configured provider or local/manual history lane, then combined with the account's core cash. Total Portfolio Value on the metric card is simply the chart's latest point, so the two always agree. Before any history exists, whether on a fresh install or right after Rebuild history clears it, the card falls back to what you hold today: positions at their last price plus core cash, which is the same basis the Retirement plan starts from.
What's deliberate about it
- Cash is smoothed on the chart. Trades settle over a few days, so the chart carries a settlement-aware cash walk instead of the raw ledger. Otherwise every in-flight trade would draw a sawtooth. The exact, reconcilable balance lives in each account's own register, in the end-of-day core cash carried by its Cash balance column.
- Both shapes plot daily. A statement-tracked account holds the share counts you stated and prices them at each day's close between statements, so its curve moves with the market and steps only where you file a new statement. What is genuinely periodic there is the return: one Modified-Dietz factor per statement period. A mixed selection says so under the plot (see data shape).
- The benchmark overlay answers one question: "what if the same starting dollars had tracked X?" The benchmark's adjusted closes are scaled to the portfolio's value at the start of the visible window. Change the window and the overlay re-anchors.
- TWR % mode rebases the time-weighted growth-of-$1 index to 0% at the window start. For a group selection the index is pooled. Members' daily values and flows are combined first, then chained, which is the only correct way to aggregate TWR across accounts.
- TWR %/yr mode shows the same index as an annualized return, meaning at each date the per-year rate that compounds to the return so far, ending at the figure the Performance card reports. A partial year is never annualized, so the curve starts a year into the window and the mode is disabled on any window shorter than that. The benchmark overlay annualizes on the same basis.
Update prices fills only missing recent days. Rebuild history clears and rebuilds every ticker from its configured provider or local history lane. It is the fix for bad data, but potentially a heavy, rate-limited operation; see price sources.
If fewer than two stored value dates exist, the chart names that requirement and uses the same recovery slot as its toolbar. A ready setup offers Rebuild history. A missing provider setup routes to Settings → Price data, and an expired commercial trial routes to License. The action never silently switches providers, accepts Yahoo's personal-use terms, or downloads around a blocked setup. Manual/local records remain their own lane; the empty copy names them without pretending a provider rebuild creates those records.
The same chart, inside one account
An account's own Performance tab draws this exact panel, scoped to just that account, from the same engines: the same Value / TWR % / TWR %/yr toggle, the same date-range presets including Custom, and the same benchmark overlay reading the same comparison list. What is missing there is Update prices and Rebuild history: downloading price history acts on the whole portfolio, not one account, so the button, its progress line and the empty chart's recovery action all stay on the Overview, and an account's own empty state offers none of them.
Breaking the chart down
An account's chart (not the Overview's) also has a Breakdown control: Total only, Asset class, Model slice or Fund category. It draws one line per group beside the total, in all three modes, and adds one row per group to the return table under the chart. Your choice is remembered.
A group's return line ends once it holds nothing, and the table shows a dash for a window the group did not hold. A gap of a week or less (a fund sold on Monday and its replacement bought on Wednesday) does not count: the line runs on across it, flat. Two groups with one name are told apart by a ticker ("Large Blend · FXAIX").
- Asset class and Fund category group the account's holdings by what each security is classified as in Securities & prices; a blank reads Unclassified. Settlement cash, the account's sweep fund and any money-market fund are always the Cash line, in every breakdown (and in Asset class, so is anything classified as Cash).
- Model slice groups them by the slices of the account's target model, using the model's current version for the whole history: a fund is attributed to the slice it belongs to today, even in years when an older version of the model held it elsewhere. A holding no slice claims is Not in target model. The option is unavailable until the account has a target model.
- In Value mode the breakdown is an allocation view: each group's share of the account on each date, stacked to 100%, so the account's mix through time is one picture; hover for a group's share and its dollars. In Model slice mode each slice's target share is a dashed line, and the gap to the band's edge is the drift. A group reads zero once its last holding is sold.
- In the TWR modes a group's line is its own dollars' performance: its own purchases and sales are its flows. Group returns therefore do not add up to the total's, and are not meant to; money moved from one group to another is a sale in one and a purchase in the other, not performance. The Cash line has no return unless it holds a money-market fund, because settlement cash is outside TWR (see what TWR leaves out). A group that begins after the window starts, begins at 0% where it first has a return.
- A statement-tracked account breaks down by Value only. A statement states a net flow for the whole account and does not say which position it went to, so no group return can be derived; the TWR modes keep the total alone and say so, and the return table shows no group rows for such an account.
Under the chart, a legend lists the total, each group and the benchmark. Click an entry to hide its line, Alt-click to show that line alone, and Alt-click again to restore the others. This changes only what is drawn: the headline figure, the tooltip values and the table are always computed from every line. The browser preview has no database to break down, so the control is disabled there.
Each group can also carry its own benchmark: a model slice is compared with the model's own funds, an asset class or fund category with a ticker you map, each over exactly the dates the group was held. The return table shows the excess under each group, and showing a group alone draws its benchmark as the chart's overlay. See benchmarks for a chart breakdown.