13.4. 算法¶
13.4.1. 生成满足正态分布的N维度随机变量¶
13.4.1.1. 算法¶
设 \(N\) 维随机变量 \(Z\) 的每个分量是满足 \(\mu=0\) , \(\sigma=1\) 的独立正态分布随机变量. 则可以由 \(x=LZ+R\) , \(L=chol(\Sigma),\Sigma =LL^T\) 生成均值为 \(R\), 协方差矩阵为 \(\Sigma\) 的N维随机变量. 具体证明可以查看 ‘Numerical Recipes Chapter 7.4’. 这里chol为 Cholesky分解 .
PS: 这里需要注意的一个问题是生成的随机数列 \(Z\) 必须是独立的, 这是程序实现过程中很容易犯的一个错误.
13.4.1.2. C++程序实现¶
我利用C++11 的新特性 生成正态分布随机数列 . 为了使得所生成的 \(Z\) 相互独立, 我用 \(t F(n)\) 来做随机数生成器的种子. 这里 \(t\) 是一个和时间相关的整数, 而 \(F(n)\) 是 斐波那契数列(Fibonacci Number) . 显然, 为了每个种子不一样, \(F(n)\) 必须从 \(1,2,3,5..\) 开始, 而不是从 \(0\) 开始.
13.4.2. 各种统计量的计算方法¶
Monte Carlo模拟完成之后, 我们需要计算如下统计量:
其中前五项 a b c d e 都是常见统计量无需在这里赘述.
13.4.2.1. 基金优先份额 久期 分析¶
我们可以通过模拟永续分级基金优先份额现金流实现的金额与日期, 结合 Macaulay Duration , 与修正久期( Modified Duration )的定义, 得出其修正久期.
13.4.2.1.1. 麦考利久期¶
这里:
\(i\) 索引现金流,
\(PV_i\) 表示现金流现值( present value ),
\(t_i\) 表示现在起到付款日的时间,
\(V\) 是将来所有现金流的现值.
在第二个表达式中的分数部分 \(\frac{PV_i}{V}\) 全部相加等于 \(1.0\), 作为这个加权平均中的权重. 于是这整个表达式就是现金流的一个时间加权平均.
在实际计算中, 我们使用下面这个表达式:
这里:
\(i\) 索引现金流,
\(PV_i\) 表示第 \(i\) 次付款的现值,
\(CF_i\) 表示第 \(i\) 次现金流,
\(y\) 表示到期收益率(连续复利),
\(t_i\) 表示第 \(i\) 次付款从现在起到付款日的时间, 以年为单位,
\(V\) 是将来直到最后到期的所有现金流的总现值.
13.4.2.1.2. 修正久期¶
修正久期( Modified Duration ) 是价格敏感性的一个度量, 定义为价格对收益的百分比导数. 修正久期只有在将债券看做是收益的函数的时候才有效. 我们也可以将其定义为债券的对数导数.
于是经过简单计算可以得到在连续复利的情况下 \(MacD=ModD\).
13.4.2.1.3. 周期复利¶
在金融市场中, 收益往往表现为周期复利(年利率或者半年率), 而不是简单的连续复利. 分级基金A份也通常是以周期复利计算.
为了计算修正久期, 我们将 \(V\) 对 \(y_k\) 进行求导.
整理(两边同时除以 \(-V\) )得:
于是我们得到了, 麦考利久期和修正久期之间的关系:
这里:
\(i\) 索引现金流,
\(k\) 复合利率频率, (1表示年利率, 2表示半年率, 12表示月利率, 52表示周利率, etc.),
\(CF_i\) 表示第 \(i\) 次现金流付款,
\(t_i\) 是以年作单位到收到第 \(i\) 次付款的时间,
\(y_k\) 为到期利率,
\(V\) 表示所有现金流的现值.
13.4.2.2. 计算隐含收益率&逆推理论价格¶
已知交易价格 \(P\) 与现金流 \(CF_i\), 我们可以通过公式
来计算隐含收益率 \(r\).
而如果用已知收益率去回推理论价格 \(P_t\). 我们同样有公式
这里我们通过Monte Carlo模拟出现金流 \(CF_i\) 与固定投资利率 \(y_k\) 就可以用上面的公式计算出理论价格了.