Source: https://watch.fincobra.com/docs/how-pnl-works.html


# How PnL Is Calculated

Watchlist tracks the cost of your current holdings across connected sources. It uses weighted-average cost basis:

```
PnL = current holding value − remaining cost basis
PnL % = PnL ÷ remaining cost basis × 100
```

This is the unrealized result for current holdings. It does not include realized sales or reward income in the displayed amount. The percentage is omitted when the cost basis is zero. Account and portfolio percentages are also omitted when accounting coverage is incomplete.

## Transfers Between Your Accounts

A matched transfer between connected accounts carries the original cost basis to its destination. It does not create a purchase or sale. A partial transfer carries a proportional share of the source's basis.

For example, you buy 10 SOL for $1,000. At $150 per SOL, your PnL is $500. Transfer 4 SOL to another connected wallet: the first wallet retains $600 of basis and the second receives $400. Their combined PnL remains $500, before fees.

Transfer matching requires transaction evidence. Amount and time alone do not establish ownership. An external receipt without a matched source uses its historical market value when it enters the tracked portfolio. This measures performance from that entry; it does not recover an earlier purchase price outside Watchlist. Historical prices use daily values, not exact intraday execution prices.

## Native SOL Staking

Available SOL and native stake-account SOL form one SOL position. Watchlist identifies stake-account ownership through withdrawal authority. Delegating, activating, deactivating, or withdrawing stake preserves the principal's basis. Owned stake-account balances remain included during unstaking.

Staking rewards are separate income events. Their historical USD receipt value becomes their cost basis. Later price changes affect the displayed PnL.

Liquid-staking tokens are separate assets. Their balance is not an additional native SOL stake balance.

## Available Source Accounting

Accounts and tokens show compact PnL amounts and percentages. An asterisk (\*) marks incomplete accounting. Available source calculations remain visible when another source has no calculated result. Unknown acquisition costs do not count as free purchases or profit.

Current quantities must agree with the accounting quantities before a source result is valued. This prevents a transfer or delayed refresh from combining a new balance with an old basis. Incomplete or failed balance reads cannot create sales or reset costs. Watchlist keeps the last complete balance and matching accounting while it refreshes. If a refresh fails, the source shows the error and the time of its last successful balance read. It saves this accounting for reopening and retries automatically after a temporary connection failure. A confirmed change to holdings or acquisition cost updates the result.

## Portfolio and Account Totals

Account and portfolio amounts sum the available source results. When all required prices and accounting are available, their percentage uses the full displayed balance:

```
account PnL % = account PnL ÷ (account balance − account PnL) × 100
portfolio PnL % = portfolio PnL ÷ (tracked balance − portfolio PnL) × 100
```

Cash remains in this denominator. If an investment holding has no calculated result, the combined available PnL is marked incomplete and its percentage is hidden. Cash-only and empty sources do not make coverage incomplete. An asset's combined result uses the cost and value from sources with available accounting. Token percentages compare that result with its corresponding acquisition cost.

## Supported History

Bitcoin, supported EVM tokens, Solana, Binance, and Bybit use available transaction history. Asset identity must match a supported native asset, approved token contract, or supported exchange symbol. A symbol alone does not identify an arbitrary token contract.

Source APIs can limit history. Some transfers, prices, trades, or reward periods can remain unresolved. Hyperliquid and Aster balances can contribute to portfolio value without complete acquisition accounting. An asterisk marks incomplete available accounting.

## Stocks and ETFs

Binance stock positions use executed purchase values and purchase fees. Sales remove a proportional share of basis. Stocks show average cost per share as well as PnL. Balance and history quantities must agree.

Account and portfolio PnL combine stock and crypto results. When coverage is complete, their percentage uses the full displayed balance minus the combined PnL. An unavailable stock basis or exchange price suppresses the combined result. See [Binance tracking](./binance.md#stocks-and-etfs-average-acquisition-cost) for stock history checks.
