原文連結:http://tecdat.cn/?p=11758
最近我們被客戶要求撰寫關於Nelson Siegel和線性插值模型的研究報告,包括一些圖形和統計輸出。
保證金購買是指投資者先從銀行或經紀人處借得資金購買證券,而所購買的證券作為借入資金的抵押
債券價格是通過使用票面利率和現金流來確定。
式中,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
如果我們有合適的證券,我們也可以從息票支付債券中構建零息票債券。
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_3MR_6MR_1YR_2YR_3YR_5YR_7YR_10YR_3M1.00000000.99833900.99400450.98375590.97447800.95461890.93995040.9230412R_6M0.99833901.00000000.99817150.98998200.98171970.96322680.94917610.9332366R_1Y0.99400450.99817151.00000000.99599370.99001950.97461740.96218950.9478956R_2Y0.98375590.98998200.99599371.00000000.99848440.98968110.98088960.9694621R_3Y0.97447800.98171970.99001950.99848441.00000000.99585830.98961850.9804575R_5Y0.95461890.96322680.97461740.98968110.99585831.00000000.99836290.9936744R_7Y0.93995040.94917610.96218950.98088960.98961850.99836291.00000000.9981232R_10Y0.92304120.93323660.94789560.96946210.98045750.99367440.99812321.0000000點擊標題查閱往期內容
R語言使用隨機技術差分進化算法優化的Nelson-Siegel-Svensson模型
左右滑動查看更多
01
02
03
04
在這一部分中,我們將看到構建債券價格和收益率的方法。
直接法
假設您得到以下債券利率。請記住,名義匯率是100。
息票到期價錢債券15.01個101.0債券25.52101.5債券35.0399.0債券46.04100.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語言用線性回歸模型預測空氣品質臭氧數據