Performance
TWR, Modified Dietz and XIRR: what each one tells an LP
Three standard return methods answer three different questions. A worked example with a mid-quarter subscription, and the on-chain flow errors that corrupt all three.
An LP asks how the fund did last quarter. There are at least three correct answers, and they can differ by several points. Time-weighted return (TWR), Modified Dietz and XIRR are all standard and all defensible, but they answer different questions. Choosing which to lead with is a disclosure decision. Getting their inputs right is an accounting one, and on-chain, the inputs are where most errors start.
Three methods, three questions
Time-weighted return
TWR measures the strategy. The period is split into sub-periods at every external cash flow, each sub-period's return is computed on the capital actually invested during it, and the results are chain-linked:
Because each sub-period begins after the flow, the size and timing of subscriptions and redemptions drop out. The fund's TWR for a quarter is the same whether LPs added $1M or $100M during it. That is why TWR is the standard for comparing managers and for benchmarking, and why it needs a valuation at every flow date. The GIPS standards require portfolios to be valued on the date of any large external cash flow for exactly this reason.
Modified Dietz
Modified Dietz computes one return for the period without intermediate valuations. Each flow is weighted by the share of the period it was invested:
V₀ and V₁ are the start and end values, F is net external flows, and wᵢ is the fraction of the period remaining after flow i. The result is profit over average invested capital. That makes Modified Dietz a money-weighted measure: a close approximation of the period's internal rate of return, not of TWR. Chain-linking monthly Modified Dietz returns approximates TWR, and the approximation degrades as flows grow relative to net asset value (NAV) and as prices move within the month.
XIRR
XIRR is the internal rate of return on dated cash flows: the annual rate at which the present values of the starting value, every flow and the ending value sum to zero.
Each CFₖ is one of those amounts, negative for capital going in, positive for capital coming out and for the ending value, and dₖ is its number of days from the start of the period. XIRR answers the investor's question: what did these dollars earn, given when they went in? It is annualized by construction.
A worked example
A hypothetical fund has a NAV of $40.0M at the close of 30 Jun 2026. Over the 92 days of the third quarter:
| Date | Event | NAV |
|---|---|---|
| 2026-06-30 | Start of period | $40,000,000 |
| 2026-08-15 | Sub-period 1 return of +8.0% | $43,200,000 |
| 2026-08-15 | $20,000,000 subscription lands, day 46 of 92 | $63,200,000 |
| 2026-09-30 | Sub-period 2 return of −5.0% | $60,040,000 |
The strategy gained $3.2M on $40.0M, then lost $3.16M on $63.2M. Profit for the quarter is $40,000.
| Method | Q3 2026 |
|---|---|
| TWR | +2.6% |
| Modified Dietz | +0.1% |
| XIRR, annualized | +0.3% |
| End NAV over start NAV, flow ignored | +50.1% |
TWR is 1.08 × 0.95 − 1. Modified Dietz is $40,000 over $50.0M of average capital: $40.0M, plus half the subscription because it was invested for 46 of 92 days. That is +0.08% unrounded, which matches the period's internal rate of return to two decimals. XIRR states the same economics as an annual rate.
All three are right. The strategy returned +2.6%. The fund's capital, weighted by when it arrived, earned almost nothing, because $20.0M of it arrived just before the drawdown. The gap between the two is information about the timing of flows, not about the manager's skill. The last row is what a tool that doesn't classify flows reports: the subscription counted as profit.
Annualization is the second trap. Annualize the quarter's TWR and +2.6% becomes +10.7%, a figure nobody earned. The GIPS standards prohibit annualizing returns for periods shorter than a year. XIRR is annualized by construction, so for a period under a year, quote the period figure or label the rate clearly, and never set it beside an unannualized TWR as if the two were comparable.
Which to show an LP
| Situation | Lead with | Show alongside |
|---|---|---|
| Open-ended fund, LPs choose when to subscribe and redeem | TWR, net of fees, monthly since inception | Dollar PnL for the period |
| Closed-end or drawdown vehicle, manager calls and returns capital | Money-weighted return | TWR, for comparison with peers |
| One LP's capital account | That LP's XIRR, from their own flow dates | The fund's TWR |
| Treasury deploying its own capital | Money-weighted return | TWR against an on-chain benchmark rate |
| Sleeve with no valuations inside the period | Modified Dietz, labelled as such | Dollar PnL |
The logic is control. Where LPs decide the timing, the manager shouldn't be credited or penalized for it, and TWR removes it. Where the manager decides the timing, it is part of the decision being evaluated, and a money-weighted figure keeps it in. The GIPS standards permit money-weighted returns in place of time-weighted ones only when the manager controls external cash flows and the vehicle has features such as a closed-end or fixed-life structure, committed capital, or a strategy built on illiquid investments.
When the two diverge by more than a point or so, show both and explain the flows. An allocator's analyst will often compute the other figure from the capital statements anyway.
The on-chain traps
Every method above depends on one input: the list of external cash flows, with their dates and values. On-chain, building that list is where the errors start.
Bridging is not a flow
Moving USDC from Ethereum to Arbitrum is a transfer between the fund's own addresses. It appears as an outflow on one chain and an inflow on another, sometimes seconds apart, sometimes days: withdrawals through an optimistic rollup's canonical bridge wait out a challenge period, commonly around a week. A system that treats each leg on its own records a redemption followed by a subscription, splits the TWR at both, and drops the in-transit value from NAV until the second leg lands.
The fix has two parts: a register of every address the fund controls, and an in-transit balance that keeps bridged assets in NAV while they move. Bridge fees and gas are expenses and reduce the return. The same rule covers transfers between the fund's own wallets, between a multisig and an exchange or perp sub-account, and wrapping or unwrapping. None of them changes the capital the LPs have contributed.
Reward claims are income
Tokens claimed from a rewards distributor arrive from an address the fund doesn't control, which is exactly what a subscription looks like. Booked as a flow, the reward is removed from performance. On a $50.0M fund, a $400,000 claim misread as a subscription late in the period understates the return by about 0.8 points.
Staking rewards, lending interest and perp funding are income or expense in the same way, whether they accrue in a balance or arrive as a transfer.
True TWR needs daily valuations
An LP who sends USDC to the fund's subscription address on the 17th creates a flow on the 17th, not at month-end. A true TWR needs a valuation at that point, which in practice means a daily NAV series at minimum. With monthly valuations, the fund has to fall back on Modified Dietz within the month or on an assumption about when the flow happened. Remove the 15 Aug valuation from the worked example and the +2.6% cannot be recovered: place the subscription at the start of the quarter, at the end or anywhere in between, and the result lands near +0.1%. Subscriptions in kind, in ETH or a vault share rather than USDC, are flows valued at the block where they arrive. Fees paid to the manager are expenses for a net-of-fees return, not redemptions.
How Syncrone computes them
Syncrone computes TWR with sub-periods split at every external cash flow, Modified Dietz ROI with APR alongside, and XIRR, all from the same block-level NAV series and the same flows, so the three figures describe one set of events. Methods follow the GIPS definitions where one exists, and every report records the parameters it was generated with.