Skip to content

Instantly share code, notes, and snippets.

@fortable1999
Last active April 2, 2019 03:00
Show Gist options
  • Save fortable1999/a3513066765714fe5331acfb64483cc9 to your computer and use it in GitHub Desktop.
Save fortable1999/a3513066765714fe5331acfb64483cc9 to your computer and use it in GitHub Desktop.
ROI simulator
####
# INPUT
####
# interest rate
IR = 0.029
# Durable life
# Wood: 22, light steel: 27, heave steel: 34, RC: 47
DL = 27
# Age
A = 2
# Equity Rate
ER = 0.3
# Property Asset
ASSET = 23600
# Buy fee rate
BUY_FEE_RATE = 0.06
# INVESTMENT
INVESTMENT = ASSET * (BUY_FEE_RATE + ER)
# Sell rate
SELL_RATE = 1.0
# Sell fee rate
SELL_FEE_RATE = 0.03
# loan break fee rate
LOAN_BREAK_FEE_RATE = 0.015
# ROA
ROA = 0.058
# Building Price Rate
BPR = 0.3
# Running Cost Rate
RCR = 0.15
# TAX Rate
TAX_RATE = 0.37
# loan months
MONTHS = 360
####
# INPUT END
####
# Pricipal on loan
PRINCIPAL = ASSET * (1 - ER)
# Return On Asset
INCOME = ASSET * ROA
INCOME_DECREATE_RATE = 0.01
RUNNING_COST = INCOME * RCR
# monthly interest
MI = IR / 12.
# Monthly Return On Loan
MROL = PRINCIPAL * (MI * (1+MI) ** MONTHS / ((1+MI) ** MONTHS - 1))
# Return On Loan
ROL = MROL * 12
# Return On Loan Rate
ROLR = ROL / INCOME
# CFROI
# CFROI = CF / ((ER + 0.06) * ASSET)
# Depreciation
# Depreciation years
DY = (A > DL) and int(0.2 * DL) or int(DL - A + A * 0.2)
DEPRECIATION = ASSET * BPR * (1. / DY)
# ROI
# 5 years pricipal left
next_principal = lambda p: p - (MROL - p * MI)
CF_TOTAL = 0
p0 = PRINCIPAL
for y in range(int(MONTHS/12)):
p = p0
for i in range(12):
p = next_principal(p)
INT = ROL - ( p0 - p)
p0 = p
CURRENT_INCOME = INCOME * ((1 - INCOME_DECREATE_RATE) ** y)
TAXING_INCOME = CURRENT_INCOME - RUNNING_COST - INT - (y > DY and 0.1 or DEPRECIATION)
print("---- year %d ---" % (y + 1))
TAX = TAXING_INCOME * TAX_RATE
CF_TAXED = CURRENT_INCOME - RUNNING_COST - ROL - TAX
CF_TOTAL += CF_TAXED
# NAV
SELL_PROFITS = SELL_RATE * ASSET - (ASSET - (y > DY and DY or y) * DEPRECIATION)
SELL_TAX = SELL_PROFITS * TAX_RATE
SELL_FEE = ASSET * SELL_RATE * SELL_FEE_RATE
LOAN_BREAK_FEE = p0 * LOAN_BREAK_FEE_RATE + 6
NAV = CF_TOTAL + SELL_RATE * ASSET - SELL_TAX - SELL_FEE - LOAN_BREAK_FEE - ASSET * (BUY_FEE_RATE) - p0
print("CF_TAXED", CURRENT_INCOME, RUNNING_COST, ROL, TAX, CF_TAXED)
print('NAV', NAV, (NAV-INVESTMENT) / INVESTMENT)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment