R41: Introduction to Fixed-Income Valuation

 1、Bond Pricing:债券定价

1.1 Pricing with a Market Discount Rate:给定市场折现率求债券价格

market discount rate:市场折现率(投资者要求的回报率)

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

债券发行时的价格是承诺现金流的现值。

市场折现率是指考虑到债券投资风险,投资者要求的回报率。它也被称为要求的收益率。

View Code

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_03

债券到期收益率 python函数 债券到期收益率计算_Code_04

债券到期收益率 python函数 债券到期收益率计算_ci_05

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

PV = 现值或债券价格

PMT = 每个期间的息票付款

FV = 债券的面值

r = 市场贴现率,每一期的要求回报率(I/Y)

N = 付息期数

注:此处都是每一期的数据,需要将coupon rate和折现率从年化折算到每一期,正负号是现金流的流入和流出方向

View Code

coupon rate:息票率,给到投资者的真金白银的收益

债券到期收益率 python函数 债券到期收益率计算_Code_08

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

coupon rate:是给到投资者的真金白银的收益

r:是投资者要求的回报率

如果 coupon rate > r,则说明真实给到投资者的回报高于预期回报,此时债券会溢价发行,
如果 coupon rate < r,则真实给到投资者的回报少于预期回报,只有折价发行才有人买

View Code

债券到期收益率 python函数 债券到期收益率计算_ci_11

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

永续债券计算公式

零息债券,默认按一年付息两次计算,如果题目要求不是,则按题目要求来计算

View Code

1.2 Yield-to-Maturity:到期收益率(YTM),年化收益率

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_14

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

定义:

到期收益率(YTM)是现金流的内部收益率,是给定债券价格的隐含市场折现率。

三个假设:

1、投资者持有债券直至到期。

2、发行人在预定日期全额支付所有息票和本金。

3、投资者能够以同样的收益率对息票付款进行再投资。

View Code

债券到期收益率 python函数 债券到期收益率计算_Code_17

债券到期收益率 python函数 债券到期收益率计算_Code_18

1.3 Relationships between the Bond Price and Bond Characteristics:债券价格与债券特征的关系

债券到期收益率 python函数 债券到期收益率计算_数据_19

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

1.债券价格与其市场贴现率成反比。(反比效应)

2.对于相同的息票率和到期时间,市场贴现率下降时的价格变化百分比大于上升时的价格变化百分比,涨多跌少(凸性效应)

View Code

债券到期收益率 python函数 债券到期收益率计算_ci_22

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

3.对于相同的到期时间,当市场贴现率变化相同时,低息票债券的价格变化百分比大于高息票债券(息票效应)

4.对于相同的票面利率,当市场贴现率变化相同时,长期债券的价格变化百分比大于短期债券(到期效应)

View Code

债券到期收益率 python函数 债券到期收益率计算_Code_25

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

5.假设没有违约,随着到期日的临近,溢价和折价发行债券价格将被“拉回面值”。(“拉回面值”效应)

账面价值是指在固上的任何点,通过摊销,债券的账面价值在到期日达到票面价值。

折价债券:

账面价值 = 购买价格 + 折价的摊余金额

溢价债券:

账面价值 = 购买价格 - 溢价的摊余金额

View Code

1.4 Pricing with Spot Rate:即期利率求债券价格

spot rate:即期利率

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_28

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

当使用市场贴现率对固定利率债券定价时,每个现金流使用相同的贴现率。计算债券价格的一个更基本的方法是使用与现金流日期相对应的一系列市场贴现率。这些市场贴现率称为即期利率。

View Code

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_31

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

即期利率是在每个零息债券在现金流到期日的到期收益率。(zero rate)

使用即期利率确定的债券价格(或价值)有时被称为债券的“无套利价值”。如果债券的价格与其无套利价值不同,则在没有交易成本的情况下存在套利机会。

View Code

债券到期收益率 python函数 债券到期收益率计算_Code_34

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_35

债券到期收益率 python函数 债券到期收益率计算_ci_36

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

YTM可以近似为基础即期利率的加权平均值,且值更靠近最后一期

View Code

1.5 Flat Price, Accrued Interest, Full Price:债券的报价,应计利息,实际支付价格

price paid:full price,dirty price,invoice price 实际支付价格

quoted price:flat price,clean price 报价

accured interest(AI):应计利息,不受市场折现率变化的影响

债券到期收益率 python函数 债券到期收益率计算_ci_39

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

释义

支付的价格:全价、脏价、发票价

报价:固定价格,净价

采用报价的原因是为了避免误导投资者有关债券市场价格趋势的信息。

应计利息(AI):

已赚取但尚未支付的利息。(属于A)

它不受市场贴现率变化的影响,因为给的是coupon部分。

View Code

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_42

债券到期收益率 python函数 债券到期收益率计算_数据_43

计算步骤:

第1步——计算应计利息 AI

T:一个计息周期内的总天数

t:到交割日经历的天数

PMT:一个计息周期内的支付的coupon

第2步——将交割日之后还未支付的现金流折现到交割日的前一个付息日,然后再通过复利的方式翻滚到交割日,计算出债券的实际支付价格 full price

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

两种最常见的日计数约定:

实际/实际:使用实际天数,包括周末、节假日和闰日,实际发生多少天就计多少天,计头不计尾

30/360:假设每个月有30天,全年有360天

View Code

第3步——计算债券的报价 flat price

通过 flat price的现值 = full price的现值 - AI

债券到期收益率 python函数 债券到期收益率计算_数据_46

债券到期收益率 python函数 债券到期收益率计算_Code_47

1.6 Matrix Pricing:矩阵定价法

债券到期收益率 python函数 债券到期收益率计算_Code_48

 

债券到期收益率 python函数 债券到期收益率计算_数据_49

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

矩阵定价通过使用具有相同或类似信用风险、票面利率和到期日的可比债券的价格和收益率,对非流动或尚未发行的债券进行估值。

矩阵定价也用于承销新债券,以获得基准利率所需收益率息差的估计值。

View Code

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_52

债券到期收益率 python函数 债券到期收益率计算_数据_53

key words:

coupon rate,market discount rate,perpetual bond,zero-coupon bond

Yield-to-maturity(YTM)

the inverse effect,the convexity effect,the coupon effect,the maturity effect,"pull to par" effect

spot rate,zero rate,no-arbitrage value

price paid,full price,dirty price,invoice price,quoted price,flat price,clean price,accrued interest(AI),actual/actual,30/360

matrix pricing

2、Yield Measure:债券收益率测算方法

2.1 Yield measures for fixed-rate bond:固定利率债券收益率测量

EAR:effective annual interest rate 有效年利率

BEY:semiannual bond equivalent yield 半年付息债券有效年利率

APR:annual percentage rate 年百分比利率

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

有效年利率(EAR)

定义:

有效年利率是一个储蓄账户或任何付息投资的实际回报,其中考虑了随时间变化的复利效应。

了解规定年利率的复利周期很重要。

  通常,复利周期与付息频率相匹配。

  零息债券的复利周期是任意的,因为没有息票支付。

View Code

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_56

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

对于付息周期为1的债券,它的 YTM = EAR。

对于给定的债券(EAR是常数,一张债券在发行时,其投资者所能拿到的回报就已经是确定的),YTM和付息周期呈反比关系。

美元计价债券收益率最常见的周期是2,因为美元市场上的大多数债券每半年支付一次利息。周期为2的年利率称为半年期债券基准收益率或半年期债券等价收益率。(BEY)

View Code

同一张债券,EAR一定,YTM与n成反比

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_59

债券到期收益率 python函数 债券到期收益率计算_Code_60

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

年百分比利率(APR)

定义:

借款成本以年利率表示,但不考虑复利,APR2=10%,表示按照这个APR每年付息2次,得到的YTM是10%。

View Code

债券到期收益率 python函数 债券到期收益率计算_ci_63

street convention yield:街道惯例收益率

true yield:真实收益率

true yield ≤ street convention yield

债券到期收益率 python函数 债券到期收益率计算_Code_64

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

街道惯例收益率与真实收益率

街道惯例收益率:假设在预定日期付款,现金流的内部回报率。

真实收益率:使用周末和银行假期的实际日历计算的现金流内部收益率。

真实收益率永远不会高于街道惯例收益率,因为周末和节假日延迟了付款时间。

View Code

current yield / income yield / running yield:当前收益率 / 收入收益率 / 运行收益率

simple yield:简单收益率

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

当前收益率和简单收益率

当前收益率/收入收益率/运行收益率:它是当年收到的息票收入的总和除以债券报价flat price。

例如,10年期、2%的半年期息票支付债券定价为95每100面值。当前收益率为2.105%。(2/95=0.02105)

简单收益率:它是息票收入加上每年折价或溢价的直线摊销部分之和除以债券报价flat price。

例如:10年期,摊销部分是100-95=5,直线摊销,每年摊销5/10=0.5。

View Code

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_69

yield-to-call:赎回收益率

yield-to-first call / yield-to-second call / yield-to-first par call:第一次可赎回时收益率,第二次可赎回时收益率,第一次按面值赎回收益率

yield-to-worst:最差收益率

option-adjusted yield(OAY):权利调整收益率

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

含权债券的收益率测量:

赎回收益率

  第一次可赎回时收益率,第二次可赎回时收益率,第一次按面值赎回收益率

  最差收益率:一系列收益率序列中的最低值

权利调整收益率(OAY):权利调整收益率是剔除权利影响之后的市场贴现率

  可赎回债券:OAY < YTM,因为此债券对于投资者来说风险更高

  可回售债券:OAY > YTM,因为此债券对于投资者来说风险更小

View Code

债券到期收益率 python函数 债券到期收益率计算_Code_72

债券到期收益率 python函数 债券到期收益率计算_Code_73

债券到期收益率 python函数 债券到期收益率计算_Code_74

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_75

2.2 Yield measures for floating-rated bond:浮动利率债券收益率测量

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_76

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

票面利率 = 参考利率(每个付息日重设,其他时间不变)+ 息差(债券发行时由发行人的信用风险水平决定,后续不变)

    息差:在参考利率上的指定收益率差价,用于补偿投资者对发行人信用风险的差额

贴现率 = 参考利率(每时每刻随参考利率变化)+ 要求的额外收益率(根据发行人最新的信用风险水平而变化)

    要求的额外收益率:投资者所需的超过参考利率的额外收益率补偿

View Code

债券到期收益率 python函数 债券到期收益率计算_ci_79

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

息差与要求额外收益率的关系:

- 如果发行人的信用质量保持不变,

    要求的额外收益率 = 息差

    在付息日之间,如果伦敦银行同业拆借利率下跌或上升,债券价格将高于或低于票面价值

    在每个利率重置日,浮动债券价格将再次与票面价值相等

- 如果发行人的信用风险发生变化,

    信用质量提高:要求的额外收益率 < 息差 -> 溢价

    信用质量下降:要求的额外收益率 > 息差 -> 折价

View Code

债券到期收益率 python函数 债券到期收益率计算_数据_82

债券到期收益率 python函数 债券到期收益率计算_ci_83

2.3 Yield measures for money market instruments:货币市场工具的收益率测量

DR:discount rate basis

AOR:add-on rate basis

货币市场债券等价收益率(BEY)是指按一年365天计算的 add-on rate

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_84

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

到期时间为一年或一年以下的货币市场工具以贴现率或附加率报价。

货币市场债券等价收益率(BEY)是指按一年365天的附加利率。

注:美国市场一般用DR,其他市场一般用AOR

View Code

债券到期收益率 python函数 债券到期收益率计算_ci_87

债券到期收益率 python函数 债券到期收益率计算_数据_88

key words:

effective annual interest rate(EAR),stated annual rate(YTM),semiannual bond equivalent yield(固定利率债券的BEY),annual percentage rate(APR),

street convention yield,true yield,current yield,income yield,running yield,simple yield,

yield-to-call,yield-to-first-call,yield-to-second-call,yield-to-first par call,yield-to-worst,option-adjusted yield(OAY)

quoted margin,required margin,discount margin

Discount rate(DR),Add-on rate(AOR),money market bond equivalent yield(货币市场工具的BEY)

3、Yield Curve:收益率曲线

债券到期收益率 python函数 债券到期收益率计算_数据_89

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

理论上,收益率期限结构是指具有相同货币、信用风险、流动性、税务状况和周期性的债券的到期收益率和到期时间之间的关系。

根据标的债券的特征,收益率曲线有不同的类型。

View Code

债券到期收益率 python函数 债券到期收益率计算_Code_92

3.1 spot curve / zero curve / “strip” curve:即期曲线

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_93

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

即期曲线:

定义

即期曲线有时称为零息曲线或剥离曲线。即期、零息或剥离曲线是一系列零息债券的到期收益率。

理想的数据集将是一系列零息政府债券的到期收益率,这些债券的到期期限为一个完整的范围。

实际上

分析师通常只使用最近发行且交易活跃的政府债券来构建收益率曲线。这些债券具有相似的流动性和较少的税收影响。

如果完整期限的数据有限,则有必要在观察到的收益率之间使用线性差补法。

View Code

3.2 par curve:平价曲线

债券到期收益率 python函数 债券到期收益率计算_ci_96

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

平价曲线:

定义

平价曲线是每个平价发行债券的到期收益率的序列。假设债券具有相同的货币、信用风险、流动性、税收状况和相同付息周期的年收益率。

par rate = 票面利率 = YTM

计算方法

平价曲线可以由即期曲线获得。

View Code

债券到期收益率 python函数 债券到期收益率计算_Code_99

3.3 forward curve:远期曲线

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_100

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

远期曲线:

定义

远期利率是适用于未来发生的金融交易的利率,当下锁定未来某一时刻的利率。

远期利率的符号:2y5y,f(2,5),从第二年开始存,存款期限是5年。

远期曲线是一系列远期利率,每个利率都有相同的时间框架,即起点时刻都相同。

View Code

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数_103

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

计算方法:

可以从即期曲线计算隐含远期曲线。

隐含远期利率根据即期利率计算,无套利原则。

远期利率可以解释为延长到期时间获得一段额外时间的增量或边际回报。隐含远期利率是盈亏平衡再投资利率。

View Code

债券到期收益率 python函数 债券到期收益率计算_ci_106

债券到期收益率 python函数 债券到期收益率计算_ci_107

债券到期收益率 python函数 债券到期收益率计算_数据_108

债券到期收益率 python函数 债券到期收益率计算_ci_109

债券到期收益率 python函数 债券到期收益率计算_ci_110

key words:

spot curve,zero curve,strip curve,interpolate

par curve,par rate

forward curve,forward rate,break-even reinvestment rate

4、Yield Spread:利差,息差

债券到期收益率 python函数 债券到期收益率计算_Code_111

债券到期收益率 python函数 债券到期收益率计算_Code_112

债券到期收益率 python函数 债券到期收益率计算_ci_113

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

基准利率

1、固定利率债券通常使用与到期时间相同的最新发行的政府证券作为基准。

2、浮动利率票据通常使用相同付息周期的伦敦银行同业拆借利率(Libor)作为基准。

3、如果特定债券期限的基准不存在,则使用线性差补法推导隐含基准。

4、基准将随着剩余期限的变化而变化。

View Code

债券到期收益率 python函数 债券到期收益率计算_ci_116

债券到期收益率 python函数 债券到期收益率计算_数据_117

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

利差的类型:

・G-spread

G-利差 = 债券收益率 - 政府债券收益率

衡量公司债券对比主权债券的信用、流动性和其他风险。

・I-spread

I-利差 = 债券收益率 - 掉期利率

衡量公司债券对比银行间贷款基准的信贷和流动性风险。

G-利差或I-利差可基于特定基准利率或基准收益率曲线使用线性差补法。G-利差和I-利差对每个现金流都使用相同的贴现率,因为都是基于YTM的。

・Z-spread

Z-利差(零波动利差)基于整个基准即期曲线。它是添加到每个即期利率的恒定利差,以使现金流现值与债券价格匹配。

在实践中,通常使用目标搜索函数或类似的解算器函数在电子表格中计算Z-利差。

通常是反求出Z,如果两个类似债券的Z-利差相差很大,则Z-利差大的那个债券的价格被低估,可以买入。

View Code

债券到期收益率 python函数 债券到期收益率计算_数据_120

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

如果 spot curve 是水平的,Z-spread = G-spread

如果 spot curve 不是水平的,Z-spread ≠ G-spread,且越陡峭,两者差距越大

View Code

债券到期收益率 python函数 债券到期收益率计算_数据_123

债券到期收益率 python函数 债券到期收益率计算_债券到期收益率 python函数

债券到期收益率 python函数 债券到期收益率计算_ci_02

权利调整利差(OAS):

可赎回债券:

  Z-Spread > OAS

  OAS = Z-Spread - Option value

可回售债券:

  Z-Spread < OAS

  OAS = Z-Spread + Option value

View Code

债券到期收益率 python函数 债券到期收益率计算_数据_126

债券到期收益率 python函数 债券到期收益率计算_数据_127

债券到期收益率 python函数 债券到期收益率计算_Code_128

key words:

benchmark rate,yield spread,G-spread,I-spread,Z-spread,option-adjusted spread(OAS)