計算債券零息利率通常採用票息剝離法。假設有下表:
券名剩餘期限(年)
票面利率
債券**
本金牛奔1號
0.25
099.42
100牛奔2號
0.50
98.83
100牛奔3號
1.02.77% 每年付息一次
100.09
100牛奔4號
1.53.46% 半年付息一次
101.32
100牛奔4號
2.02.53% 半年付息一次
99.39
100計算這些債券的零息利率實際上就是在求解如下方程組中的r1—r5:
(1)99.42*er1*0.25=100
(2)98.83*er2*0.5=100
(3)100.09*er3*1=100*(1+0.0277)
(4)100*(0.50.0346*e-r2*0.5+ 0.5*0.0346*e-r3+(1+0.5*0.0346)*e-r4*1.5)=101.32
(5)100(0.5*0.0253*e-r2*0.5+ 0.5*0.0253*e-r3+0.5*0.0253*e-r4*1.5+(1+0.5*0.0253)*e-r5*1.5)=99.39
於是接下來開始聯立方程組,構建乙個函式進行計算:
import numpy as np
def lxll(r):
r1,r2,r3,r4,r5=r
#各支債券**
p1,p2,p3,p4,p5=99.42,98.83,100.09,101.32,99.39
#債券面值
mz=100.0
#票面利率
c3,c4,c5=0.0277,0.0346,0.0253
#聯立等式
b1=p1*np.exp(r1*0.25)-mz
b2=p2*np.exp(r2*0.5)-mz
b3=p3*np.exp(r3)-mz*(1+c3)
b4=mz*(0.5*c4*np.exp(-r2*0.5)+0.5*c4*np.exp(-r3)+(1+0.5*c4)*np.exp(-r4*1.5))-p4
b5=mz*(0.5*c5*np.exp(-r2*0.5)+0.5*c5*np.exp(-r3)+0.5*c5*np.exp(-r4*1.5)+(1+0.5*c5)*np.exp(-r5*2))-p5
return np.array(
[b1,b2,b3,b4,b5]
)
方程組的解法使用optimize模組中的fsolve函式:
import scipy.optimize as sci
zt=sci.fsolve(lxll,[0.1,0.1,0.1,0.1,0.1]
)for i in range(len(zt)):
print(round(zt[i],6),end=
' ')
於是就得到結果啦:
0.023268 0.023538 0.026424 0.025411 0.028313
對這些零息利率繪圖:
plt.rcparams[
'font.sans-serif']=
'simhei'
plt.rcparams[
'axes.unicode_minus'
]=false
t=np.array(
[0.25,0.5,1.0,1.5,2.0]
)from matplotlib import pyplot as plt
plt.figure(figsize=
(10,8))
plt.plot(t,zt,'r-'
)#畫線
plt.plot(t,zt,'rd'
)#畫點
plt.xlabel(u'期限(年)',fontsize=13)
plt.xticks(fontsize=13)
plt.ylabel(u'零息利率',fontsize=13)
plt.yticks(fontsize=13)
plt.title(u'零息利率曲線',fontsize=13)
但是在這個表中,我們發現還少了一些資料,比如:缺少0.75年、1.25年、1.75年的零息利率,如果要將它們算出來,可以採用我們在前面所用的插值法來處理:
import scipy.interpolate as si
func=si.interp1d(t,zt,kind=
'cubic'
)t_new=np.array(
[0.25,0.5,0.75,1.0,1.25,1.5,1.75,2.0]
)zt_new=func(t_new)
zt_new
求得結果為:
array([0.02326754, 0.02353797, 0.02515498, 0.0264237 , 0.02618357,
0.02541116, 0.02561735, 0.028313 ])
再次繪圖:
plt.figure(figsize=
(10,8))
plt.plot(t_new,zt_new,'r-'
)#畫線
plt.plot(t_new,zt_new,'rd'
)#畫點
plt.xlabel(u'期限(年)',fontsize=13)
plt.xticks(fontsize=13)
plt.ylabel(u'零息利率',fontsize=13)
plt.yticks(fontsize=13)
plt.title(u'零息利率曲線',fontsize=13)
plt.grid(
'true'
)plt.show(
)
於是補足了之前缺少的資料
金融學習之七 統計檢驗方法的使用
今天的內容有點無聊,主要是幾個統計檢驗方法的應用,都是scipy模組中的stas子模組中的函式。幾個統計檢驗分別是k s檢驗,a d檢驗,w檢驗和正態性檢驗。1 k s檢驗 k s檢驗是基於累計分布函式,用以檢驗乙個分布是否服從某種理論分布,或比較兩個分布是否存在顯著差異。k s檢驗所使用的函式是k...
《貨幣金融學》學習筆記 一 金融體系概覽
金融市場的功能 金融市場最基本的功能是實現有盈餘資金的儲蓄者和資金短缺的支出者之間的資金轉移。金融市場履行這個功能,既可以通過直接融資,即借款人通過發行 直接從貸款人手中獲取資金的方式,也可以通過間接融資,即利用金融中介機構幫助實現資金的轉移的方式。通過金融市場,資金從無生產性用途的人手中轉移到有生...
金融學習之四 插值法求遠期國債收益率
今天來個簡單的,使用插值法求遠期國債利率。插值法使用的是scipy模組中的interpolate子模組的interp1d函式,注意這裡的是數字1,不是英文本母l。函式的格式為interp1d x,y,kind x y為給定資料,kind是插值方法。kind引數如下 引數名稱 插值方法 nearest...