## Parameters

### Important

• house price
• expected yearly house price increase
• expected rent increase
• expected return on down payment
• mortgage rate (we assume 25 years)
• down payment
• inflation rate

### Guessable from data

• fees (ground rent + house fees)
• stamp duty (0-7% of house price)

### Less important

• estate agent renting fees
• maintenance for flat
• security deposit for renting

Let's model the total amount of money spent at time t when buying

According to wikipedia :

Loan payment

The most typical loan payment type is the fully amortizing payment in which each monthly rate has the same value over time.

The fixed monthly payment P for a loan of L for n months and a monthly interest rate c is:

$P = L \cdot \frac{c\,(1 + c)^n}{(1 + c)^n - 1}$

The above calculates the future value FV of an investment whose present value is PV accruing interest at a fixed interest rate i for n periods.

$FV = PV ( 1+i )^n\,$



In :

house_price = 100e3
down_payment = 20e3
avg_house_price_increase = 0.03
avg_rent_increase = 0.01
investment_return = 0.02
mortgage_rate_apr = 5.00
mortgage_duration = 25 * 12
inflation_rate = 0.0025
stamp_duty = .05

maintenance = 83.33
utilities = 150
rent = 800
renting_deposit = rent * 2

simulation_duration = mortgage_duration




In :

%matplotlib inline
import matplotlib.pyplot as plt
import math

def mortgage_cost():
loan_amount = house_price - down_payment
#c = (math.pow(loan_apr, 1./12.)-1)
c = mortgage_rate_apr / 12. / 100.
monthly_payment = loan_amount * ((c * (1+c)**mortgage_duration) / ((1+c)**mortgage_duration - 1))
for i in range(mortgage_duration):
yield (down_payment + monthly_payment * i)

house_value = house_price
house_resell_value = 0
one_time_cost = stamp_duty * house_value
maintenance_per_month = maintenance
utilities_per_month = utilities
recurring_cost = 0
for i, month_cost in enumerate(mortgage_cost()):
house_resell_value += (1/float(mortgage_duration)) * house_value
house_resell_profit = house_resell_value - house_resell_value * stamp_duty
recurring_cost += maintenance_per_month + utilities_per_month
if i % 12 == 0 and i > 0:
house_value += house_value * avg_house_price_increase
maintenance_per_month += maintenance_per_month * inflation_rate
utilities_per_month += utilities_per_month * inflation_rate
yield - month_cost - one_time_cost - recurring_cost #+ house_resell_profit

def money_spent_renting(rent):
total_rent_cost = 0
for i in range(simulation_duration):
total_rent_cost += rent
if i % 12 == 0 and i > 0:
rent += rent * avg_rent_increase
yield total_rent_cost

def renting_model():
investment = down_payment - renting_deposit
utilities_per_month = utilities
utilities_cost = 0
for i, month_cost in enumerate(money_spent_renting(rent)):
utilities_cost += utilities_per_month
if i % 12 == 0 and i > 0:
investment += investment * investment_return
utilities_per_month += utilities_per_month * inflation_rate
yield - month_cost - utilities_cost + investment

plt.plot(range(simulation_duration), list(renting_model()), 'b')
plt.title("The model")




Out:

<matplotlib.text.Text at 0x7f9eac1ac390>




In :