2018年9月28日 星期五

計算 IRR 的 Javascript 程式範例

投資專案初期投入資本 12369 圓, 之後持續兩期再投入相同資金 12369 圓, 最後一期將專案賣掉後, 收回資金 37739 圓, 而投資期間回收的各期利潤分別是:  194, 391, 594, 606, 618, 1378, 1379 圓, 試計算該專案的 IRR
// irr.js
maxrate = 100/100 //折扣率上限 100%
minrate = 0.0           //折扣率下限 
C0 = 12369     //初期成本
CT = [-C0, 194-C0, 391-C0, 594, 606, 618, 1378, 1379 + 37739] //現金流量矩陣(CFM)
k = 1000          //防止無限回圈計數器
while (k-- > 0) {
  IRR = (maxrate + minrate) / 2   //取折扣率上下限的中間值估算 IRR
  NPV = 0.0 //因 NPV 與 r 成反比關係, 為了讓 NPV 下降需提高 r, 反之使 NPV 上升則降低 r
  for (i in CT) NPV = NPV + CT[i]/((1+IRR)**i)  // 藉由累加 CFM, 計算 NPV
  if ( Math.abs(NPV) < 1e-6 || (maxrate - minrate) < 1e-6)  break;//上下限逼近時離開
  if( NPV > 0 ) minrate = IRR //為了讓 NPV 下降為零, 修正下限以提升 IRR 估算
  else  maxrate = IRR //為了讓 NPV 上升為零, 修正上限以降低 IRR 估算
}
console.log("投資成本=" + C0*3 + "\tNPV=" + NPV + "\tIRR: " + IRR*100 + "%");
執行 js irr.js 看輸出結果:
投資成本=37107    NPV=-0.08050183637533337    IRR:2.547025680541992%
上述 NPV 計算結果雖然不等於零, 但很接近零, 因此說該折扣率(discount rate)非常近似 IRR

沒有留言: