2013年6月11日 星期二

用 PHP 計算複利與年金終值

複利的威力連愛因斯坦都認為比原子彈還大, 說實在的, 我認為整個數學裡面就只有這個對人生最有用了 (以前學了一大堆高等微積分, 線性代數, 複變函數, 有鳥用?). 單純的複利是本金放進去後, 所得利息不領出來滾入本金繼續生息, 這就是複利的滾雪球效應. 但還有一個比複利的滾雪球效應還大的, 就是年金+複利, 也就是說不但不領息, 反而每年添柴火, 以後每年還另外再投入本金, 使得原始本金年年倍增, 產生的複利效應更大, 好比是滾雪球時, 每滾一圈又加入另一顆雪球, 滾到山腳下的時候, 會是怎樣? 很像原子彈的連鎖反應, 原子核被中子轟擊後, 釋放出更多中子, 這些中子又繼續轟擊其他原子核, ... 這就是為什麼愛因斯坦把複利拿來跟原子彈相提並論的緣故了. 為了對複利與年金有一個清楚的, 具體的數字概念, 我在網路上找到關於計算複利與年金的參考文章如下 :
  1. 年金終值表 &複利終值表 
  2. 什麼是年金 
  3. 1元的複利終值
我根據第三篇 "一元的複利終值" 計算式, 以 PHP 寫了一個可以產生終值表程式如下  :

複利與年金 : http://mybidrobot.allalla.com/jquerytest/compound_annuity.php [看原始碼]

我把這兩張表的一部分抓出來做個比較如下, 有沒有很驚訝, 如果現在 20 歲, 只要傻傻地利用年金法, 每年投資一萬元到殖利率 6% 的投資工具 (每個月 833 元), 40 年後退休時你就擁有 154 萬的退休金了, 總投入金額 40 萬元. 但如果投資標的殖利率提升到 15%, 那就非常不一樣了, 是將近 1800 萬! 也就是說, 殖利率增加為 2.5 倍 (15/6=2.5), 終值增加為 11.5 倍 (1779/154), 很恐怖吧!  可見年金法要發威的關鍵是在殖利率 (因為從公式可知, 終值是利率的指數啊), 殖利率越高, 要達到預定投資目標所需的時間就可以大幅縮短, 例如 15% 的殖利率, 投資 20 年為 102 萬, 就遠超過 6% 投資 30 年的 79 萬了. 更恐怖的是, 如果是 30% 以年金法每年 1 萬投資 40 年, 終值超過 12 億! 不過, 要每年穩定收益 30% 確實不容易啊!
另一方面, 增加本金也有不錯的滾雪球效果 (呈倍數增長, 不像殖利率是呈指數增長), 以保守的 6% 收益率來說, 以年金法每個月投資 1 萬元 (比每月 833 元增為 12 倍), 每年投資 12 萬,  40 年後退休時的終值是 12*154=1848 萬 (總投入成本 480 萬), 假定退休後還可活 20 年, 這樣的退休準備是每個月 7.7 萬的月退俸啊! (1848/240=7.7). 當然, 以現今的薪水倒退慘況, 每月投資 1 萬元可能不容易, 打對折吧, 每個月投資 5000 元, 每年為 6 萬元, 這樣 40 年後的終值也有 924 萬啊 (相當於 20 年月退俸 3.85 萬)! 請問哪一家公司可能給你 924 萬退休金? 同胞們, 醒醒吧, 要靠自己啊! 但是要特別注意喔, 雪球要滾得大有兩個要件, 第一是滾的方法要對, 也就是上面說的年金+殖利率, 第二是要找一個夠長的山坡, 說白點, 就是要趁早啦! 如果是像我 40 多歲, 滾 40 年, 難不成要 80 多歲退休? 所以 20 歲出頭就要開始囉!

一元複利終值
 年/利率6% 10%  15%30% 
 101.791 2.594 4.046 13.786 
 20 3.207 6.72716.367  190.05
ˇ30 5.743  17.449 66.212 2619.996
 4010.286  45.259 267.86436118.865 

一元年金終值
 年/利率6% 10%  15%30% 
 10 13.18115.937 20.304  42.619
 2036.786  57.275102.444 630.165 
 30 79.058 164.494434.745 8729.985 
 40154.762  442.593 1779.09120392.883

以收現金寡佔市場的電信三雄為例, 其過去十年來都能穩定配出平均 6% 以上的現金股息殖利率, 加上財務穩健, 所以我認為是不錯的投資標的 :


現金殖利率 %
公司  200320042005 2006 2007  20082009 2010 2011 2012 平均% 
 中華電8  7.7 7.45.8  6.16.5 6.1 5.7 5.9 5.7 6.49 
台灣大  7.3 7.98.4 6.8  4.88.8 8  5.35.3 5.2 6.78 
遠傳 4.3 7.7  8.37.9 7.1 7.7 6.9  5.34.5 4.9 6.46 

最後說明複利年金表產生程式, 此程式的核心是用兩層迴圈來產生終值表, 複利表與年金表程式結構完全一樣, 只有計算式不同而已, 最後會將終值表陣列組合成字串, 用來灌進 jQuery Datatables 外掛的 aaData 選項中呈現 :


//製作複利表
$r=Array(); //列陣列
$c=Array(); //行陣列
$title=Array();
for ($i=1; $i<=50; $i++) { //列=年
     $c[]=$i;
     for ($j=1; $j<=20; $j++) { //行=利息
          if ($i==1) {$title[]='{"sTitle":"'.$j.'%"}';} //製作標題
          $c[]=round(pow(1 + $j/100,$i),3); 
          } //end of for
     $r[]="[".join(",",$c)."]";
     $c=null; //歸零以免串接
     } //end of for
$sTitle=join(",",$title);
$compound="[".join(",",$r)."]";
//製作年金表
$r=Array(); //列陣列
$c=Array(); //行陣列
$title=Array();
for ($i=1; $i<=50; $i++) { //列=年
     $c[]=$i;
     for ($j=1; $j<=20; $j++) { //行=利息
          if ($i==1) {$title[]='{"sTitle":"'.$j.'%"}';} //製作標題
          $c[]=round((pow(1 + $j/100,$i)-1)/($j/100),3); 
          } //end of for
     $r[]="[".join(",",$c)."]";
     $c=null; //歸零以免串接
     } //end of for
$sTitle=join(",",$title);
$annuity="[".join(",",$r)."]";


沒有留言 :