FOClass: 債券殖利率曲線計算
在前篇文章中,我們已可算出零息債券的殖利率,但如果要套用在實務上的應用中,我們必須將觀察到的各點作一迴歸函式,讓我們可以找到各天期的殖利率。
運用原理為 Cubic Spline 方法。假設債券的 Discount 因子為一個三次方程式:
而每張債券的現金流量再套入下方方程式:
可得到類似 3.3a + 1.2b + 5.5c = 30 的等式。像是代入前篇文章的九張債券可得如下式子:
透過 OLS(ordinary least square) 方法求出 a, b, c 的適當值後,再代入:
即可算出殖利率曲線。如下圖:
- 綠色線為零息債券殖利率曲線
- 紅色線為附息債券殖利率曲線
相關的 Python 程式如下:
1 class CubicSpline:
2 """ 使用最小平方和原則作三次方方程式的迴歸
3 """
4 def __init__(self):
5 self.PVs = array([])
6 self.X = array([])
7
8 def addBondData(self, PV=0, Ci=[], Ni=[]):
9 self.PV = PV < 0 and PV or -1*PV
10 if Ni[0] == 0:
11 self.PVs = append(self.PVs, -1*self.PV-Ci[0])
12 self.Ci = array(Ci[1:])
13 self.Ni = array([[1, t, t**2, t**3] for t in Ni[1:]])
14 else:
15 self.PVs = append(self.PVs, -1*self.PV)
16 self.Ci = array(Ci)
17 self.Ni = array([[1, t, t**2, t**3] for t in Ni])
18
19 self.dt = dot(self.Ci, self.Ni)
20 if len(self.X):
21 self.X = append(self.X, [self.dt[1:]], axis=0)
22 else:
23 self.X = array([self.dt[1:]])
24
25 self.PVs[-1] -= self.dt[0]
26
27 def runOLS(self):
28 self.X = matrix(self.X)
29 self.PVs = matrix(self.PVs).T
30 self.b = linalg.inv(self.X.T * self.X) * self.X.T * self.PVs
31 return self.b





0 comments:
張貼意見