Contribution
How position and group contributions add up to portfolio TWR and MWR, including multi-period linking
Contribution answers “who paid for this return?”: which instruments, asset classes, currencies, issuers, sectors or rating groups moved portfolio TWR (and, separately, MWR) over the period.
It is not the same as attribution. Contribution decomposes the portfolio’s own return. Attribution decomposes the gap versus a benchmark.
A transaction-based book is required. Grouping and Excel export live in the terminal dashboards and in the performance API.
One day
For each day TrackRecords builds position income (price move, accrued income, FX) and opening market value. Daily contribution is value-based: the position’s share of that day’s portfolio P&L, so that
sum of contributions on day t = portfolio return on day t
Using weight × own return as a shortcut would not always hit that identity (fees, receivables that appear inside the day, tiny residuals). The engine therefore allocates the day’s P&L so the identity holds, then groups those lines by the key you chose.
You can group by instrument, asset class, currency, issuer, sector or rating group, and stack those keys into a tree (for example asset class, then issuer).
Many days: linking
TWR over a month is geometric: (1 + r1) × (1 + r2) × … − 1. Adding raw daily contributions would under- or over-explain that compound number. The leftover is a linking residual.
TrackRecords rescales each day’s contribution with a linking coefficient so that, for the whole horizon:
sum of linked contributions = portfolio TWR
Two methods are available:
| Method | What it does |
|---|---|
| Menchero (default) | Optimal linking (Menchero, 2000). Time-symmetric: swapping the order of days does not reshuffle who “owns” the residual. Stable when some days are near zero. |
| Frongello | Suffix product of later portfolio returns (Frongello, 2002). Later days are capitalised on earlier TWR. Order of days matters; the sum still equals TWR. |
Pick Menchero for a long or noisy window. Frongello is the sequential GIPS-style chain and is easier to explain as “this week’s contribution grew with last week’s NAV”.
Either way, no leftover “other” bucket is required: every grouping (instrument, class, currency) still adds up to the same portfolio TWR.
What the table shows
Typical columns:
- Average weight: time-weighted share of NAV (helps read contribution against presence in the book)
- Segment return: geometric TWR of the names in that group
- Contribution to TWR: linked contribution (the column that adds up to portfolio TWR)
- Income: absolute P&L in portfolio currency
- Mark-to-market / coupons / dividends / FX: split of that income
- End weight
Filters (class, currency, rating, issuer) show the contribution of that subset to the whole book, not a carved-out sub-portfolio TWR. The group’s own TWR is still the geometric return of the names that passed the filter.
MWR contribution
MWR contribution is simpler: income_i / portfolio average invested capital. Those shares add up to portfolio MWR. Use it when the question is capital deployed, not time-weighted skill. See TWR and MWR.
Related: TWR and MWR, Attribution, Custom benchmarks.