Describe the bug
Portfolio Performance displays a daily price change of 0.00% for certain mutual funds whose NAVs are published with a reporting delay.
Although a new NAV has been published and the fund value has changed, PP reports no daily movement.
This differs from the behaviour of major fund-data providers (e.g. Financial Times and Morningstar) and can result in misleading information being presented to users.
``
Observed Behaviour
PP reports '1 Day Change' = 0.00% even though a new NAV has been published and the latest NAV differs from the previous published NAV.
The issue affects multiple funds from different providers and is not limited to a single security.
Why This Is Problematic
Many mutual funds, particularly UK OEICs, unit trusts, and certain Asian funds, publish NAVs with a reporting delay.
Under the current behaviour, PP frequently reports a daily change of 0.00% despite the publication of a new NAV showing a genuine price movement.
This can lead users to conclude that the fund price has not changed when, in reality, the latest published valuation shows a gain or loss.
Technical Analysis
After investigating the source code, the issue appears to originate from the quote-change calculation in SecuritiesTable.
The calculation currently resolves prices using:
SecurityPrice latest = security.getSecurityPrice(interval.getEnd());
SecurityPrice previous = security.getSecurityPrice(interval.getStart());
Because Security.getSecurityPrice() performs a backward lookup, both calls can resolve to the same underlying NAV record when a fund reports prices with a delay.
Example:
Latest published NAV:
29-May = 2.1854
Previous published NAV:
22-May = 2.1112
For a 1-day reporting period:
latest = getSecurityPrice(30-May)
previous = getSecurityPrice(29-May)
Both calls resolve to the 29-May NAV:
latest -> 29-May NAV
previous -> 29-May NAV
Result:
2.1854 / 2.1854 - 1 = 0.00%
This explains why the displayed daily change is frequently 0.00% for delayed-NAV funds.
Weekly and longer intervals often appear correct because the interval start date resolves to an earlier published NAV.
Additional Context
I initially highlighted this issue on PPs forum (https://forum.portfolio-performance.info/t/at-times-the-change-in-price-of-funds-can-be-incorrect/37726)
During testing I observed that weekly performance calculations appear correct, while the issue specifically affects the displayed daily price change for delayed-NAV funds.
The problem therefore appears to be related to how the daily change is derived rather than the availability of historical quotes.
To Reproduce
- Add a mutual fund whose NAV is published with a reporting delay (daily in arrears, two-day delay, or weekly). Any of the mutual funds listed above would be suitable.
- Update quotes.
- Wait for a newly published NAV that differs from the previous NAV.
- View the security in Portfolio Performance.
Expected behaviour
The daily price change should reflect the movement represented by the most recently published NAV.
For example:
Previous NAV = 2.1112
Latest NAV = 2.1854
Expected Daily Change = +3.51%
rather than:
0.00%
Screenshots
Not felt to be needed.
Desktop (please complete the following information):
- OS: Windows
- Version 8.40.0
Describe the bug
Portfolio Performance displays a daily price change of 0.00% for certain mutual funds whose NAVs are published with a reporting delay.
Although a new NAV has been published and the fund value has changed, PP reports no daily movement.
This differs from the behaviour of major fund-data providers (e.g. Financial Times and Morningstar) and can result in misleading information being presented to users.
``
Observed Behaviour
PP reports '1 Day Change' = 0.00% even though a new NAV has been published and the latest NAV differs from the previous published NAV.
The issue affects multiple funds from different providers and is not limited to a single security.
Why This Is Problematic
Many mutual funds, particularly UK OEICs, unit trusts, and certain Asian funds, publish NAVs with a reporting delay.
Under the current behaviour, PP frequently reports a daily change of 0.00% despite the publication of a new NAV showing a genuine price movement.
This can lead users to conclude that the fund price has not changed when, in reality, the latest published valuation shows a gain or loss.
Technical Analysis
After investigating the source code, the issue appears to originate from the quote-change calculation in SecuritiesTable.
The calculation currently resolves prices using:
SecurityPrice latest = security.getSecurityPrice(interval.getEnd());
SecurityPrice previous = security.getSecurityPrice(interval.getStart());
Because Security.getSecurityPrice() performs a backward lookup, both calls can resolve to the same underlying NAV record when a fund reports prices with a delay.
Example:
Latest published NAV:
29-May = 2.1854
Previous published NAV:
22-May = 2.1112
For a 1-day reporting period:
latest = getSecurityPrice(30-May)
previous = getSecurityPrice(29-May)
Both calls resolve to the 29-May NAV:
latest -> 29-May NAV
previous -> 29-May NAV
Result:
2.1854 / 2.1854 - 1 = 0.00%
This explains why the displayed daily change is frequently 0.00% for delayed-NAV funds.
Weekly and longer intervals often appear correct because the interval start date resolves to an earlier published NAV.
Additional Context
I initially highlighted this issue on PPs forum (https://forum.portfolio-performance.info/t/at-times-the-change-in-price-of-funds-can-be-incorrect/37726)
During testing I observed that weekly performance calculations appear correct, while the issue specifically affects the displayed daily price change for delayed-NAV funds.
The problem therefore appears to be related to how the daily change is derived rather than the availability of historical quotes.
To Reproduce
Expected behaviour
The daily price change should reflect the movement represented by the most recently published NAV.
For example:
Previous NAV = 2.1112
Latest NAV = 2.1854
Expected Daily Change = +3.51%
rather than:
0.00%
Screenshots
Not felt to be needed.
Desktop (please complete the following information):