Net Asset Value (NAV) — Definition and Daily Computation
NAV is the total value of an account's assets minus liabilities. NakedPnL records one NAV snapshot per account per day as the basis for time-weighted returns.
- Net asset value (NAV) is the total value of all assets in an account minus any liabilities, expressed in a chosen base currency.
- For crypto-only portfolios, NAV is the sum of every position priced at a consistent reference rate at a fixed UTC cutoff.
- NakedPnL records one NAV snapshot per account per day at 23:55 UTC; that snapshot becomes the input to TWR.
Definition
Net asset value (NAV) is the total fair value of an account's assets minus any liabilities, expressed in a single base currency. For a traditional fund, NAV per share is computed by an independent fund administrator at a strike time (often the close of the relevant exchange). For a self-custodial trading account, NAV is simply the sum of every position priced at a reference rate at a fixed cutoff.
Crypto-only portfolios
For a crypto-only account, NakedPnL pulls every position from the venue (spot balances, perpetual futures, options, lending positions, earn products), prices each non-stablecoin asset against USDT or USD using the venue's own reference price at 23:55 UTC, and sums the result. Stablecoins are recorded at face value. Negative balances such as borrowed positions or unrealized losses on perpetuals are subtracted. The output is a single number: NAV in USD-equivalent terms for that account at that cutoff.
Multi-currency and multi-asset portfolios
For a multi-currency portfolio (for example an IBKR account holding USD cash, EUR bonds, and JPY equities), NakedPnL relies on the broker's own daily NAV statement, denominated in the account's base currency. The broker is the source of truth for FX conversion, accrued interest, and dividend handling. NakedPnL's role is to fetch that statement, canonicalize it, and chain it. NakedPnL does not re-compute the NAV; it records the broker's reported value.
How NakedPnL uses it
Daily NAV snapshots are the input to NakedPnL's time-weighted return engine (`lib/calculation/twr-engine.ts`). Each snapshot is stored as a `NavSnapshot` row, hashed into a contentHash, and chained into the per-trader hash chain. External cash flows (deposits and withdrawals) are recorded separately so that TWR can adjust correctly across cash-flow boundaries. The daily-snapshot cron at `/api/cron/daily-snapshot` runs at 23:55 UTC to keep the cutoff consistent across venues.
Worked example
// Crypto NAV at 23:55 UTC for a Binance spot account
const balances = [
{ asset: "BTC", free: 0.5, refPriceUSDT: 62500.00 }, // 31250.00
{ asset: "ETH", free: 4.0, refPriceUSDT: 3120.50 }, // 12482.00
{ asset: "USDT", free: 6268.00, refPriceUSDT: 1.0 }, // 6268.00
];
const nav = balances.reduce((acc, b) => acc + b.free * b.refPriceUSDT, 0);
// nav === 50000.00 USDT-equivalent
// One NavSnapshot row is written, then:
// contentHash = SHA-256(canonicalize({ nav, balances, asOf: "2026-05-07T23:55:00Z" }))
// chainHash = SHA-256(previousChainHash + contentHash)What NAV does and does not capture
NAV captures the marked-to-market value of the account at a single instant. It does not, on its own, capture performance, because two accounts with the same NAV can have very different deposit and withdrawal histories. To get a flow-adjusted performance number, NakedPnL feeds daily NAV snapshots and recorded cash flows into the time-weighted return engine. NAV is the input; TWR is the output that gets published.
Related terms
- Time-weighted return (TWR) — the performance metric NakedPnL computes from daily NAV snapshots.
- Hash chain — chains the contentHash of each NAV snapshot.
- Fund administrator — the independent party that strikes NAV in a traditional fund context.
- GIPS standards — define the methodology for performance calculation that NakedPnL follows.