Personal Portfolio

Manual and CSV-imported transactions. Values use delayed quotes; currencies are not converted.

User guide — how to use this tab, and what it cannot do

A private, transaction-led record of what you hold. You enter buys, sells and dividends — by hand or by CSV — and the tab derives your open positions from them and marks those against delayed prices. Transactions are stored against your own account; no one else can see them.

Entering transactions

  1. Add transaction — date, type (buy / sell / dividend), symbol, currency, quantity, price, fees and an optional note. Date and symbol are required; the rest default to zero. Saving reloads the positions and quotes.
  2. CSV import — the file needs a header row containing at least date,symbol,type,quantity,price; fees, currency and note are optional. Choose the file, check the "N transaction(s) ready" line, then press Import CSV.
  3. Refresh values re-fetches quotes only — it never changes what you have entered.
  4. Any symbol in either table links through to the Research tab.

How the numbers are worked out

  • Quantity — buys add, sells subtract. A position is listed only while its quantity is above zero.
  • Avg. cost — a weighted average that includes fees: cost basis is the sum of quantity × price + fees, divided by the quantity held.
  • Sells release cost at the current average cost, not FIFO lots. The proceeds are not recorded as a realised gain anywhere.
  • Unrealised P&L = quantity × delayed price − remaining cost basis. Because fees sit inside the cost basis, a brand-new position starts slightly negative.
  • Dividends are stored and listed, but they do not change quantity, cost or P&L.
  • Amount in the transactions table is quantity × price, excluding fees.

Limitations worth knowing

  • Transactions cannot be edited or deleted. Check before you save — correcting a mistake means entering an offsetting transaction, which then distorts the average cost.
  • CSV import does not detect duplicates. Importing the same file twice records everything twice.
  • The CSV parser splits on every comma and does not understand quoted fields, so a comma inside a note shifts the columns. Rows are sent one at a time: if row 40 of 50 fails, the first 39 are already saved.
  • Currencies are never converted and there is no portfolio total. Each position stands alone in its own currency; a USD holding and an HKD holding are never added together.
  • No realised P&L, no return figures (time- or money-weighted), no cost-basis lots, no tax treatment.
  • Corporate actions are not applied. Splits, spin-offs, mergers and stock dividends do not adjust your history — enter the adjustment yourself.
  • Short positions are not supported. A sell with no prior buy contributes nothing, and selling more than you hold is capped at the quantity held.
  • The transactions table shows the 30 most recent only. Everything is stored; only the display is truncated.
  • Prices are delayed and cached for up to an hour, fetched one request per position, so a large portfolio marks more slowly. A quote that cannot be fetched shows for both price and P&L rather than a misleading zero.
  • Cash is not modelled — no balance, deposits, withdrawals or interest.
  • Sign-in is required, and a first action after a quiet spell can fail while the backend wakes up. Retry once.

A personal record-keeping tool, not a broker statement and not investment advice. Reconcile against your broker before relying on these figures.

Loading portfolio…

Add transaction

CSV import

CSV columns: date,symbol,type,quantity,price,fees,currency,note. Types are buy, sell, or dividend.

Open positions

SymbolQuantityAvg. costDelayed priceUnrealised P&L
No open positions.

Transactions

DateSymbolTypeAmount
No transactions.