天天看點

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

原文連結:http://tecdat.cn/?p=11758

債券基礎 

  • 鍵  是一個合同,作者與初始付款義務以預定的時間(s)(成熟)的錢付預定量。這類似于借入利息和付款結構的錢。
  • 零息債券  是一種特殊類型的鍵,其在到期時支付出僅一次沒有中間付款。
  • 債券的面額/票面金額/本金是發行人在到期時所支付的金額。标準價值通常為$ 1000。
  • 債券可以參考價格或收益。例如,将支付$ 100的零息債券的價格可以是$ 90。但收益率将是(100-90)/ 90 = 11%(100-90)/ 90 = 11%,而不是10%10%。
  • 債券價格的一個常見約定是,它們最終收于100。這就是為什麼當利率上升時,債券價格下降,反之亦然。另一種慣例是美分兌美元(例如,90美分兌美元)。
  • 債券收益率被稱為年利率。例如,十年期政府債券的收益率為2%,這意味着它的年收益将為2%,而不是10年後。
  • 債券可以在二級市場上交易(一級市場是債券發行過程)。如果利率增加,債券的價值就會增加,如果利率降低,債券的價值就會減少,這僅僅是因為該債券是在利率改變之前以便宜/昂貴的價格發行的。也可以做空債券。
  • 即使不期望債券産生負利率,也不是完全看不見的。在危機時期,政府債券甚至公司債券可以負收益進行交易。

定價債券

債券價格是通過使用票面利率和現金流量确定債券的現值來确定的。

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

其中CFt是時間tt的現金流量,B(0,t)是美元的折扣率或時間00的價格。

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

其中R(0,t)是在時間為tt時在時間00的年度即期匯率。我們可以重新安排

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

B(0,t)也可以稱為零息債券的價格。大多數債券不是零息債券,但是有可能使用零息債券構造幾乎所有支付結構。

我們可以暗示與市場債券不同期限的零息票利率。然後,我們可以使用這些利率建立期限結構模型來對任何債券定價。嚴格違反期限結構可能是買賣機會,也可能是套利機會。

calculate_bond_price<-function(face_value=1000,coupon_rate=0.05,maturity=1,yearly_coupons=0){
    #This function calculates the price of the bond B(0,t) given
    #its face value, maturity, annual coupon rate and equidistant payment
    #if yearly_coupons == 0, it only pays out at the maturity
    #if yearly_coupons == 1, it pays out annually
    #if yearly_coupons == 2, it pays out semiannually
    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美元。
拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

2年期純折價債券的價格為99-0.08(95)= 91.499-0.08(95)= 91.4(通過買入兩年期債券多頭和買入一年期債券空頭0.08個機關(以抵消第一個債券的收益)年優惠券)。

複利類型

簡單複合

這是僅應用一次利率的方法。假設利率為0.05,期限為2年。100美元的價格在到期時将是多少。

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

定期複利

如果将利息永久添加到本金投資中,那麼我們的複利就是利率。假設相同的示例,但每半年複算一次。

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

産生的年名義利率為  。

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

連續複利

現在,假設複利的頻率很高,以至于在兩次加息之間的時間間隔是無限的(接近零)。然後在極限情況下

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

看起來很熟悉?

是以,以我們的示例為例,連續複利的年利率是 

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

給定一組零息票債券價格,我們可以計算連續收益率 

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
#Example bond price is 0.987 and maturity is half a year.
calculate_yield(0.987,0.5)           
## [1] 0.02617048           

遠期匯率

假設有兩個到期日不同的債券

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

可以重新排列成

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
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           
拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

到期日的相關性

利率不僅随着到期日變化,而且随着時間變化。我們還将調用某些資料和計算。

讓我們加載庫并檢查美聯儲收益率曲線資料。

##             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
1.0000000 0.9983390 0.9940045 0.9837559 0.9744780 0.9546189 0.9399504 0.9230412
0.9981715 0.9899820 0.9817197 0.9632268 0.9491761 0.9332366
0.9959937 0.9900195 0.9746174 0.9621895 0.9478956
0.9984844 0.9896811 0.9808896 0.9694621
0.9958583 0.9896185 0.9804575
0.9983629 0.9936744
0.9981232

債券價格和收益率

在這一部分中,我們将看到提取和建構債券價格和收益率的方法。

直接法

假設您得到以下債券利率。請記住,名義匯率是100。

優惠券 到期 價錢
債券1 5.0 1個 101.0
債券2 5.5 2 101.5
債券3 3 99.0
債券4 6.0 4 100.0

零息債券價格(B(0,t)B(0,t)

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

然後我們得到 

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
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           
##Or use the R function
yield_interpolate<-approxfun(x=c(3,4),y=c(0.055,0.06))
yield_interpolate(3.75)           
## [1] 0.05875           

三次插值

假設我們的費率如下: 

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
#Interpolate for a bond of 2.5 years
t_val<-2.5
sum(abcd_vec*((2.5)^(3:0)))           
## [1] 0.0534375           
## [1] 0.0534375           

間接方法(Nelson Siegel)

代替引導技術,我們将使用模型。尼爾森·西格爾(Nelson Siegel)模型是模拟利率收益率曲線的一種流行方法。

拓端tecdat|用R語言用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()           
拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化

可以使用參數來更好地估計收益曲線。

Nelson Siegel參數的估計

YieldCurve

 上述R包  具有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參數的價格變化如下。

拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
拓端tecdat|用R語言用Nelson Siegel和線性插值模型對債券價格和收益率模組化
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           
  1. 這些R講義也将遵循固定收益證券:Martellini,Priaulet和Priaulet撰寫的“估值風險管理和投資組合政策”。
  2. 債券可以在收益率之上額外溢價或折價購買或出售。純折扣意味着沒有額外的折扣或溢價。

▍關注我們

【大資料部落】第三方資料服務提供商,提供全面的統計分析與資料挖掘咨詢服務,為客戶定制個性化的資料解決方案與行業報告等。

▍咨詢連結:http://y0.cn/teradat

▍聯系郵箱:[email protected]

繼續閱讀