Dollar cost averaging calculator — methodology
How the two sides are built from the same money, why a constant-rate model can only ever favour the lump sum, and what the volatility argument is that this model cannot represent.
This calculator compares two ways of investing one sum of money over one term. 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. What it has instead is a stated method, a year-by-year table in which every row adds up, and an explicit account of the effect it cannot model.
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.
The two sides
total = instalment × instalments (exact: integer pence × a whole number)
all at once:
project(initialBalance = total, contribution = 0, years = term)
fed in:
phase = project(initialBalance = 0, contribution = instalment, years = window)
hold = project(initialBalance = phase.finalValue, contribution = 0, years = term − window)The lump sum is defined as the instalments added up rather than typed separately, because that is the only thing that makes the comparison mean anything: two boxes would let a reader compare £50,000 now against £100 a month and read the difference as an argument about timing.
The drip is two projections chained, with the second opening at the balance the first closed with — which is exactly what “and then leave it alone” means. The join falls on a year boundary, and that is what makes the chain exact rather than approximate: the platform fee’s annual accumulator resets at each year boundary anyway, so nothing has to be carried across the seam by hand. It is also why the phasing window is whole years — the projection refuses a part-year term, because a part-year would need a part-period and there is no honest way to apply a year’s charge to one.
Why the answer is not in doubt, and why that is a problem
Under a single fixed positive rate the lump sum wins, always. The gap is exactly the growth the not-yet-invested money did not earn, compounded to the end of the term. There is no input on this page at which a positive rate produces a different answer, because there is no mechanism in a constant-rate model that could produce one.
The reason people feed money in gradually is not in the model. It is about the spread of outcomes rather than the middle of it. Investing everything the week before a fall is materially worse than investing a twelfth of it and the rest at lower prices; investing everything the week before a rise is materially better. A projection with one path and no volatility has no representation of either. A calculator that runs this comparison, finds the lump sum ahead, and presents that as a finding has answered a question the reader did not ask while appearing to answer theirs.
This is stated on the calculator page itself, in the same block as the headline and at the same weight, rather than here. A limitation that determines the answer does not belong six sections below the answer.
The one part of the argument this model can carry
Run the identical comparison at a negative growth rate and the sign flips: the drip finishes ahead. That is a real property of the two cash-flow shapes rather than a concession — money held back is money not exposed to the fall — and it is measured by running the engine at eight rates rather than argued from a textbook.
It is also the honest form of the whole argument. Feeding money in is insurance. In the state of the world you were hoping for you pay the premium; in the one you were not, it pays out. “The lump sum wins on average” and “spread your purchases” are not in contradiction, and the ladder is what shows why.
The crossing does not fall exactly at zero growth. The charge is levied on the value held, and the lump sum holds more value throughout the window, so at a growth rate of nothing the drip is slightly ahead on charges alone. Where the crossing falls depends on the charge; the page reports what it measured and asserts no figure.
The cash ceiling
ceiling = project(initialBalance = total, contribution = 0,
rate = cash rate, years = window).finalValue − totalMoney waiting to be fed in earns interest and this model does not credit it, because a balance being spent down at an uneven rate is not a schedule the engine can produce and inventing one would be arithmetic on money performed outside it.
What can be established exactly is a bound. If the whole sum sat in cash for the whole window it would earn the figure above, and the truth is strictly less because the balance is falling to zero throughout — close to half of it on a level drip. The page therefore uses the ceiling in one direction only: when it is below the gap, cash interest cannot close the gap whatever the true figure is, and the question is settled. When it is above, nothing follows, and the page says that instead of printing a midpoint it does not have.
Conventions, stated rather than assumed
- Instalments land at the start of each period, which is what a standing order on payday is — and is the timing least favourable to this page’s headline, since it gives the drip one more period of growth than the alternative.
- The rate is effective, not nominal. The figure you type is the figure a year compounds to, which is what a fund’s quoted return and a savings account’s AER both are.
- The charge is deducted from the pot and divides nominally across the year’s periods, because a fee schedule is a tariff rather than a compounding return. It is visible in the fee column of both sides, which is how the comparison can show them paying different amounts of it.
- Every figure is whole pence at every period boundary, so each row satisfies
opening + paid in + growth − charges = closingexactly rather than approximately.
What it does not model
- Volatility, and therefore the case for the drip. Stated first because it is the one that decides the answer.
- Interest actually earned by waiting cash. Only a ceiling on it.
- Dealing charges on each purchase. A drip makes many more purchases than a lump sum, and where each one carries a commission that is a real cost weighing against it. The ETF calculator models a per-purchase charge.
- Tax of any kind, and no ISA or pension wrapper rules. Nor the practical point that an annual ISA allowance may make investing a large sum at once impossible inside a wrapper, which is a constraint rather than a preference.
- Fund ongoing charges separately from platform fees. One charge on the balance here; the investment fee calculator models the three kinds apart.