Feature Request: Money-Weighted Benchmark IRR (Public Market Equivalent / PME)

Hello Andreas & Community,

When evaluating portfolio performance, one of the fundamental questions most (active) investors want to answer is:

“Did my asset allocation and timing beat simply investing my exact deposits into a benchmark index on those exact days?”

Currently in Portfolio Performance, the IRR shown for a benchmark (such as in the Return / Volatility chart or dashboard widgets) does not answer this question.

The Problem: Comparing Apples to Oranges

  • Portfolio IRR is a true Money-Weighted Rate of Return (MWRR) computed from your actual cash flows (deposits, withdrawals, and their exact dates via ClientIRRYield).
  • Benchmark IRR is currently computed in SecurityIndex.getPerformanceIRR() using only two points: the price at the start date and the price at the end date.

This means the benchmark IRR is just a buy-and-hold annualized return (CAGR) that completely ignores cash flows. If you deposit money periodically (DCA) or invest lump sums during market dips or peaks, comparing your portfolio’s IRR against the benchmark’s IRR is misleading—they are measured under completely different cash flow realities.

The Solution: Public Market Equivalent (PME)

In portfolio management, this is standardly solved via Public Market Equivalent (PME):

  1. Whenever cash enters or leaves the portfolio, simulate buying or selling units of the benchmark at that day’s price.
  2. At the end of the reporting period, calculate the total value of those accumulated benchmark shares.
  3. Calculate the benchmark’s IRR using the exact same cash flow stream and dates as the portfolio, with the benchmark’s final simulated value as the closing cash flow.

Suggested Technical Implementation

Since SecurityIndex already has access to the reference portfolio, this fits naturally into the existing architecture:

  • Extract the portfolio’s cash flow dates and amounts (the same ones used in ClientIRRYield).
  • Calculate the synthetic benchmark end value based on historical quotes on those dates.
  • Pass the resulting cash flow list to IRR.calculate().

This could be implemented either by updating benchmark IRR when a reference portfolio exists, or by adding a dedicated “Benchmark (PME)” data series option.

What do you think about adding this capability? I would love to hear thoughts from Andreas and the community!

Although this may be of interest to some in detail, science provides a general answer to the question.

Stock picking is not more successful than a world ETF for most investors.

Furthermore, you are referring to automated simulations, which is not a topic of Portfolio Performance: therefore, Portfolio Performance is a track rather than a simulator.

Nevertheless, it is possible to achieve a similar result in PP.

Please follow this thread in German: XIRR. Einzelaktiondepot vs. ETF Depot

A browser-embedded translator should suffice.

For a PME comparison the benchmark has to receive the exact same cash-flow schedule as the portfolio — otherwise you are comparing two differently-timed savings plans and the whole difference lands in the IRR. One practical check I would add: show the simple end value next to the PME, because when contributions are large relative to the portfolio the IRR is very sensitive to timing; if both measures point the same way the result is robust, and if they disagree the cash-flow pattern was too uneven for a clean answer.