擅长:python、mysql、java
<p>如果你真的只想计算净现值(=现金流和贴现因子向量的内积)和内部收益率(=对一个变量的简单迭代根搜索),那么你就可以对其进行编码。</p>
<p>我使用的<a href="http://www.r-project.org" rel="nofollow noreferrer">R</a>比Python多得多,所以这里有一个R解决方案:</p>
<pre><code>R> data <- data.frame(CF=c(rep(2,5), 102), df=1.01^(-(1:6)))
R> data
CF df
1 2 0.9901
2 2 0.9803
3 2 0.9706
4 2 0.9610
5 2 0.9515
6 102 0.9420
R> NPV <- sum(data[,1] * data[,2])
R> print(NPV)
[1] 105.8
R>
</code></pre>
<p>这就建立了现金流和贴现因子的两列数据结构,并将净现值计算为产品的总和。因此(简单化)6年期债券的票面利率为2%,收益率曲线为1%,价值为105.80英镑。</p>
<p>对于内部收益率,我们做的差不多相同,但使净现值成为利率的函数:</p>
<pre><code>R> irrSearch <- function(rate) { data <- data.frame(CF=c(rep(2,5), 102),
df=(1+rate/100)^(-(1:6)));
100 - sum(data[,1] * data[,2]) }
R> uniroot( irrSearch, c(0.01,5) )
R> irr <- uniroot( irrSearch, c(0.01,5) )
R> irr$root
[1] 2
R>
</code></pre>
<p>所以在平曲线世界中寻找2%债券内部收益率的“根”是。。。不出所料的是2%。</p>