Koinlytics

How to Measure Whether Your Portfolio Is Actually Making Money

Riskintermediate8 min read
Realized versus unrealized profit, why a balance-only tracker cannot compute realized P&L, and why simple ROI, time-weighted return and money-weighted return disagree once deposits enter the picture.

A portfolio can show a green number on a tracker and still be losing money, and it can show a red number while actually being profitable. The gap comes from confusing unrealized paper value with realized profit, and from using a return calculation that answers the wrong question.

Realized versus unrealized profit

Unrealized profit is the difference between current market value and cost basis on positions still held. It is a mark, not a fact: it depends on a price that may not be achievable in size, and it can shrink or reverse the moment the market moves before an exit happens. Realized profit is what has actually been locked in through a sale, a swap, or any other disposal, calculated against the specific cost basis of the units disposed of. Many jurisdictions tax the realized figure rather than the unrealized one, though rules vary and this is not tax advice; see the chapter on crypto tax basics for the general framework.

A tool that only ever sees current wallet balances cannot compute realized profit, because realized profit depends on transaction history: what was paid for each unit, when, and what it was exchanged for when it left the wallet. A balance snapshot shows what is there now; it says nothing about what was paid to acquire it or what has already been taken out along the way. This is why a portfolio tracker built only on live balances can show total value clearly and still have no idea whether the holder has made or lost money on everything already sold, moved, or swapped before that snapshot was taken.

Simple ROI versus time-weighted versus money-weighted return

Simple ROI, calculated as (ending value minus starting value) divided by starting value, answers one question: how much bigger is the ending pile than the starting pile. It does not distinguish growth from investment performance from growth caused by adding more capital, which makes it the easiest return figure to compute and the easiest one to misread.

Time-weighted return strips out the effect of deposits and withdrawals by calculating the return in each period between cash flows and compounding those period returns together. It answers: how did the underlying holdings perform, independent of when money moved in or out. Money-weighted return, equivalent to an internal rate of return, weights each period by how much capital was actually invested during it, and answers a different question: how did the money in this specific account actually do, given when it arrived.

A worked example where simple ROI lies

Start with $10,000 on 1 January. By 30 June the portfolio has grown to $15,000, a genuine 50% gain with no deposits. On 1 July, $15,000 of new capital is added, bringing total contributions to $25,000. The second half of the year is flat: the portfolio ends 31 December still at $30,000.

Simple ROI for the year: (30,000 minus 10,000) divided by 10,000, or 200%. That number is technically the ratio of ending value to the very first deposit, and it is a materially false picture of investment performance, because $15,000 of the $20,000 increase was a deposit, not a gain.

Time-weighted return treats the two periods separately and compounds them: period one returned 50% (15,000 / 10,000), period two returned 0% (30,000 / 30,000, since the deposit landed at the start of the period and nothing grew after it). TWR = 1.50 x 1.00 minus 1, or 50%. That is the actual performance of the underlying positions, unaffected by the size or timing of the deposit.

Money-weighted return goes further and accounts for the fact that most of the capital, the $15,000 deposit, arrived just before six flat months and therefore earned nothing on it. Solving for the rate that reconciles $10,000 invested at the start, $15,000 invested at the halfway point, and a $30,000 final value gives a money-weighted return of roughly 29%, well below the 50% time-weighted figure, because most of the dollars in the account never participated in the period that actually made money.

Three numbers, one portfolio: 200% (wrong, deposit-blind), 50% (true investment performance), 29% (true dollar-weighted outcome). Simple ROI is the number that flatters most, and it is the number most trackers show by default because it needs nothing more than a start and end balance.

The denominator problem

Every return figure is a fraction, and the denominator, the starting value used to divide by, is not obvious once more than one cash flow is involved. Divide by the very first deposit and every later deposit's growth gets miscounted as return, as in the 200% example above. Divide by a running average of capital invested and the answer changes again. There is no single correct denominator in the abstract; time-weighted and money-weighted return are two different, defensible answers to the question of what to compare against, and simple ROI stops really answering that question the moment a deposit or withdrawal happens mid-period.

Dollars versus a crypto numeraire

A return figure also depends on the unit it is measured in. A portfolio up 20% in dollar terms over a year in which Bitcoin doubled is down roughly 40% measured against Bitcoin, because the dollars the portfolio grew by now buy about 40% less Bitcoin than they did a year earlier. Neither number is wrong, they answer different questions. Dollar performance answers whether purchasing power in fiat terms went up. Performance against a crypto benchmark answers whether the portfolio did better than simply holding the benchmark asset instead, which is the more relevant question for anyone who could have skipped active management entirely and just held Bitcoin or Ether. Tools built for on-chain data, such as Dune, can pull the historical benchmark prices needed to run this comparison directly.

Unrealized gains on illiquid tokens are an estimate, not a fact

The unrealized value of a position marked at the last traded price, or at an AMM pool's current quote, assumes an exit at approximately that price. For a thin order book or a shallow pool, that assumption breaks down exactly when it matters most: selling a large position moves the price against the seller as the order fills, so the realizable value comes in below the marked value, and the gap widens with position size relative to available liquidity. A tracker showing an unrealized gain on a small-cap token is showing what the position is worth if it could be sold entirely at the current quote, which is rarely true in size. Checking depth with a tool like the Orca pool tracker before assuming a gain is real is the difference between an estimate and spendable money.

Measuring performance in practice

PreviousDrawdowns and Volatility: The Recovery Math Nobody Runs
Powered by Koinlytics · Free crypto education.

See it live on Koinlytics

These specific tools cover what you just read. Zero setup, connect a wallet or paste an address.