How your portfolio is valued

Every figure on the dashboard is computed from three things you can see for yourself: your trades, your balance snapshots, and daily closing prices. Nothing is stored as "your net worth" and updated behind your back — the whole series is rebuilt from those inputs, which is why correcting a trade from 2019 corrects every number after it.

This page is the arithmetic. If you want the screens rather than the formulas, Portfolio and cash covers the same ground from the front.

Positions are replayed from your trades

A position is one instrument inside one account — a symbol for a stock, ETF, fund or coin, and a specific underlying-expiry-strike-right for an option, so an option on AAPL never merges into your AAPL shares.

Positions are rebuilt from the trade history every time, in date order:

  • Only buy and sell rows change a quantity. Dividends, interest, fees and transfers carry no shares — they move cash, not the position.
  • A row whose side is split is ignored for valuation. The price feed's own split factor is the single source of truth for splits, so a split row in an import can't double-apply one. (It's logged rather than silently dropped.)
  • Two spellings of one ticker are one position. If you've told the app that your broker's BRKB means BRK-B, both brokers' rows land in the same position instead of two half-positions.

What a day is worth

For each position, on each calendar day:

value = split-adjusted shares held that day × the last known close on or before that day

Two rules are doing the work there, and both matter.

Split adjustment. Shares are multiplied by the product of every split factor dated after you bought them and on or before the day being valued. A split dated the same day as your purchase isn't applied — the shares you bought that day already reflect it, which is how your broker reports them.

Carry-forward. The close used is the most recent one at or before that day. Markets don't publish a price on a Saturday, so Saturday carries Friday's close, and so does Sunday. That's why the value chart is flat across weekends and holidays: not because nothing moved, but because nothing was published.

Worked example

You bought 10 shares at $150 on 4 Mar 2024. The stock split 2-for-1 on 10 Jun 2025. Friday 21 Aug 2026 closed at $96.20, and Saturday has no close of its own.

Step Arithmetic Result
Shares held 10 bought 10
Split adjustment × 2 (split dated after the buy) 20
Price for Friday that day's close $96.20
Friday's value 20 × $96.20 $1,924.00
Saturday's price carry Friday's close forward $96.20
Saturday's value 20 × $96.20 $1,924.00

Why there is no "today's change"

The same carry-forward rule is what makes a day-change figure meaningless here. A day's change is the difference between two consecutive daily values — but for most of any given day, the two most recent days carry the same close, so the difference is exactly $0 whether or not the market moved. The real close-to-close move landed one point further back, where nothing was showing it.

So the dashboard states how current the prices are instead:

Holdings priced at the close of Aug 21, 2026

That's the oldest last close among the securities you currently hold — the day on and after which the total stops being fully backed by real prices. One holding still backfilling drags the whole line back to its date, because that's what's true of the whole number. Three rules keep it honest:

  • Only a close inside the period you held the security counts, so a ticker that resolves to a delisted stub can't date your portfolio to a year you owned nothing.
  • A security with no usable close contributes no date at all. It's valued at cost basis, which isn't a price date.
  • Only open positions in accounts you haven't archived count.

If nothing you hold has a usable close, the line isn't shown rather than guessed at.

When a price is missing

A position with no usable price is valued at cost basis — never at zero. A zero would be indistinguishable from a closed position or a total loss, and it's exactly what once made a fully-imported portfolio render as cash only.

Cost basis is a running weighted average:

cost per share = total paid across your buys ÷ total shares bought

applied to the shares currently open. A partial sale reduces the quantity and leaves the per-share figure alone. The count used here is the raw share count, not the split-adjusted one, because without a price series there are no split factors to apply — and cost basis is unaffected by splits anyway, since more shares at a proportionally lower basis is the same total.

Same 10 shares at $150, and no price for the day: the position is worth 10 × $150 = $1,500, and the day's value is flagged as estimated in the data behind the chart. What tells you is the price banner on the dashboard, which names the ticker and, where the fix is a ticker match, offers it.

Options are always valued at cost basis, by design rather than by accident — there's no options pricing in the app. They're deliberately not flagged as estimated: a marker that's permanently on every option holding would stop meaning anything about data quality.

Cash

Cash belongs to holdings-tracked accounts, and it's signed: positive cash adds to the account, a negative balance is a margin debit and subtracts from it.

Two sources combine into one rule. Every trade already carries its own signed cash impact (a buy is negative, a dividend positive, a transfer whichever you wrote), so the history implies a balance on its own. And you can state a balance outright — that becomes an anchor. Then:

cash(T) = anchor + the sum of every trade amount dated after the anchor's date, up to and including T

The anchor is the most recent snapshot on or before T. With no snapshot at all, the anchor is $0 at the account's first trade, so a complete import derives correctly with no input from you.

Worked example

You state that cash was $12,400 on 30 June. There's also a sale dated 30 June for +$800, then two later trades.

Date What happened Cash after
30 Jun You state the balance: $12,400 $12,400
30 Jun Sale, +$800 — dated the anchor day $12,400
8 Jul Buy 20 shares at $540, −$10,800 $1,600
2 Aug Dividend, +$310 $1,910

Two consequences worth reading off that table:

  • The 30 June sale isn't added. A snapshot is the end of its day, so trades dated that day are already inside the figure you stated. The interval is open at the anchor date and closed at T.
  • Stating a balance re-bases; it doesn't override. Your figure is exactly right on the day you gave it, and every later trade keeps moving it. Nothing goes stale, because nothing is frozen. Clearing the snapshot hands the account back to fully derived cash.

Setting an earlier anchor re-derives everything from that date forward; setting a later one leaves the earlier period alone, because the most recent anchor on or before a date is the one that governs it.

Balance-tracked accounts are their snapshots

An account you track by balance rather than by trades is a step function: its value on any day is the most recent snapshot on or before that day, and $0 before its first snapshot. Nothing is interpolated between two snapshots, and nothing is extrapolated past the last one — the value simply holds until the next one you enter.

Cash is deliberately not added on top: the snapshot already states the whole account, so adding a cash figure would count it twice.

Adding it all up

Quantity How it's computed
A holdings account's value Σ its positions' values + its cash (signed)
A balance account's value its latest snapshot on or before the day
Invested assets Σ every account that isn't a liability
Net worth invested assets + liability accounts (whose values are negative)

Liabilities never dilute the asset total — a mortgage isn't a negative investment — so they're kept out of "invested assets" and netted only into net worth. The dashboard shows net worth only when your household actually tracks a liability account; see Accounts for what each account kind means.

The value chart is built by running all of the above for every calendar day from your earliest data point — earliest trade, balance snapshot or asserted cash balance — through today. Archived accounts are still valued historically, because they genuinely held value then; they're excluded from anything answering "what do we hold now", including the price date above.

Where this goes next

These are the numbers the retirement plan starts from: your accounts' current values, sorted into tax buckets. How the plan takes them forward is How the plan is simulated, and what neither model attempts is What the model leaves out.