Everybody quotes current yield — annual dividend ÷ today's price. It's the headline number. It's also the wrong number to watch once you actually own a position and reinvest. The number reinvestment grows is yield on cost: annual dividend ÷ what you originally paid.
A DRIP calculator makes this visible in a way a brokerage statement doesn't. The engine is the same open-source library, dividend-math.
What reinvestment actually does
dripCalculator simulates a dividend reinvestment plan year by year: dividends computed at the current yield on the current share count, reinvested into more shares at the current price, with both price and dividend growing each year.
import { dripCalculator } from 'dividend-math';
const r = dripCalculator({
initialInvestment: 10000,
price: 80,
dividendYieldPct: 3.5,
dividendGrowthPct: 10,
priceGrowthPct: 7,
monthlyContribution: 100,
years: 20,
});
// The number nobody quotes: yield on cost
const yieldOnCost = (r.finalAnnualDividendIncome / r.totalInvested) * 100;
The interesting move is that last line. totalInvested is what you actually put in (initial + contributions). finalAnnualDividendIncome is what the position throws off per year at the end. Divide them and you get the yield on your original dollars — and after 15–20 years of dividend growth plus reinvestment, that number regularly runs two to three times the starting yield.
Why it climbs
Two forces, both quiet:
- The dividend grows. A 3.5% payer raising its dividend ~10%/yr nearly triples the per-share dividend in a decade.
- Reinvestment buys more shares at prevailing prices, and those shares then pay the (growing) dividend too.
Current yield can stay flat the whole time — the price rises alongside the dividend — while yield on cost keeps climbing, because the denominator is your historical cost, not today's price. That's the real return a long-term DRIP creates, and it's invisible if you only look at current yield.
The edge case worth getting right
Cumulative dividends over N years are a geometric series: D + D(1+g) + D(1+g)² + …. When g = 0 it collapses to D × N; when g > 0 it's the closed-form (D·((1+g)ᴺ−1))/g. The g = 0 branch has to be handled separately — divide by zero otherwise. It's the kind of thing that's easy to get subtly wrong, which is why every formula in the library is a pure function covered by unit tests. Same dripCalculator drives the DRIP, SCHD, QQQI, and monthly pages on dividendpayoutcalculator.com — one implementation, no drift.
Run it
- Live DRIP / dividend reinvestment calculator: year-by-year table + chart, no sign-up.
-
Library (npm):
npm install dividend-math - Source: github.com/a353551071/dividend-math (MIT)
Math/engineering post, not financial advice. Past dividend growth doesn't guarantee future growth; model scenarios, don't pick tickers.
How do you track yield on cost in your own portfolio — spreadsheet column, or do you let the broker's cost basis do the work? Always felt like a metric more people should watch.
Top comments (0)