原文链接:http://tecdat.cn/?p=11758
最近咱们被客户要求撰写对于 Nelson Siegel 和线性插值模型的钻研报告,包含一些图形和统计输入。
保证金购买是指投资者先从银行或经纪人处借得资金购买证券,而所购买的证券作为借入资金的抵押
债券根底
- 零息债券 是指以贴现形式发行,不附息票,而于到期日时按面值一次性领取本利的债券。
- 债券的票面价值 债券的票面价值又称面值, 是债券票面表明的货币价值, 是债券发行人承诺在债券到期日偿还给债券持有人的金额。
- 债券能够参考价格或收益率。例如,将领取 100 元的零息债券的价格能够是 90 元。但收益率将为(100−90)/90=11%,而不是 10%。
- 债券收益率 是投资于债券上每年产生出的收益总额与投资本金总量之间的比率。
- 债券能够在二级市场上交易(一级市场是债券发行过程)。如果利率减少,债券的价值就会减少,如果利率升高,债券的价值就会缩小,这仅仅是因为该债券是在利率扭转之前以便宜 / 低廉的价格发行的。也能够做空债券。
- 尽管冀望债券不会呈现负利率,但也不是齐全看不到。在危机期间,政府债券甚至公司债券都能够以负收益率交易(例如雀巢)。
债券定价
债券价格是通过应用票面利率和现金流来确定。
式中,CFt 是 t 时的现金流,B(0,t)是贴现系数或 0 时价格
其中 R(0,t)是在工夫为 t 时在工夫 0 的年度即期汇率。
B(0,t)也能够称为零息债券的价格。
咱们能够暗示零息票利率与市场上不同期限的债券。而后咱们能够用这些利率建设一个期限构造模型来为任何债券定价。严格违反期限构造可能是买入 / 卖出机会,也可能是套利机会。
calculate_bond_price<-function(face_value=1000,coupon_rate=0.05,maturity=1,yearly_coupons=0){
#该函数依据给定的债券 B(0,t)的面值,到期日,年息率和等距付款来计算其价格
#如果 yearly_coupons == 0, 它只在到期时领取
#如果 yearly_coupons == 1, 每年领取一次
#如果 yearly_coupons == 2, 每半年领取一次
if(yearly_coupons==0){face_value/((1+coupon_rate)^maturity)
}else{face_value/((1+coupon_rate/yearly_coupons)^(yearly_coupons*maturity))
}
}
calculate_bond_price()
<!—->
## [1] 952.381
如果咱们有适合的证券,咱们也能够从息票领取债券中构建零息票债券。
- 1 年期纯贴现债券在 95 发售。
- 两年期 8%的债券售价 99 元。
2 年期纯折价债券的价格为 99-0.08(95)= 91.4。
复利类型
简略复利
假如利率为 0.05,期限为 2 年。100 美元的价格在到期时将是多少。
定期复利
如果将利息永恒增加到本金投资中,那么咱们的复利就是利率。假如雷同的示例,但每半年复算一次。
年名义利率为
间断复利
当初,假如复利的频率很高,以至于在两次加息之间的工夫距离是无限小(靠近零)。而后在极限状况下
因而,以咱们的示例为例,间断复利的年利率是
给定一组零息票债券价格,咱们能够计算间断收益率
#例如,债券价格为 0.987,期限为半年。calculate_yield(0.987,0.5)
## [1] 0.02617048
远期汇率
假如有两个到期日不同的债券
能够重新排列成
imply_forward_rate<-function(R0t1=0.04,R0t2=0.045,t1=1,t2=2){((1+R0t2)^t2/(1+R0t1)^t1)^(1/(t2-t1)) -1
}
imply_forward_rate()
<!—->
## [1] 0.05002404
到期日的相关性
利率不仅随着到期日变动,而且随着工夫变动。咱们还将调用某些数据和计算。
让咱们加载库并查看收益率曲线数据。
## R_3M R_6M R_1Y R_2Y R_3Y R_5Y R_7Y R_10Y
## 1981-12-31 12.92 13.90 14.32 14.57 14.64 14.65 14.67 14.59
## 1982-01-31 14.28 14.81 14.73 14.82 14.73 14.54 14.46 14.43
## 1982-02-28 13.31 13.83 13.95 14.19 14.13 13.98 13.93 13.86
## 1982-03-31 13.34 13.87 13.98 14.20 14.18 14.00 13.94 13.87
## 1982-04-30 12.71 13.13 13.34 13.78 13.77 13.75 13.74 13.62
## 1982-05-31 13.08 13.76 14.07 14.47 14.48 14.43 14.47 14.30
相关系数矩阵显示出收益率没有齐全相干。
R\_3M | R\_6M | R\_1Y | R\_2Y | R\_3Y | R\_5Y | R\_7Y | R\_10Y | |
---|---|---|---|---|---|---|---|---|
R\_3M | 1.0000000 | 0.9983390 | 0.9940045 | 0.9837559 | 0.9744780 | 0.9546189 | 0.9399504 | 0.9230412 |
R\_6M | 0.9983390 | 1.0000000 | 0.9981715 | 0.9899820 | 0.9817197 | 0.9632268 | 0.9491761 | 0.9332366 |
R\_1Y | 0.9940045 | 0.9981715 | 1.0000000 | 0.9959937 | 0.9900195 | 0.9746174 | 0.9621895 | 0.9478956 |
R\_2Y | 0.9837559 | 0.9899820 | 0.9959937 | 1.0000000 | 0.9984844 | 0.9896811 | 0.9808896 | 0.9694621 |
R\_3Y | 0.9744780 | 0.9817197 | 0.9900195 | 0.9984844 | 1.0000000 | 0.9958583 | 0.9896185 | 0.9804575 |
R\_5Y | 0.9546189 | 0.9632268 | 0.9746174 | 0.9896811 | 0.9958583 | 1.0000000 | 0.9983629 | 0.9936744 |
R\_7Y | 0.9399504 | 0.9491761 | 0.9621895 | 0.9808896 | 0.9896185 | 0.9983629 | 1.0000000 | 0.9981232 |
R\_10Y | 0.9230412 | 0.9332366 | 0.9478956 | 0.9694621 | 0.9804575 | 0.9936744 | 0.9981232 | 1.0000000 |
点击题目查阅往期内容
R 语言应用随机技术差分进化算法优化的 Nelson-Siegel-Svensson 模型
左右滑动查看更多
01
02
03
04
债券价格和收益率
在这一部分中,咱们将看到构建债券价格和收益率的办法。
间接法
假如您失去以下债券利率。请记住,名义汇率是 100。
息票 | 到期 | 价格 | |
---|---|---|---|
债券 1 | 5.0 | 1 个 | 101.0 |
债券 2 | 5.5 | 2 | 101.5 |
债券 3 | 5.0 | 3 | 99.0 |
债券 4 | 6.0 | 4 | 100.0 |
零息债券价格(B(0,t)
而后咱们失去
get_zero_coupon()
## $B0t
## [1] 0.9619048 0.9119386 0.8536265 0.7890111
##
## $R0t
## [1] 0.03960396 0.04717001 0.05417012 0.06103379
线性插值
R03<-0.055
R04<-0.06
R03p75<-((4-3.75)*0.055+(3.75-3)*0.06)/(4-3)
R03p75
<!—->
## [1] 0.05875
<!—->
## 或应用 R 函数
yield_interpolate<-approxfun(x=c(3,4),y=c(0.055,0.06))
yield_interpolate(3.75)
<!—->
## [1] 0.05875
三次插值
假如咱们的费率如下:
#插值 2.5 年的债券
t_val<-2.5
sum(abcd_vec*((2.5)^(3:0)))
## [1] 0.0534375
<!—->
## [1] 0.0534375
间接办法(Nelson Siegel)
尼尔森·西格尔(Nelson Siegel)模型是模仿利率收益率曲线的一种风行办法。
其中 θ 是到期日,β0 是长期收益率,β1 是斜率参数,β2 是曲率参数,τ 是比例参数。
ns_data <-
data.frame(maturity=1:30) %>%
mutate(ns_yield=nelson_siegel_calculate(theta=maturity,tau=3.3,beta0=0.07,beta1=-0.02,beta2=0.01))
head(ns_data)
## maturity ns_yield
## 1 1 0.05398726
## 2 2 0.05704572
## 3 3 0.05940289
## 4 4 0.06122926
## 5 5 0.06265277
## 6 6 0.06376956
<!—->
ggplot(data=ns_data, aes(x=maturity,y=ns_yield)) + geom_point() + geom_line()
能够应用参数来更好地预计收益曲线。
Nelson Siegel 参数的预计
Nelson Siegel 曲线预计。
## beta_0 beta_1 beta_2 lambda
## 1981-12-31 14.70711 -5.3917409 3.269125 0.5123605
## 1982-01-31 14.35240 -0.7602066 2.834508 0.1887807
## 1982-02-28 13.74481 -0.9247232 2.681840 0.1236869
留神:咱们将 lambda 称为 tau(ττ)(形态参数)。
Beta 灵敏度
思考提供 Fi 将来现金流的债券价格。因而,带有 beta 参数的价格变动如下。
nelson_siegel_sensitivities(coupon_rate=0.05,maturity=2)
## Beta0 Beta1 Beta2
## -192.51332 -141.08199 -41.27936
<!—->
nelson_siegel_sensitivities(coupon_rate=0.05,maturity=7)
<!—->
## Beta0 Beta1 Beta2
## -545.4198 -224.7767 -156.7335
<!—->
nelson_siegel_sensitivities(coupon_rate=0.05,maturity=15)
<!—->
## Beta0 Beta1 Beta2
## -812.6079 -207.1989 -173.0285
点击文末 “浏览原文”
获取全文残缺代码数据资料。
本文选自《用 R 语言用 Nelson Siegel 和线性插值模型对债券价格和收益率建模》。
点击题目查阅往期内容
合成商业周期时间序列:线性滤波器、HP 滤波器、Baxter 滤波器、Beveridge Nelson 合成等去趋势法 \
R 语言中的 Nelson-Siegel 模型在汇率预测的利用 \
R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析 \
合成商业周期时间序列:线性滤波器、HP 滤波器、Baxter 滤波器、Beveridge Nelson 合成等去趋势法 \
用 R 语言用 Nelson Siegel 和线性插值模型对债券价格和收益率建模 \
R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析 \
R 语言和 QuantLib 中 Nelson-Siegel 模型收益曲线建模剖析 \
R 语言应用随机技术差分进化算法优化的 Nelson-Siegel-Svensson 模型 \
用 R 语言用 Nelson Siegel 和线性插值模型对债券价格和收益率建模 R 语言用神经网络改良 Nelson-Siegel 模型拟合收益率曲线剖析 \
R 语言中的 Nelson-Siegel 模型在汇率预测的利用 \
python 应用 LASSO 回归预测股票收益 \
R 语言数据的收益率和波动性交易 \
R 语言用线性模型进行预测:加权泊松回归,一般最小二乘,加权负二项式模型,多重插补缺失值 \
应用 SAS,Stata,HLM,R,SPSS 和 Mplus 的分层线性模型 HLM\
R 语言用线性回归模型预测空气质量臭氧数据