Index fund calculator — methodology
The four rates between an index and a pot, why they compose multiplicatively, why a price index is not what a fund tracks, and why the tracking gap is not the ongoing charge.
This calculator turns an index return into a pot. It applies no tax of any kind, uses no rate, threshold or allowance published by government, and therefore has no gov.uk sources to cite and no verification stamp to carry. It has no market data either — the index return is yours to supply, and the reason is in the last section.
This page carries no “verified against HMRC guidance” stamp, and it should not. There are no tax rates, thresholds or allowances in this calculator — nothing published by government goes into it. The only claim it makes is an arithmetic one: given the numbers you entered and the conventions stated on the page, the schedule is what those inputs compound to. That is checkable, and the year-by-year table is there so you can check it.
A fixed-rate projection is not a forecast. Nothing grows at the same rate every year. Real returns arrive in an order, and the order matters — the same average return produces different outcomes depending on when the good and bad years fall, especially once money is being withdrawn. Treat the output as what a constant rate would have produced, which is a useful way to compare two contribution plans and a poor way to predict a balance.
Four rates, composed in order
total return = (1 + index level return) × (1 + dividend yield) − 1
after the gap = (1 + total return) × (1 − tracking gap) − 1
delivered = (1 + after the gap) × (1 − ongoing charge) − 1
platform fee is not a rate: it is deducted from the potEvery step is a multiplication, never an addition. A 7% index paying 2% returned 9.14%, not 9% — the missing 0.14 points are the dividend earned on the year’s own capital growth, which looks like nothing in one year and is compounded by a projection for the whole term. It is the same rule the projection engine applies to the ongoing charge, where the additive shortcut was measured to overstate a pot by around 2% over forty years.
The last of the three is applied by the engine, not by the page. The delivered rate the calculator displays is conventions.netAnnualGrowthRate — the engine’s own report of what it compounded at — rather than a fourth composition performed alongside it. Two implementations of one number agree until the day one of them changes.
A price index is not what a fund tracks
The level of an index is the price of its constituents. It excludes the dividends those companies pay. A fund holds the shares, receives the dividends, and therefore tracks the total return version of the same index — a different series, higher by roughly the yield every year.
Almost every index figure quoted in the press, and almost every chart, is the level. Comparing a statement against it is the single most common way to conclude that a tracker is underperforming when it is not, and the gap is larger than everything the fund charges. The calculator asks which kind of figure you have rather than assuming, and on the total-return basis the yield is ignored entirely rather than added to a figure that already contains it.
The tracking gap is not the ongoing charge
The industry’s published tracking difference is the fund’s return less the index’s, and it already contains the ongoing charge. If this calculator took that figure and also applied the charge, it would count the charge twice.
So the box on the calculator is what remains after the ongoing charge is accounted for: sampling rather than full replication, cash waiting to be invested, the fund’s own transaction costs, less securities-lending revenue and any advantage in how dividends are taxed at source. Those pull in both directions, which is why the field is signed and why a negative value — a fund beating its index net of its own charge — is neither an error nor a rarity.
It is composed into the growth rate rather than passed to the engine as a fee for exactly that reason: a fee cannot be negative, correctly, because a fund cannot pay you to hold it.
Why the platform fee changes no rate
A fund’s ongoing charge is levied inside the fund before the unit price is struck, so it reaches an investor as a smaller return. A platform fee is charged on the value the provider holds and deducted from the pot, so it changes how much money there is rather than how fast it grows. Two charges of the same percentage, two different mechanisms, two different places to find them — the first inside the growth column of the schedule, the second in the fee column beside it.
The chain on the calculator shows the last two rows sharing a rate for that reason. Inventing an equivalent percentage for the platform fee would collapse a distinction this site is built on. The investment fee calculator takes the charge types apart in detail.
The composed rate is always inside the engine’s domain
A projection rejects an annual rate of exactly −100% or below: 1 + r is then zero or negative and a fractional power of a negative number is not a number. Composing several rates is precisely where a page can reach that by accident, and another calculator on this site records the near miss.
index return ∈ [−99, 100]% → 1 + r ∈ [0.01, 2.00]
dividend yield ∈ [0, 15]% → 1 + y ∈ [1.00, 1.15]
tracking gap ∈ [−5, 5]% → 1 − g ∈ [0.95, 1.05]
ongoing charge ∈ [0, 5]% → 1 − ocf ∈ [0.95, 1.00]Every factor is strictly positive at every corner of every bound, so their product is strictly positive and the composed rate is strictly above −100%. That is an arithmetic argument rather than a sampled range, which matters: a grid search can only ever fail to find a failure. A guard stands behind it at the point the page hands the rate over, so that widening a bound in future produces a message naming the field rather than a silent failure inside a projection.
Rounding, and why the table adds up
Every figure is rounded to whole pence at each period boundary, so each row satisfies opening + paid in + growth − platform fee = closing exactly rather than approximately. The price is a drift of a pound or two against the textbook formula over a long schedule, which is a much smaller problem than a table a reader can catch out — and a trivial one against a rate that is an assumption to begin with.
Why there is no historical return in this calculator
Because this site has no market data source, and a figure it invented would be worse than a box it asks you to fill in. A calculator that quotes “the index has returned x% a year since 19xx” is making a factual claim about the past which the reader cannot check and which depends entirely on the start date, the end date, the currency, and whether dividends were counted — four choices that between them move the answer by several percentage points a year.
So the rate is an input with a stated meaning, and the page’s work is everything that happens to it afterwards. The S&P 500 calculator makes the same refusal explicitly and answers the inverse question instead.
What it does not model
- Currency. A sterling investor in a fund tracking an index priced in another currency is exposed to the exchange rate as well as to the index. The S&P 500 calculator models that.
- Dealing charges. Regular investing into a fund is often free of them; an exchange-traded fund is a different case, and the ETF calculator prices a per-order commission.
- Tax of any kind, including the dividend tax on income from a holding outside an ISA. The stocks and shares ISA calculator prices it against figures that carry a verification stamp.
- Rates that change. One index return, one yield, one gap, one charge, every period. Real ones move, and a tracking gap in particular varies year to year.
- Sequence of returns. The order returns arrive in changes the outcome, and a constant rate has no order.