๐ Period PnL (Profit and Loss)
๐ก What is Period PnL?
The absolute monetary gain or loss generated by your portfolio within \([t_0, t_1]\), adjusted for external cash flows.
๐งฎ Formula
The baseline delta comes from cumulative_external_cash_flow, so it includes cash flows and priced in-kind ADJUSTMENT/TRANSFER capital.
๐งฎ Decomposition
| Component | Definition |
|---|---|
| \(\Delta\mathrm{UGL}\) | Change in unrealized gain/loss over the period โ for assets priced in another currency, including the exchange-rate effect on their historical cost |
| Realized | Sum of (sell proceeds โ historical cost of the units sold) for SELLs in period; proceeds are converted at the sale date |
| Income | DIVIDEND + INTEREST in period |
| FeesTaxes | FEE + TAX in period |
| Other | What closes the identity: the exchange result on cash held in another currency (FX on cash) plus a residual |
Other is computed as:
Because the cost basis keeps its historical exchange rates (see Book Value), the effect of exchange rates on foreign assets is part of \(\Delta\mathrm{UGL}\), not of Other. Cash held in another currency is different: NAV and Book both value it at each day's rate, so its exchange-rate effect cancels in the unrealized gain/loss and is not in \(\Delta\mathrm{UGL}\). It is the first part of Other, the FX on cash of each broker \(b\), which the Period view shows per broker:
The residual holds what neither the four components nor the exchange result on cash can see:
- the exchange-rate move of cash while it travels between two brokers: in transit, it belongs to no broker's balance;
- the cost of a currency exchange, at one broker or across two: โ1,000 USD worth โฌ920 at the day's rate, exchanged into +โฌ900, gives โโฌ20, which is neither a fee nor a sale;
- the value of assets travelling between two brokers on a boundary day;
- a sale left out of Realized because its proceeds could not be converted or its position's cost is incomplete.
๐ต FX on Cash
For each broker \(b\) holding cash in a currency other than \(C^*\), over the period \((t_0, t_1]\), \(t_0\) being the opening state:
\(N_{b,c}(t)\) is the balance \(b\) holds in currency \(c\) on \(t\), scaled by the broker's share, and \(\mathrm{fx}\) the latest rate on or before the day. The second sum runs over \(b\)'s movements in a foreign currency dated in the period: each amount, scaled by the share \(s_m\), at the rate of its own date \(d_m\). The first term is the change in value of the foreign cash, the second what the movements brought in or took out: the difference is what the exchange rates did to the cash the broker held. It equals the exchange results the engine books on the period's rate-change days (Portfolio Engine โ ยง6). Cash in \(C^*\) has none.
Example: dollars at a broker on a euro dashboard
A broker holds 1,000 USD for the whole period while the rate goes from 0.90 to 0.92 EUR per USD:
With a deposit of 500 USD in the middle of the period at 0.91, and 0.92 at the end:
The deposit entered the capital at โฌ455; the +โฌ25 is what the dollars gained against the euro while the broker held them.
๐ฑ Unrealized Change by Currency
\(\Delta\mathrm{UGL}\) is split by the currency \(A\) the assets are priced in. For the positions in currency \(A\) on day \(t\), let
| Symbol | Meaning |
|---|---|
| \(\mathrm{MV}_A(t)\) | Their market value in \(C^*\), at the day's price and rate |
| \(\mathrm{Cost}^{A}_A(t)\) | Their historical cost in \(A\) |
| \(\mathrm{Cost}^{*}_A(t)\) | Their historical cost in \(C^*\) |
| \(r_A(t) = \mathrm{fx}(A, C^*, t)\) | The day's exchange rate |
Each acquisition's cost in \(A\) comes from its cost in \(C^*\) at the acquisition date, \(c^{A} = c^{*} \cdot \mathrm{fx}(C^*, A, d)\) (or the amount paid, when paid in \(A\)). The unrealized gain/loss then splits exactly into an asset effect and an exchange-rate effect:
For a mark quoted in \(A\), \(\mathrm{MV}_A(t) = \frac{q}{qbq} \cdot \mathrm{mark}_A(t) \cdot r_A(t)\), so the asset effect is the assets' own change in their currency, translated at the day's rate: \(E^{\text{asset}}_A(t) = \bigl(\frac{q}{qbq} \cdot \mathrm{mark}_A(t) - \mathrm{Cost}^{A}_A(t)\bigr)\, r_A(t)\). The exchange-rate effect is zero on the day of each purchase. For \(A = C^*\), \(r = 1\) and \(\mathrm{Cost}^{A} = \mathrm{Cost}^{*}\): the exchange-rate effect vanishes, and assets already in the report currency have an asset effect only.
A position in a currency \(A \neq C^*\) that cannot be split on day \(t\) โ no market value, no rate \(r_A(t)\), or a cost incomplete in either currency โ adds its whole \(\mathrm{MV} - \mathrm{Cost}^{*}\) (with \(\mathrm{MV} = 0\) when it has no market value) to an unsplit part \(E^{\text{unsplit}}_A(t)\) instead. Positions in \(C^*\) always count in the asset effect.
The period rows are the changes between the period's two boundary states โ the last state on or before \(t_0\) (zero if there is none) and the state at \(t_1\) โ, the same two states as \(\Delta\mathrm{UGL}\):
Example: a US ETF on a euro dashboard
10 units bought for โฌ400 when they were worth 500 USD, so \(\mathrm{Cost}^{*} = 400\) EUR and \(\mathrm{Cost}^{A} = 500\) USD.
| Day | Value in USD | \(r_{USD}\) | MV in EUR | \(E^{\text{asset}}\) | \(E^{\text{fx}}\) | \(\mathrm{UGL}\) |
|---|---|---|---|---|---|---|
| \(t_0\) | 520 USD | 0.78 | 405.60 | \((520-500) \times 0.78 = 15.60\) | \(500 \times 0.78 - 400 = -10.00\) | 5.60 |
| \(t_1\) | 550 USD | 0.75 | 412.50 | \((550-500) \times 0.75 = 37.50\) | \(500 \times 0.75 - 400 = -25.00\) | 12.50 |
The ETF gained in dollars (+โฌ21.90), the dollar lost ground against the euro (โโฌ15.00): together, the +โฌ6.90 of the period's unrealized change.
๐ฏ Per-Asset Contribution
For each position \((a,b)\):
The position set includes all activity in the period:
Annualized period return clamps its window start to the later of the requested start and the oldest open lot date. It uses \(|\mathrm{StartValue}|\) as annualization base, falling back to end cost basis for positions opened mid-period. See Net Annualized Return.
๐ See Portfolio Engine โ ยง7 Period Contribution for details.
๐ Example
- NAV at \(t_0\): โฌ27,000
- Capital baseline increase in period: โฌ1,000
- NAV at \(t_1\): โฌ33,000
๐ Related
- ๐ผ NAV โ endpoint of every PnL formula
- ๐ Book Value โ historical cost basis behind the unrealized gain/loss
- ๐ธ Deposited Capital โ inception-to-date Total PnL
- โ๏ธ Portfolio Engine โ full mathematical model
- ๐ Performance Metrics Overview โ all performance metrics at a glance