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):
- Whenever cash enters or leaves the portfolio, simulate buying or selling units of the benchmark at that day’s price.
- At the end of the reporting period, calculate the total value of those accumulated benchmark shares.
- 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!