A Dividend Reinvestment Plan (DRIP) is one of the most powerful tools in an investor's arsenal. By automatically using your cash dividends to purchase additional shares of the underlying stock, you benefit from "compounding on steroids." Not only does your initial investment grow, but the dividends themselves start earning their own dividends.
The Power of Compound Dividends
When you reinvest dividends, you increase your share count without reaching back into your pocket for more capital. Over long periods—such as 10, 20, or 30 years—this process creates an exponential growth curve. This calculator allows you to visualize how share price appreciation and consistent dividend payments work together to grow your portfolio.
Key Factors in Your DRIP Strategy
Dividend Yield: The percentage of the stock price paid out in dividends annually. Higher yields mean faster share accumulation, but sustainability is key.
Price Appreciation: While dividends provide income, the growth of the stock price itself significantly impacts the final value of your reinvested shares.
Frequency: Monthly or quarterly compounding happens faster than annual compounding. Most blue-chip stocks pay quarterly.
Time Horizon: DRIP strategies thrive over decades. The longer you hold, the more the "snowball effect" takes over.
Real-World Example
If you start with 100 shares of a $50 stock (a $5,000 investment) that has a 4% yield and 5% annual price growth, after 20 years of quarterly reinvestment, your share count would nearly double without you ever spending another dime. By the end of the period, your annual dividend income alone could be more than your original annual yield, thanks to the increased share count.
function calculateDRIP() {
var initialShares = parseFloat(document.getElementById("initialShares").value);
var sharePrice = parseFloat(document.getElementById("sharePrice").value);
var divYield = parseFloat(document.getElementById("dividendYield").value) / 100;
var appreciation = parseFloat(document.getElementById("priceAppreciation").value) / 100;
var years = parseInt(document.getElementById("yearsToHold").value);
var freq = parseInt(document.getElementById("distributionFreq").value);
if (isNaN(initialShares) || isNaN(sharePrice) || isNaN(divYield) || isNaN(appreciation) || isNaN(years)) {
alert("Please enter valid numbers in all fields.");
return;
}
var totalShares = initialShares;
var currentPrice = sharePrice;
var totalDivsEarned = 0;
var totalPeriods = years * freq;
var periodicYield = divYield / freq;
var periodicAppreciation = Math.pow(1 + appreciation, 1 / freq) – 1;
for (var i = 0; i < totalPeriods; i++) {
// Calculate dividend for the period
var dividendAmount = totalShares * currentPrice * periodicYield;
totalDivsEarned += dividendAmount;
// Stock price appreciates
currentPrice = currentPrice * (1 + periodicAppreciation);
// Reinvest dividends to buy new shares at the current price
var newShares = dividendAmount / currentPrice;
totalShares += newShares;
}
var finalValue = totalShares * currentPrice;
var finalAnnualIncome = (totalShares * currentPrice) * divYield;
document.getElementById("totalBalance").innerHTML = "$" + finalValue.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("totalSharesResult").innerHTML = totalShares.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("finalAnnualIncome").innerHTML = "$" + finalAnnualIncome.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("totalDividends").innerHTML = "$" + totalDivsEarned.toLocaleString(undefined, {minimumFractionDigits: 2, maximumFractionDigits: 2});
document.getElementById("dripResult").style.display = "block";
}