JSFiddle - React, Tailwind, and code Playground
Mortgage vs Rent - Retirement Savings
by skibulk
JavaScript
console.clear();
// Monthly Allowance: 2K
// 3.375% Mortgage Interest
// Mortgage cost + $250 taxes & upkeep / month
console.log("150K House, 30+8K Down, 2K Stocks Down, 8% Stock Returns", simulate(12 * 30, 1220, 2000, 1.08, 780, 1, 150000));
console.log("150K House, 30+8K Down, 2K Stocks Down, 5% Stock Returns", simulate(12 * 30, 1220, 2000, 1.05, 780, 1, 150000));
// 4% Mortgage Interest
// Mortgage cost + $250 taxes & upkeep / month
console.log("150K House, 30+5K Down, 5K Stocks Down, 8% Stock Returns", simulate(12 * 30, 1180, 5000, 1.08, 820, 1, 150000));
console.log("150K House, 30+5K Down, 5K Stocks Down, 5% Stock Returns", simulate(12 * 30, 1180, 5000, 1.05, 820, 1, 150000));
// 3% Rent Inflation
// Average cost to rent single appt in Endicott = 750/mo
console.log("Rent, 40K Stocks Down, 8% Stock Returns", simulate(12 * 30, 1250, 40000, 1.08, 750, 1.03, 0));
console.log("Rent, 40K Stocks Down, 5% Stock Returns", simulate(12 * 30, 1250, 40000, 1.05, 750, 1.03, 0));
function simulate(months, stocks, startingStocks, annualStocksReturnRate, housing, annualHousingInflationRate, finalPropertyValue) {
// Starting Amount
var totalStocks = startingStocks;
var monthlyStocksReturnRate = Math.pow(annualStocksReturnRate, 1 / 12);
var monthlyRentInflationRate = Math.pow(annualHousingInflationRate, 1 / 12);
for (var i = 0; i < months; i++) {
// Monthly Expense
totalStocks += stocks;
//console.log(totalStocks, totalHousing);
// Monthly Returns
totalStocks *= monthlyStocksReturnRate;
// Adjust for Rent / Home Inflation
if (monthlyRentInflationRate > 1) {
var change = housing * (monthlyRentInflationRate - 1);
stocks -= change;
housing += change;
}
}
return Math.round(totalStocks) + finalPropertyValue;
}