固定收益证券的matlab计算.ppt

上传人:牧羊曲112 文档编号:5100838 上传时间:2023-06-04 格式:PPT 页数:41 大小:1.17MB
返回 下载 相关 举报
固定收益证券的matlab计算.ppt_第1页
第1页 / 共41页
固定收益证券的matlab计算.ppt_第2页
第2页 / 共41页
固定收益证券的matlab计算.ppt_第3页
第3页 / 共41页
固定收益证券的matlab计算.ppt_第4页
第4页 / 共41页
固定收益证券的matlab计算.ppt_第5页
第5页 / 共41页
点击查看更多>>
资源描述

《固定收益证券的matlab计算.ppt》由会员分享,可在线阅读,更多相关《固定收益证券的matlab计算.ppt(41页珍藏版)》请在三一办公上搜索。

1、第二讲 固定收益证券的matlab计算,吴义能QQ:294808610E-mail:,第一节 固定收益基本知识,固定收益证券:一组稳定现金流的证券.广义上还包括了债券市场上的衍生产品及优先股.以债券为主.一.固定收益的品种国债是固定收益的重要形式,以贴现债券(discount security)与息票债券(coupon bonds)两种形式发行.,美国的固定收益证券可以分为以下几个品种:,1.(短期)国库券(Treasury bills,T-bills)期限小于一年,贴现发行,面值usu.110万美元.是流动性最高的债券品种,违约风险小,其利率usu当作无风险利率。2政府票据(Treasury

2、 notes,T-notes)即美国中期国债,期限110年,是coupon.3.长期国债(Treasury bonds,T-bonds)期限10年,面值110万美元,是coupon.4零息票债券(Zero-coupon bond)零息票债券是指买卖价格相对面值有较大折让的企业或市政债券。,本息剥离式国债,零息票债券往往由附息债券所”剥离”出来:购买息票国债的经纪人可以要求财政部停止债券的现金支付,使其成为独立证券序列,这时每一证券都具有获得原始债券收益的要求权.如一张10年期国债被剥离成20张半年期债券,每张都可视为零息票,它们到期日从6个月到10年不等,最后本多支付是另一张零息证券,所有的支

3、付都单独计算,并配有自己的CUSIP号码 由于这种债券息票被“剥离”了,因此被称为本息剥离式国债STRIPS(separate trading of registered interest and principal of securities).,5.美国CD存单美国CD存单(certificate deposit):由银行等金融机构向存款人发行的证券,存单上标有一个到期日和利率,并且以任意面值发行,可以买卖,偿还期限小于1年.6.回购协议(repurchase agreement)是短期抵押贷款.指一方向另一方出售证券的同时,承诺在未来的某一天按协定的价格将相同的证券买回,通常由借款方发起

4、并贷出证券,回购中涉及的证券通常具有较高的信用质量.回购协议的步骤:(1)以债券作为抵押借入资金;(2)经过一段时间,按照约定的价格买回抵押债券.,7.可转换债券(convertible security)可转换债券(简称可转债)是一种具有固定收益的证券,其特点是持有者可以转换为普通股股票,在合约的条款中规定了可转换债券转换为普通股的条件,持有者决定何时转换为股票.可转换债券介于普通股和普通债券之间,故又称股票类连接证券.可转债属于次级债券,如果企业破产,满足要求权的次序是:优先债权次级债可转债优先股普通股.,8.浮动利率债券(FRN)浮动利率债券(FRN,floating rate note

5、s)是偿还期内利率发生变化的债券.浮动利率债券具有以下几个特征:规定了利率上限与利率下限 基准利率大多为LIBOR,也可为汇率、股票指数、债券指数等;利率可以正向浮动,也可以反向浮动。,二固定收益相关概念,1交易日(trade date)交易日就是买卖双方达成交易的日期。但实际情况可能比这更复杂。2结算日(Settlement Date)指买入方支付价格和卖出方交割证券的日期。美国国债交割日为交易之后第一个营业日(T+1)。交割日也可以由交易者之间商定,如果交割日刚好支付利息,则债券当天出售者获得当天的利息支付,而债券的购买者获得其余款项。有时通过Fed Wine机构交割证券,交易日即为交割日

6、。3到期日(Maturity)指固定收益证券债务合约终止的日期。4本金(Principal)本金有时称面值(par value),是指固定收益票面金额,5票面利率(Coupon rate)即发行人支付给持有人的利息,有时也称名义利率(nominal rate).票面利率一般指按照单利计算的年利息率,利息支付的频率不同,实际利率当然就不同。6月末法则(end of month ruler)指当债券到期日在某月的最后一天,而且该月天数小于30天,这时有两种情况:到期日在每月固定日期支付;票息在每月的最后一天支付。Matlab默认的是第种情况。如:今天2011年2月28日,半每付息制,下一次发息日可

7、能是2011年8月28日,也可能是2011年8月31日,如果不用月末法则就是前者,如果用月末法则就是后者。,7起息日到交割日的天数(DCS)DSM:days from coupon to settlement):指从计息日(含)到交割日(不含)之间的天数。注意,付息日作为下一个利息期限的第一天而不计入DCS。8交割日距离到期日的天数(DSM)DSM:days from settlement to maturity):其一般规则是包括交割日而不包括到期日。,第二节 应计天数简介,应计天数是指,债券起息日或上一付息日至结算日的天数,在此期间发生的利息称为应计利息,matlab中可用help day

8、sdif代码查看。help daysdif DAYSDIF Days between dates for any day count basis.DAYSDIF returns the number of days between D1 and D2 using the given day count basis.Enter dates as serial date numbers or date strings.D=daysdif(D1,D2)D=daysdif(D1,D2,Basis)Optional Inputs:Compounding,Basis Inputs:D1-Scalar or

9、 Vector of dates.D2-Scalar or Vector of dates.,Optional Inputs:Basis-Scalar or Vector of day-count basis.Valid Basis are:0=actual/actual(default)1=30/360(SIA)2=actual/360 3=actual/365(NEW)4-30/360(PSA compliant)(NEW)5-30/360(ISDA compliant)(NEW)6-30/360(European)(NEW)7-act/365(Japanese),实务中计算方法如下:1.

10、Act/Act:按照实际天数计算,分平闰年;2.Act/360:一年360天;3.Act/365:一年365天;4.30/360(European):每月30天,每年360天,起始日或到期日为31日的改为30日;5.30/360(ISDA):每月30日,每年360天,起始日或到期日为31日改为30日,到期日为31日,起始日不为30日、31日,则不变;6.30/360(PSA):每月30日,每年360天,起始日或到期日为31日改为30日,到期日为31日,起始日不为30日、31日,则不变,2月最后一天为30日;7.30/360(SIA):每月30日,每年360天,起始日或到期日为31日改为30日,

11、到期日为31日,起始日不为30日、31日,则不变,不是闰年,起始日到期日都为2月28日,则都改为30日,闰年,起始日到期日都为2月29日,则改为30日;,8.Act/365(Japanese):每月30天,每年365天,不考虑闰年;由于各计数法则之间太难区别,我们只讲matlab的用法:格式:NumDays:=daysdiff(StrateDate,EndDate,Basis)日期的格式可以是:纯数字月/日/年的形式,如3/1/1999表示1999年3月1日,也可以是数字加英文月份的前三个字母,这时按日-月-年来排,如1-Mar-1999,在matlab 2010b版本中,也支持”“英文月前三

12、字母-日(数字)-年(数字)”的形式。,例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:daysd

13、if(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_D

14、ays=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=1096 1461 1826

15、,特别注意:,*作业1:请用matlab计算出下表中的应计天数,第三节 应计利息、贴现与现金流,一应计利息(Accrued interest)公式略。调用方式:AccruInterest=acrubond(IssueDate,Settle,FirstCouponDate,Face,CouponRate,Period,Basis)Period和Basis是可选项。Period指付息频率。Period=n表示一年付n次息。,例4:公司债券发行日是2000年3月1日,到期日为2006年3月1日,每年支付两次利息,交割日是2000年7月17日,息票率10%,面值100元,交割日和下一付息日(2000-

16、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-20

17、00;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

18、)AccruInterest=3.7778,二贴现率与票息率,格式一:Disc=rate2disc(Compounding,Rates,EndDates,StartDates,ValuationDate)where:ValuationDate is the date of observation for which the discount factors are calculated.In this particular example,use February 15,2000 as the beginning date for all interest-rate terms.StartDa

19、tes=15-Feb-2000;EndDates=15-Aug-2000;15-Feb-2001;15-Aug-2001;15-Feb-2002;15-Aug-2002;Compounding=2;ValuationDate=15-Feb-2000;Rates=0.05;0.056;0.06;0.065;0.075;Disc=rate2disc(Compounding,Rates,EndDates,StartDates,.ValuationDate)可见利率越高,贴现率越低,1.票息率转贴现率,格式二:用期数代替起始时间,Rate2disc函数也允许用期数来把票息率转化为贴现率。毕竟,在现实中

20、,贴现多以期数来计算。函数如下,这时相当于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,EndDa

21、tes,StartDates,ValuationDate)格式二,用期数Rates=disc2rate(Compounding,Disc,EndTimes,StartTimes);各变量含义同前,运行结果:Rates=0.0500 0.0560 0.0600 0.0650 0.0750,1.贴现率转票息率disc2rate,有五种息券,贴现率分别为3%,4%,5%,6%,7%,期限分别为1,2,3,4,5年,一年付一次息,请计算各票的票息率(贴现)。clear;Compounding=1;StartTimes=0;0;0;0;0;EndTimes=1;2;3;4;5;Disc=0.03:0.0

22、1:0.07 Rates=rate2disc(Compounding,Disc,EndTimes,StartTimes),Rates=0.9709 0.9246 0.8638 0.7921 0.7130,由于折现率太低,所以利率很高。,三、计算内部收益率,内部收益率是使投资现金流现值等于价格的收益率,其计算公式为:其中:Ci为第i年度现金流,P为债券价格,N为年数,r为内部收益率。Matlab计算函数:irr调用方式:Return=irr(Cashflow),例6:一项投资各期现金流如上表,请计算该投资的内部收益率是多少?解:Cashflow=-5000,1000,2000,3000,4000

23、;irr(Cashflow)ans=0.2727如果把这里的-5000改成-4000,那么ans=0.3825,这很容易理解。,四、现金流现值与终值,1现金流现值的计算现金流现值的计算公式是:matlab命令是:PesentVal=pvvar(Cashflow,Rte)PesentVal=pvvar(Cashflow,Rate,IrrCFDates)其中:IrrCFDates是指现金流发生的日期,Rate是指的贴现率.,例7:一项投资各年的现金流如下表,贴现率为0.08,求其现值。解:cashflow=-10000,2000,1500,3000,3800,5000;rate=0.08;pvva

24、r(cashflow,rate)ans=1.7154e+003 即:现值为1715.4。?请说说这项投资划得来吗?,例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

25、位数,如3月1日不能写成3/1,只能写成03/01,这是因为列向量的各元素要保持一致。,判断下列写法是否正确,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/200

26、8,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);for i=1:1:b C(i)=P(i)/(1+r(i)(i

27、-1);%再变成1/(1+ri)i(次方)end PV_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,2

28、000,3000,4000;rate=0,0.05,0.06,0.07,0.08PV_variable(cashflow,rate)PresetVal=3.1214e+003各期现值为:PreValFlow=1.0e+003*-5.0000 0.9524 1.7800 2.4489 2.9401,现金流终值是债券到期时的价值。用fvvar函数。调用:FutureVal=fvvar(CashFlow,Rate,IrrCFDates)例10:题干同例7。求该现金流的终值。解:CashFlow=-10000,2000,1500,3000,3800,5000;Rate=0.08;FutureVal=f

29、vvar(CashFlow,Rate)FutureVal=2.5205e+003如果将FutureVal贴现到当前时刻就是现值。代码如下:FresentValue=FutureVal/(1+Rate)5FresentValue=1.7154e+003 贴现后的结果同例7。,2现金流终值,五计算赎回价格,对于可赎回债券,当赎回时间小于等于一个计息周期时,公式较简单:当息票赎回时间大于一个息票期间时,公式较繁杂:,其中:RV:赎回时的价格;DSC:结算日到下一个似息票日的天数DSR:结算日到赎回日之间的天数 M:每年的息票期间Nq:似息票期间个数 Y:息票率,这就是贴现,具体地,是每100元的现值

30、,调用方式:Price=zeroprice(Yield,Settle,Maturity,Period,Basis,EndMonthRule)输入参数:Yield:票息率Settle:结算日Maturity:到期日Period:(optional)付息频率Basis:(optional)应计天数法则EndMonthRule:(optional)月末法则输出参数:Price:零息券价格,解:该债券到期日小于一个计息周期,也可以视为一个赎回(注意默认的赎回价格是100),在赎回期之前没有支付票息,距离到期日小于一个计算期间,所以按公式算可用上述第一式。下面用matlab解。Settle=24-Jun

31、-1993;Maturity=1-Nov-1993;Period=2;Basis=0;Yield=0.04;Price=zeroprice(Yield,Settle,Maturity,Period,Basis)Price=98.6066,例11 某债券结算日是1993年6月24日,到期日是1993年11月1日,每年付息2次,应计利息法则为ACT/ACT,票息为4%,试计算其价格。,解:Settle=24-Jun-1993;Maturity=15-Jan-2024;Period=2;Basis=0;Price=zeroprice(Yield,Settle,Maturity,Period,Basi

32、s)Price=29.8120可见债券提前34年左右赎回价格是多么的低。(注:张树德编的课本上的计算结果有误),例12 多个计息期间的赎回价格。如果某债券结算日是1993年6月24日,到期日是2024年1月15日,每年付息2次,应计利息法则为ACT/ACT,票息为10%,到期时的赎回价默认是100试计算其价格。,六.计算息券各期现金流及发生时间,函数:CFlowAmounts,CFlowDates=cfamounts(.CouponRate,Settle,Maturity,Period,Basis,EndMonthRule,IssueDate,FirstCouponDate,LastCouponDate,StartDate,Face)从Period开始是可选项。例:某息票票息为6%,结算日是2012年3月1日,到期日是2022年3月1日,应计天数法则是Act/Act,请计算各付息期及现金流。clear;settle=datenum(03-01-2012);maturity=datenum(03-01-2022);Period=2;Basis=0;couponrate=0.06;CFlows,CDates=cfamounts(couponrate,settle,maturity,Period,Basis);FlowDates=CFlows,CDates%写在一个矩阵中对照,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 生活休闲 > 在线阅读


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号