该方法将一支债券映射到标准期限的零息债上。(原文为:A Cash-Flow Mapping Procedure. John Hull)
考虑一支本金为100万,年利率为10%,半年付息的债券,并于0.8年后到期。则在0.3年后有一笔5万的现金流,0.8年后有一笔105万的现金流(包含本金)。0.3年的现金流可以映射到3个月和6个月的零息债上,0.8年的现金流可以映射到6个月和1年的零息债上。
现考虑0.8年后的现金流,假定零息债的零息利率(即期利率),债券价格的日波动率以及每个债之间的相关系数如下:
3个月 | 6个月 | 1年 | |
零息利率(%) | 5.50 | 6.00 | 7.00 |
日波动率(%) | 0.06 | 0.10 | 0.20 |
3个月 | 6个月 | 1年 | |
3个月 | 1 | 0.9 | 0.6 |
6个月 | 0.9 | 1 | 0.7 |
1年 | 0.6 | 0.7 | 1 |
根据6个月的利率6%和1年的利率7%,可以求得0.8年的利率为6.6%。同理得到日波动率为0.16%
对现金流折现有:(1)
记a为现值划分给6月期债券的部分,1-a为划分给1年期债券的部分。
根据公式:(2)
可以求得a为0.320337,即6月期的债券价值为319589,1年期的债券价值为678074,
同理可得到0.3年的现金流可分为3月期的债券价值37397,6月期的债券价值11793,
再根据公式:(3)
可以求得0.8年期债券的方差为2628518,为对应期限的债券价值。
alpha = np.array([[37397, 331382, 678074]])
sigma = np.array([[0.0006, 0.001, 0.002]])
rho_1_2 = 0.9
rho_1_3 = 0.6
rho_2_3 = 0.7
rho = np.array([[1, rho_1_2, rho_1_3],
[rho_1_2, 1, rho_2_3],
[rho_1_3, rho_2_3, 1]])
v1 = alpha * sigma
res = np.vdot(np.dot(v1.T, v1), rho)
print(res)
至此我们可以根据:(4)
求得债券对应的var值