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;
}