A Dividend Reinvestment Plan, commonly known as a DRIP, is an investment strategy where the cash dividends paid by a company are automatically used to purchase additional shares of that company's stock. This creates a powerful compounding effect, as you earn dividends on your original shares and on every subsequent share purchased with those dividends.
The Power of Compounding with DRIP
When you reinvest dividends, your portfolio grows geometrically rather than linearly. Over long periods, the reinvested dividends often contribute more to the total return of a portfolio than the price appreciation of the stock itself. This calculator helps you visualize how even small dividend yields, when paired with regular contributions and time, can result in significant wealth accumulation.
How to Use This Calculator
Initial Investment: The starting amount of capital you put into the stock or fund.
Annual Contribution: Any additional money you plan to add to the investment each year.
Dividend Yield: The annual percentage of the stock price paid out in dividends.
Stock Appreciation: The expected annual percentage increase in the share price.
Dividend Frequency: How often the dividend is paid (most U.S. stocks pay Quarterly).
Calculation Example
Suppose you start with $10,000 in a stock with a 4% dividend yield and a 5% annual price appreciation. If you reinvest those dividends over 20 years without adding any extra cash, your portfolio would grow to approximately $56,044. If you added just $100 a month ($1,200/year), that total would jump to over $111,000. This demonstrates the "double compounding" effect of price growth and share accumulation.
Frequently Asked Questions
Are dividends taxed if I reinvest them? In most taxable brokerage accounts, reinvested dividends are still considered taxable income in the year they are received. However, if held within an IRA or 401(k), the taxes are deferred or eliminated.
What is the difference between Yield and Yield on Cost? Current Yield is the dividend divided by the current price. Yield on Cost is the dividend divided by your original purchase price. As companies raise dividends over time, your Yield on Cost can often reach 10% or 20% even if the market yield stays at 3%.
function calculateDRIP() {
var initial = parseFloat(document.getElementById("initialInvestment").value);
var annualContrib = parseFloat(document.getElementById("annualContribution").value);
var yieldPct = parseFloat(document.getElementById("dividendYield").value) / 100;
var growthPct = parseFloat(document.getElementById("stockAppreciation").value) / 100;
var years = parseInt(document.getElementById("years").value);
var freq = parseInt(document.getElementById("frequency").value);
if (isNaN(initial) || isNaN(yieldPct) || isNaN(years)) {
alert("Please enter valid numerical values.");
return;
}
var totalMonths = years * 12;
var currentBalance = initial;
var totalInvested = initial;
var totalDividendsEarned = 0;
// Monthly growth rates
var monthlyGrowthRate = Math.pow(1 + growthPct, 1/12) – 1;
var monthlyContribution = annualContrib / 12;
var periodsPerYear = freq;
var monthsBetweenDividends = 12 / freq;
for (var m = 1; m <= totalMonths; m++) {
// 1. Add Monthly Contribution
currentBalance += monthlyContribution;
totalInvested += monthlyContribution;
// 2. Apply Capital Appreciation (Stock Price Growth)
currentBalance *= (1 + monthlyGrowthRate);
// 3. Apply Dividends if it's the right month
if (m % monthsBetweenDividends === 0) {
var dividendAmount = currentBalance * (yieldPct / periodsPerYear);
currentBalance += dividendAmount;
totalDividendsEarned += dividendAmount;
}
}
var totalGain = currentBalance – totalInvested – totalDividendsEarned;
document.getElementById("endBalance").innerText = "$" + currentBalance.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("totalPrincipal").innerText = "$" + totalInvested.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("totalDivs").innerText = "$" + totalDividendsEarned.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("totalGain").innerText = "$" + totalGain.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("resultArea").style.display = "block";
}