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