A Dividend Reinvestment Plan (DRIP) is a powerful strategy where investors automatically use their cash dividends to purchase additional shares of the underlying stock. This creates a powerful "compounding machine" where you earn dividends on your dividends.
How This Calculator Works
This calculator simulates the growth of your portfolio by calculating monthly compounding. It factors in your initial principal, monthly contributions, stock price appreciation, and dividend yields. Crucially, it also accounts for the tax drag on dividends if you are investing in a taxable brokerage account.
Key Metrics Explained
Annual Dividend Yield: The percentage of the stock price paid out in dividends annually.
Expected Annual Growth: The estimated percentage increase in the stock price itself.
Tax Drag: Even if you reinvest dividends, the government often taxes them in the year they are received. This calculator subtracts that tax before reinvesting the remainder.
The Power of Time: An Example
Imagine you start with $10,000 in a stock yielding 4% with a 5% annual price growth. If you contribute $500 per month, after 20 years, your portfolio could grow significantly. Without reinvesting, you only get the cash. By reinvesting (DRIP), your share count grows every quarter, leading to an exponential increase in total wealth.
Disclaimer: This calculator is for educational purposes only. Market returns are never guaranteed, and past performance does not indicate future results. Taxes vary by jurisdiction and individual circumstances.
function calculateDRIP() {
var initial = parseFloat(document.getElementById('startingAmount').value);
var monthly = parseFloat(document.getElementById('monthlyContribution').value);
var divYield = parseFloat(document.getElementById('dividendYield').value) / 100;
var growth = parseFloat(document.getElementById('stockGrowth').value) / 100;
var years = parseInt(document.getElementById('years').value);
var tax = parseFloat(document.getElementById('taxRate').value) / 100;
if (isNaN(initial) || isNaN(monthly) || isNaN(divYield) || isNaN(growth) || isNaN(years) || isNaN(tax)) {
alert("Please enter valid numeric values in all fields.");
return;
}
var totalMonths = years * 12;
var currentBalance = initial;
var totalDividends = 0;
var totalInvested = initial;
// Monthly rate approximations
var monthlyGrowthRate = Math.pow(1 + growth, 1/12) – 1;
var monthlyDivRate = divYield / 12;
for (var i = 1; i <= totalMonths; i++) {
// Calculate monthly dividend
var monthlyDiv = currentBalance * monthlyDivRate;
// Subtract tax
var afterTaxDiv = monthlyDiv * (1 – tax);
totalDividends += monthlyDiv;
// Add monthly contribution and reinvested dividend
currentBalance += afterTaxDiv + monthly;
totalInvested += monthly;
// Apply stock price growth
currentBalance *= (1 + monthlyGrowthRate);
}
// Final Annual Income calculation (based on end balance)
var finalAnnualIncome = currentBalance * divYield;
// Update DOM
document.getElementById('totalValue').innerText = '$' + currentBalance.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('annualIncome').innerText = '$' + finalAnnualIncome.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('totalInvested').innerText = '$' + totalInvested.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('totalDividends').innerText = '$' + totalDividends.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById('results-area').style.display = 'block';
// Smooth scroll to results
document.getElementById('results-area').scrollIntoView({ behavior: 'smooth', block: 'nearest' });
}