第二讲 固定收益证券的matlab计算课件_第1页
第二讲 固定收益证券的matlab计算课件_第2页
第二讲 固定收益证券的matlab计算课件_第3页
第二讲 固定收益证券的matlab计算课件_第4页
第二讲 固定收益证券的matlab计算课件_第5页
已阅读5页,还剩36页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

第二讲固定收益证券的matlab计算吴义能TELQ:294808610E-mail:wuyineng2003@163.com第一节固定收益基本知识固定收益证券:

一组稳定现金流的证券.广义上还包括了债券市场上的衍生产品及优先股.以债券为主.一.固定收益的品种国债是固定收益的重要形式,以贴现债券(discountsecurity)与息票债券(couponbonds)两种形式发行.美国的固定收益证券可以分为以下几个品种:1.(短期)国库券(Treasurybills,T-bills)期限小于一年,贴现发行,面值usu.1~10万美元.是流动性最高的债券品种,违约风险小,其利率usu当作无风险利率。2.政府票据(Treasurynotes,T-notes)即美国中期国债,期限1~10年,是coupon.3.长期国债(Treasurybonds,T-bonds)期限>10年,面值1~10万美元,是coupon.4.零息票债券(Zero-couponbond)零息票债券是指买卖价格相对面值有较大折让的企业或市政债券。5.美国CD存单美国CD存单(certificatedeposit):由银行等金融机构向存款人发行的证券,存单上标有一个到期日和利率,并且以任意面值发行,可以买卖,偿还期限小于1年.6.回购协议(repurchaseagreement)是短期抵押贷款.指一方向另一方出售证券的同时,承诺在未来的某一天按协定的价格将相同的证券买回,通常由借款方发起并贷出证券,回购中涉及的证券通常具有较高的信用质量.回购协议的步骤:(1)以债券作为抵押借入资金;(2)经过一段时间,按照约定的价格买回抵押债券.7.可转换债券(convertiblesecurity)可转换债券(简称可转债)是一种具有固定收益的证券,其特点是持有者可以转换为普通股股票,在合约的条款中规定了可转换债券转换为普通股的条件,持有者决定何时转换为股票.可转换债券介于普通股和普通债券之间,故又称股票类连接证券.可转债属于次级债券,如果企业破产,满足要求权的次序是:优先债权次级债可转债优先股普通股.8.浮动利率债券(FRN))浮动利率债券(FRN,floatingratenotes)是偿还期内利率发生变化的债券.

浮动利率债券具有以下几个特征:①规定了利率上限与利率下限②基准利率大多为LIBOR,也可为汇率、股票指数、债券指数等;③利率可以正向浮动,也可以反向浮动。二.固定收益相关概念1.交易日(tradedate)交易日就是买卖双方达成交易的日期。但实际情况可能比这更复杂。2.结算日(SettlementDate)指买入方支付价格和卖出方交割证券的日期。美国国债交割日为交易之后第一个营业日(T+1)。交割日也可以由交易者之间商定,如果交割日刚好支付利息,则债券当天出售者获得当天的利息支付,而债券的购买者获得其余款项。有时通过FedWine机构交割证券,交易日即为交割日。3.到期日(Maturity)指固定收益证券债务合约终止的日期。4.本金(Principal)本金有时称面值(parvalue),是指固定收益票面金额7.起息日到交割日的天数(DCS)DSM:daysfromcoupontosettlement):指从计息日(含)到交割日(不含)之间的天数。注意,付息日作为下一个利息期限的第一天而不计入DCS。8.交割日距离到期日的天数(DSM)DSM:daysfromsettlementtomaturity):其一般规则是包括交割日而不包括到期日。OptionalInputs:Basis-[ScalarorVector]ofday-countbasis.ValidBasisare:0=actual/actual(default)1=30/360(SIA)2=actual/3603=actual/365(NEW)4-30/360(PSAcompliant)(NEW)5-30/360(ISDAcompliant)(NEW)6-30/360(European)(NEW)7-act/365(Japanese)8.Act/365(Japanese):每月30天,每年365天,不考虑闰年;由于各计数法则之间太难区别,我们只讲matlab的用法:格式:NumDays:=daysdiff(StrateDate,EndDate,Basis)日期的格式可以是:纯数字‘月/日/年’的形式,如3/1/1999表示1999年3月1日,也可以是数字加英文月份的前三个字母,这时按日-月-年来排,如1-Mar-1999,在matlab2010b版本中,也支持”“英文月前三字母-日(数字)-年(数字)”的形式。例1:计算Act/Act法则之下2007年2月27日至2007年3月31日之间的天数。代码1:>>StartDate='27-Feb-2007';>>EndDate='31-Mar-2007';>>Basis=0;>>StartDate='27-Feb-2007';>>NumDays=daysdif(StartDate,EndDate,Basis)NumDays=32代码2:StartDate='2/27/2007';EndDate='3/31/2007';Basis=0;NumDays=daysdif(StartDate,EndDate,Basis)NumDays=32代码3:daysdif('2/27/2007','3/31/2007',0)ans=32例2:请分别用30E/360,ISDA,PSA,SIA法计算例1中的应计天数。解:30E/360,ISDA,PSA,SIA对basis代码分别是:E_Days=daysdif('2/27/2007','3/31/2007',6)E_Days=33>>ISDA_Days=daysdif('2/27/2007','3/31/2007',5)ISDA_Days=34>>PSA_Days=daysdif('2/27/2007','3/31/2007',4)PSA_Days=34>>SIA_Days=daysdif('2/27/2007','3/31/2007',1)SIA_Days=34由于matlab实际上是矩阵的计算,所以变量多可为向量形式,如我们可以把StrateDate和EndDate写成列向量,一次输入多个起始日和到期日。在此,一般用列向量,列的间隔符号是英语分号。例3:计算1998-03-01分别至2001-03-01,2002-03-01和2003-03-01之间的应计天数(ACT/ACT)。解:>>StartDate=['3/1/1998';'3/1/1998';'3/1/1998'];>>EndDate=['3/1/2001';'3/1/2002';'3/1/2003'];>>NumDays=daysdif(StartDate,EndDate)NumDays=109614611826特别注意:***作业1:请用matlab计算出下表中的应计天数Start-enddateSIAAct/360PSAISDA30E/3602007-2-27—2007-3-12007-2-28—2007-3-12008-2-28—2008-3-12008-2-28—2009-3-1例4:公司债券发行日是2000年3月1日,到期日为2006年3月1日,每年支付两次利息,交割日是2000年7月17日,息票率10%,面值100元,交割日和下一付息日(2000-09-01)之间的天数按30/360(European)计息。请计算应计利息。解法一:(人工计算)30E/360E制度下,半年是180天,交割日和下一付息日之间的天数,由于每月只算30天,所以是44天.那么该债券在本次结算时,应算从上一个付息日到交割日之间的天数,即从2000-03-01至2000-7-17之间的天数,显然这是180=44=136天。由于每半年付一次息,其利率实为10%/2=5%,所以应该利息AI为:AI=100×5%×136/180=3.7778解法二:>>IssueDate='3/1/2000';>>Settle='17-jul-2000';>>FirstCouponDate='1-sep-2000';>>Face=100;>>CouponRate=0.1;>>Period=2;>>Basis=6;AccruInterest=acrubond(IssueDate,Settle,FirstCouponDate,Face,CouponRate,Period,Basis)运行错误.我查了一下help原来是这个7.0版的matlab这里的basis最高只支持到3。无赖之下,basis=6只好用1来代。因为1是30/360,与6的30E/360较接近。AccruInterest=acrubond(IssueDate,Settle,FirstCouponDate,Face,CouponRate,Period,1)AccruInterest=3.7778格式二:用期数代替起始时间Rate2disc函数也允许用期数来把票息率转化为贴现率。毕竟,在现实中,贴现多以期数来计算。函数如下,这时相当于ValuationDate为零。Disc=rate2disc(Compounding,Rates,EndTimes,StartTimes)

Where:StartTimes列向量,指贴现期的起始期,一般设为OEndTimes列向量,实际上是产生现金流的期数上例也可以这样来计算:StartTimes=[0;0;0;0;0];EndTimes=[1;2;3;4;5];>>Disc=rate2disc(Compounding,Rates,EndTimes,StartTimes)格式一,用起止日:Rates=disc2rate(Compounding,Disc,EndDates,StartDates,ValuationDate)

格式二,用期数Rates=disc2rate(Compounding,Disc,EndTimes,StartTimes);

各变量含义同前,运行结果:Rates=0.05000.05600.06000.06500.07501.贴现率转票息率disc2rate三、计算内部收益率内部收益率是使投资现金流现值等于价格的收益率,其计算公式为:其中:Ci为第i年度现金流,P为债券价格,N为年数,r为内部收益率。Matlab计算函数:irr调用方式:Return=irr(Cashflow)例6:一项投资各期现金流如上表,请计算该投资的内部收益率是多少?解:>>Cashflow=[-5000,1000,2000,3000,4000];>>irr(Cashflow)ans=0.2727如果把这里的-5000改成-4000,那么ans=0.3825,这很容易理解。第0期第1期第2期第3期第4期-50001000200030004000四、现金流现值与终值1.现金流现值的计算现金流现值的计算公式是:matlab命令是:PesentVal=pvvar(Cashflow,Rte)PesentVal=pvvar(Cashflow,Rate,IrrCFDates)其中:IrrCFDates是指现金流发生的日期,Rate是指的贴现率.例8:已知贴现率为0.09,投资各时期的现金流如上表,求其再值。解:>>cashflow=[-10000,2500,2000,3000,4000];>>rate=0.09;>>irrcfdates=['01/12/2007''02/14/2008''03/03/2008''06/14/2008''12/01/2008'];>>PresentVal=pvvar(cashflow,rate,irrcfdates)PresentVal=142.1648注意:irrcfdates这个向量应写成列向量.此外,月和年要写成2位数,如3月1日不能写成3/1,只能写成03/01,这是因为列向量的各元素要保持一致。现金发放日期12-Jan-200714-Feb-20083-Mar-200814-Jun-20081-Dec-2008金额/元-10000250020030004000判断下列写法是否正确>>irrcfdates=['01/12/2007';'02/14/2008';'03/03/2008';'06/14/2008';'12/01/2008']

(正确的写法)>>irrcfdates=['1/12/2007';'2/14/2008';'3/3/2008';'7/14/2008';'12/1/2008'](错误的写法,格式不统一)>>irrcfdates=['1/12/2007''2/14/2008''3/3/2008''7/14/2008''12/1/2008'](错误的写法,格式不统一)>>irrcfdates=['1/12/2007','2/14/2008','3/3/2008','7/14/2008','12/1/2008'](错误的写法,写成了行向量)如果内部收益率每年都是变化的,怎么办?现金流现值的公式是怎样的?可变贴现率下现金流现值的计算:function[PreValFlow,PresetVal]=PV_variable(P,r)%可变贴现率下现金流现值的计算%计算可变贴现率和对应的现金流的现值.%P为各期现金流,r为贴现率向量,注意第0期的利率一定要设成0对应P第的一期应为负值,表示投资.%注意P为行向量,r也为行向量,此二向量的元素要一样多.否则计算会出错.[a,b]=size(r);fori=1:1:bC(i)=P(i)/((1+r(i))^(i-1));%再变成1/(1+ri)i(次方)endPV_variable=sum(C);%注意要转置PresetVal=PV_variable'各期现值为:'PreValFlow=C(见PV_variable.m文件)也可以用excel来计算,也很方便。见文件:可变贴现率情况下的现金流现值计算.xls例9已知四项共5000元的零息投资组合在其后第1-4年分别到期,现金流分别为:1000,2000,3000,4000元,贴现率分别为5%,6%,7%,8%,求这四年的现金流的现值是多少?解:利用我自编的可变现金流现值的函数PV_variable进行计算。cashflow=[-5000,1000,2000,3000,4000];rate=[0,0.05,0.06,0.07,0.08]PV_variable(cashflow,rate)PresetVal=3.1214e+003各期现值为:PreValFlow=1.0e+003*-5.00000.95241.78002.44892.9401现金流终值是债券到期时的价值。用fvvar函数。调用:FutureVal=fvvar(CashFlow,Rate,IrrCFDates)例10:题干同例7。求该现金流的终值。解:>>CashFlow=[-10000,2000,1500,3000,3800,5000];Rate=0.08;>>FutureVal=fvvar(CashFlow,Rate)FutureVal=2.5205e+003如果将FutureVal贴现到当前时刻就是现值。代码如下:FresentValue=FutureVal/(1+Rate)^5FresentValue=1.7154e+003贴现后的结果同例7。2.现金流终值五.计算赎回价格对于可赎回债券,当赎回时间小于等于一个计息周期时,公式较简单:当息票赎回时间大于一个息票期间时,公式较繁杂:,其中:RV:赎回时的价格;DSC:结算日到下一个似息票日的天数DSR:结算日到赎回日之间的天数M:每年的息票期间Nq:似息票期间个数Y:息票率这就是贴现,具体地,是每100元的现值调用方式:Price=zeroprice(Yield,Settle,Maturity,Period,Basis,EndMonthRule)输入参数:Yield:票息率Settle:结算日Maturity:到期日Period:(optional)付息频率Basis:(optional)应计天数法则EndMonthRule:(optional)月末法则输出参数:Price:零息券价格解:该债券到期日小于一个计息周期,也可以视为一个赎回(注意默认的赎回价格是100),在赎回期之前没有支付票息,距离到期日小于一个计算期间,所以按公式算可用上述第一式。下面用matlab解。>>Settle='24-Jun-1993';>>Maturity='1-Nov-1993';>>Period=2;>>Basis=0;>>Yield=0.04;>>Price=zeroprice(Yield,Settle,Maturity,Period,Basis)Price=98.6066例1

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论