Property Investment Calculator Pro
Model income, growth, finance and occupancy risk.
Year 1 Income
Monthly Income
Annual Mortgage Cost
0
? ((effectiveIncome-mortgage)/cashInvested)*100
: 0;
let cumulative=0;
let labels=[];
let incomeSeries=[];
let wealthSeries=[];
let roiSeries=[];
cashflowBody.innerHTML="";
for(let y=1;y<=yearsVal;y++){
let income=
effectiveIncome*
Math.pow(
1+upliftVal/100,
y-1
);
cumulative+=income;
let propertyVal=
price*
Math.pow(
1+growthVal/100,
y
);
let annualROI=
cashInvested>0
incomeChart=new Chart(
document.getElementById('incomeChart'),
{
type:'line',
data:{
labels:labels,
datasets:[
{
label:'Annual Income',
data:incomeSeries,
borderWidth:3,
borderColor:'#0f6cbf',
backgroundColor:'#0f6cbf',
yAxisID:'y'
},
{
label:'ROI %',
data:roiSeries,
borderWidth:3,
borderColor:'#d4af37',
backgroundColor:'#d4af37',
yAxisID:'y1'
}
]
},
options:{
responsive:true,
maintainAspectRatio:false,
interaction:{
mode:'index',
intersect:false
},
scales:{
y:{
position:'left'
},
y1:{
position:'right',
grid:{
drawOnChartArea:false
}
}
}
}
}
);
if(wealthChart) wealthChart.destroy();
wealthChart=new Chart(
document.getElementById('wealthChart'),
{
type:'line',
data:{
labels:labels,
datasets:[
{
label:'Property Value Growth',
data:wealthSeries,
borderWidth:3,
borderColor:'#28a745',
backgroundColor:'#28a745'
}
]
},
options:{
responsive:true,
maintainAspectRatio:false
}
}
);
}
window.addEventListener("load",function(){
document
.querySelectorAll("#smCalc input,#smCalc select")
.forEach(function(el){
el.addEventListener("input",calculate);
el.addEventListener("change",calculate);
});
propertyType.addEventListener("change",function(){
if(this.value!=="custom"){
purchasePrice.value=this.value;
}
calculate();
});
setTimeout(calculate,500);
});