PnL decomposition

Total P&L is decomposed twice: quantity effect against price effect, and income return against capital return.

A position that gained $288,000 could have earned it two ways: by accumulating more tokens, or by holding the same tokens while their price rose. The first reflects allocation decisions, the second reflects the market. Total P&L on its own does not distinguish between them.

The two decompositions#

Total P&L is decomposed along two independent axes. Each axis isolates one measured component and carries the balance in a residual term, so each decomposition reconciles to the same total on its own.

Quantity effect vs price effect

Strategy P&L is the change in token quantity, marked at the closing price. Market P&L is the residual. This is the volume/price variance split used in management accounting: units held versus price per unit.

Income return vs capital return

Yield P&L is protocol income: interest, LP fees, and staking rewards. Price effect P&L is the residual. This is the split fixed income and real estate reporting use to separate coupon or rental income from capital appreciation.

The four components are not a four-way split of total P&L. They are two complete two-way attributions of the same figure:

Strategy P&L+Market P&L=Total P&L

Market P&L absorbs everything not explained by the change in token quantity.

Yield P&L+Price effect P&L=Total P&L

Price effect P&L absorbs everything not explained by protocol income.

Solid: measured component · Dashed: residual

A worked example#

A staking position held for a quarter:

Position
At the start1,000 tokens, priced at $2,000 → $2,000,000
At the end1,040 tokens, priced at $2,200 → $2,288,000
Total P&L$288,000

Two effects landed in the same period: the position accrued 40 extra tokens, and every token repriced by $200. The quantity/price axis separates them:

  • Strategy P&L: $88,000The position ended the quarter with 40 more tokens than it started with. Valued at the end-of-period price of $2,200, those extra tokens are worth $88,000. That is the part of the gain the position itself produced.
  • Market P&L: $200,000The remaining $200,000 is the original 1,000 tokens appreciating by $200 each. That amount would have accrued without any action, so it is attributed to the market rather than to the strategy.

Why two axes and not one#

On a single-leg position like the example above, both axes return the same answer: the 40 extra tokens came from staking yield, so strategy and yield are both $88,000.

They diverge on wrapped and multi-leg positions. A vault receipt token's balance can move for reasons that are not protocol income, such as rebases, fee mechanics, or the vault rebalancing between underlying assets. The quantity axis counts every balance movement. The income axis counts only what the protocol paid on the underlying assets.

AxisWhat it answers
Strategy vs marketDid allocation decisions add value, or did the position track the market? This is the manager-skill question LPs and allocators ask.
Yield vs price effectHow much of the return is recurring income versus mark-to-market? This is the income-durability question a risk or treasury team asks.

Reading it correctly#

  • Never add across the two axesStrategy plus yield is not a meaningful figure. Each axis already accounts for the entire total on its own, so combining components from both double-counts.
  • Market and price effect are not the same numberBoth are price residuals, but each is the balance left by a different measured component. On a wrapped position they will differ, and that difference is informative rather than an error.
  • Holdings only ever show market and price effectA plain token balance held in a wallet has no protocol layer, so it accrues no income and no quantity effect. Its entire P&L is price movement.
  • Check which time window you are readingEvery component exists both since inception and for the selected period. A KPI labelled 'since inception' does not change when you narrow the period pills. That is intended behaviour rather than a stale value.

Where this lives in the app#

PnL Breakdown is the dedicated view for these components. Attribution answers the adjacent question of which positions produced them.

For the exact formulas, field names, and rollup rules behind each component, see Metrics & formulas.