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
- 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.
- CSV import — the file needs a header row containing at least
date,symbol,type,quantity,price;fees,currencyandnoteare optional. Choose the file, check the "N transaction(s) ready" line, then press Import CSV. - Refresh values re-fetches quotes only — it never changes what you have entered.
- 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
| Symbol | Quantity | Avg. cost | Delayed price | Unrealised P&L |
|---|---|---|---|---|
| No open positions. | ||||
Transactions
| Date | Symbol | Type | Amount |
|---|---|---|---|
| No transactions. | |||