2016年3月12日 星期六

Finance - Ch1 金錢的時間價值 time value of money

 

介紹最基礎的金錢時間價值和折現,作為踏入金融領域的第一課,搭配一些數學觀念做整合。金錢的時間價值觀念非常重要,撇去惱人的計算變化,幾乎可以說對這個道理熟悉就一通百通 : D

2016.3.12 新增現值計算相關演算法



一、金錢的時間價值 (time value of money, TVM)


金錢的時間價值是金融的最基礎且最重要的概念。金錢具有時間價值,是基於人們希望現在而不是未來取得金錢,因而當金錢用於存款或投資時,理應獲得利息,因此,金錢的未來終值 (future value)應大於現值 (present value)

這套模式牽涉到經濟學很重要的觀念:『機會成本』。例如,如果有機會在「今天得到一百元」和「一年後得到一百元」之間選擇,實際利率為正,除時間外兩者條件完全相同,那麼一個理性人毫無疑問將會選擇「今天得到一百元」。這類現象被經濟學家稱為時間偏好,因為持有人可以將錢存入銀行或通過其他安全的投資途徑來產生收益。

金錢不會自動隨時間而增值,金錢的時間價值經過實際的投資才能實現。 Irving Fisher 的利息論則認為,利息是由不耐 (impatience) 及投資機會 (opportunity to invest) 產生。人們希望現在而不是未來取得金錢,是時間價值本身推動勞動,並以勞動實現時間價值。

經濟學家經常使用貼現值來計算和表示將來的1塊錢和現在的1塊錢之間的差異。用於計算貼值的是近似於銀行利率的貼現率。如果貼現率是5%,那麼就意味著1年以後的105元相當於現在的100元,或者說,1年以後的100元只相當於現在的95.24元。




二、現值與折現  Present Value and Discounting


1. 終值 future value : 錢財在給定期間投資後的價值,即為未來值。

2. 現值 present value : 在給定利率的狀況下,未來錢財折算到現在的價值,即為現在價值。




3. 累積 capitalization : 計算現時金錢未來價值過程稱為累積。例如,今天的100元五年後價值幾何。由於複利計算(Compounding),即使沒有通脹,$100 的現值要高於它的終值。終值會受(1) 現在金額,(2)利率和(3)年期的長短影響。任何一樣愈大,得出的將來值也愈大。
$\mathrm{FV} = PV \times (1+R)^n$


4. 折現 Discounting : 是在給定的利率水平下,未來的資金計算到現在時刻的價值,是資金時間價值的逆過程。將將來值轉為現在值的計算稱為「折現」(discounting),折算的利率稱為折現率(discount rate)
$\mathrm{PV} = \frac{FV}{(1+R)^n} $


例如,從此時算起的第一年內的利率為$i_1$,第二年內利率為 $i_2$,那麼兩年後貨幣單位的現值表達為:

$\mathrm{PV} = \frac{FV}{(1+R_1)(1+R_2)} $

終值公式提供四個重要變數 (現值、終值、利率、幾年) 的關係如下 :



5. 連續複利 Continuous compounding : 連續復利則是指在期數趨於無限大的極限情況下得到的利率,此時不同期之間的間隔很短,可以看作是無窮小量。



6. 有效年利率 Effective Annual Rate, EAR:有效年利率指在按照給定的計息期利率和每年複利次數計算利息時,能夠產生相同結果的每年複利一次的年利率。

$\$V(1+\frac{R}{m})^{m \times n} = \$V (1+EAR)^n$
$EAR = (1 + \frac{r}{m})^m − 1$

其中,$EAR$ 為有效年利率,$r$ 為名義利率,$m$ 為一年內計息次數。

而在連續複利下的有效年利率 :

$\$Ve^{R \times n} = \$V(1 + EAR)^n$
$EAR = e^R - 1$


[用心去感覺] 利率與摺積(Convolution)


現值具有可加性。一組現金流總的現值即等於單筆資金的現值之總和。

實際上,利率恆定的一組現金流的現值與變換變量的拉普拉斯變換 (Laplace transform) 在數學上是等價的。若現金流的發生時間是離散的,應該用各自現值的和代替變換中的積分;若現金流在一段時間內是幾乎持續發生的,則其現值可近似看作某個連續函數的拉普拉斯變換。

$F(s) = \int_0^\infty f(t) e^{-st}\,dt.$

拉普拉斯變換提供另一種系統的描述方程,可以簡化分析系統行為的時間。像時域下的線性非時變系統,在頻域下會轉換為代數方程,在時域下的捲積會變成頻域下的乘法。


[用心去感覺] 歐拉數e的指數函數


設 1 份借貸有 $x$ 利率,逐月複利話,則每月增加當前值的 $x/12$ 倍,每月總值都要乘以 $(1+x/12)$,一年的總值為 $(1+x/12)^{12}$,逐日複利的話,就是 $(1+x/365)^{365}$。設年中時段數可為無限,則有如下最初由歐拉提出的指數函數定義:

$\exp(x) = \lim_{n\to\infty}\left(1 + \frac{x}{n}\right)^{n}$

指數函數 $e^x$可以用各種等價的方式定義。
特別是它可以定義為冪級數:

$e^x = \sum_{n = 0}^{\infty} {x^n \over n!} = 1 + x + {x^2 \over 2!} + {x^3 \over 3!} + {x^4 \over 4!} + \cdots$

或序列的極限:

$e^x = \lim_{n \to \infty} \left( 1 + {x \over n} \right)^n.$




三、現值計算相關演算法



1. Horner's Rule


須時$O(n)$ (暴力解是$O(n^2)$),被證明是花費最少操作子的現值算法。

#include <iostream>
#include <vector>
#include <math.h>
using namespace std;

int main() {
 int n; double r, x = 0;
 vector<double> cashFlow;
 double singleCash;

 cout<<"[n years][r interestRate][cashFlow..]"<<endl;
 cin>>n>>r;
 
 cashFlow.resize(n);
 for(int i=0; i<n; i++){
  cin>>singleCash;
  cashFlow[i] = singleCash;
 }
 
 for(int i=n-1; i>=0; i--)
  x = (x + cashFlow[i]) / (1+r);

 cout<<"The Target PV is.."<<endl;
 cout<<x<<endl;
 
 return 0;
}





References


Interest, Capital & Wealth
http://www.econman.net/A-level/Capital/Discounting.htm

wiki - 現值
https://zh.wikipedia.org/wiki/%E7%8F%BE%E5%80%BC

學習手記 - 財務管理第二章之討論提綱
http://shawntangks.blogspot.tw/2014/09/blog-post.html

有效年利率(Effective Annual Rate,EAR)
http://wiki.mbalib.com/zh-tw/%E6%9C%89%E6%95%88%E5%B9%B4%E5%88%A9%E7%8E%87






技術提供:Blogger.