金融计算与建模(上)(清华大学,朱世武)_第1页
金融计算与建模(上)(清华大学,朱世武)_第2页
金融计算与建模(上)(清华大学,朱世武)_第3页
金融计算与建模(上)(清华大学,朱世武)_第4页
金融计算与建模(上)(清华大学,朱世武)_第5页
已阅读5页,还剩359页未读 继续免费阅读

下载本文档

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

文档简介

怎样学习金融计算与建模,清华大学经管学院朱世武ZhushwResdat样本数据:SAS论坛:,全书分为4大模块:1-9章为金融学基础指标计算模块;10-12为股票定价模块;13-18为风险度量模块;19-23为固定收益定价模块。每一模块的内容一般由三部分组成:金融理论与模型、算法实现和计算程序。其中,算法实现与计算程序全部以中国金融市场的实际问题为应用背景而设计。,本书不仅展现了应用SAS软件的技术,同时也会使读者对相关的金融专题有一个彻底的了解,会使读者的知识水平在金融理论、实务和统计模型的基础上,更深入到如何实现和应用。,本书有以下特点:以解决金融研究和实际问题为出发点,并不仅仅以教学为目的,给出的许多算法和实现程序具有相当的应用和参考价值;全方位、深层次地展现了SAS编程技术。详细阅读本书,会使读者的SAS编程技术水平跃上一个大台阶;每章的计算程序精心设计,思路清晰,许多语句都加上了注释,为阅读和理解好本书内容提供了可靠的保证。为读者在今后学习和实际工作提供了大量的可参考程序,可以作为有关SAS编程技术和金融计算的字典使用。专业金融数据网站的在线技术支持。本书得到了专业金融数据网站()的在线技术支持,提供配套数据库、程序下载与疑难问题解答等服务,方便读者学习。,在线教学支持网站RESSET锐思数据,Resdat样本数据:SAS论坛:,第1章本书金融数据介绍,清华大学经管学院朱世武ZhushwResdat样本数据:SAS论坛:,ResDat.为本书样本数据库,包括股票、固定收益等相关数据集。,创建SAS逻辑库ResDat,目录ResDat下为本书的全部样本数据。运行本书程序前,需要创建以本书样本数据库(ResDat)为物理地址的SAS逻辑库ResDat。,股票类样本数据,固定收益类样本数据,第2章股票收益计算,清华大学经管学院朱世武ZhushwResdat样本数据:SAS论坛:,2.1收益定义与加总2.2单个股票收益计算2.3多股票收益计算2.4投资组合收益计算,2.1.1收益定义,假定某支金融资产在时刻t的价格为Pt。百分比收益和连续复利收益的定义如下:单期百分比收益为k期百分比收益为,2.1收益定义与加总,单期连续复利收益为其中,k期连续复利收益为,2.1.2收益加总,对于百分比(复合)收益,单期收益一般比较小,于是,对年收益公式进行一阶泰勒(Taylor)展开得近似的年收益公式,年收益而对于投资组合的连续复利收益我们有下面的近似公式,,2.2单个股票收益计算,2.2.1创建单期收益计算环境2.2.2年收益计算2.2.3季收益计算2.2.4月收益计算2.2.5周收益计算2.2.6日收益计算2.2.7绘制收益图2.2.8多期平均收益率计算,2.2.1创建单期收益计算环境,计算上证指数(Idx000001)和股票深发展(Stk000001)收盘价单期收益。这里要计算有收益有:年收益、季收益、月收益、周收益和日收益。,对期末收盘价加标识:dataa;setResDat.Idx000001;year=year(date);qtr=qtr(date);month=month(date);procsortdata=a;byyearqtrmonth;run;,databb;seta;last_y=last.year;/*标出某年的最后一个交易日*/last_q=last.qtr;/*标出某季的最后一个交易日*/last_m=last.month;/*标出某月的最后一个交易日*/byyearqtrmonth;run;,2.2.2年收益计算,计算上证指数(Idx000001)的相应收益时,不需要用调整后的收盘价。datar_year(keep=dater_pctr_loglabel=年收益);setbb;iflast_y=1;/*取各年最后一个交易日的数据*/r_pct=dif(clpr)/lag(clpr);/*计算百分比收益*/r_log=log(clpr)-log(lag(clpr);/*计算对数收益*/*函数log(x)是以e为底的自然对数,其它对数函数还有log2(x),log10(x)*/run;,2.2.5周收益计算,程序一:dataa;setResDat.Idx000001;wd=weekday(date);dif=dif(wd);dif2=dif(date);if(dif=7thenindex=1;/*第二天的星期日小于第一天的星期日,或第二天与第一天的时间间隔大于7天时,表示第二天为新的一周*/elseindex=0;,dataa(keep=dateclprindex);seta;date=lag(date);clpr=lag(clpr);ifindex=1;datar_week(keep=dater_pctr_log);seta;r_pct=dif(clpr)/lag(clpr);r_log=log(clpr)-log(lag(clpr);run;,datab;setResDat.Idx000001;wk=int(date-3)/7+2);/*wk为周序号,设定1960年1月1日为第一周。由于1960年1月1日为周五,所以第1周共有3天。注意该周(1960年1月1日到3日)对应日期按SAS的标准分别为0,1和2(于是(date-3)/7都等于-1)。由此可以理解为什么这样设定表达式*/,procsort;bydate;run;datab;setb;last_wk=last.wk;bywk;run;datab(keep=dater_pct1r_log1);setb;iflast_wk=1;r_pct1=dif(clpr)/lag(clpr);r_log1=log(clpr)-log(lag(clpr);run;,程序二,datac;setResDat.Idx000001;last_wk=Wkflg;/*Wkflg;为周末交易日标识*/run;datac(keep=dater_pct2r_log2);setc;iflast_wk=1;r_pct2=dif(clpr)/lag(clpr);r_log2=log(clpr)-log(lag(clpr);run;,程序三:,datad;merger_weekb;bydate;datad;mergedc;bydate;ifr_pct=r_pct1andr_pct=r_pct2thenaa=1;elseaa=0;/*最后一个不一样*/run;datae;setd;ifaa=0;run;,检测程序一、程序二和程序三的一致性:,注:方法二和三是完全一致的,虽然方法一与二、三的最后一个观测不一致。因为方法一的最后一个观测是缺失值。,2.2.6日收益计算,datar_day(keep=dater_pctr_loglabel=日收益);setResDat.Idx000001;r_pct=dif(clpr)/lag(clpr);/*dif(clpr)等价于clpr-lag(clpr)*/r_log=log(clpr)-log(lag(clpr);run;,2.2.7绘制收益图,计算收益后,可以绘制收益对时间的散点图来发现其随时间增长的发展趋势。例如,对上面计算的相关收益,其对时间的散点图SAS程序如下。,procgplotdata=r_day;plotr_pct*date/vref=0;plotr_log*date/vref=0;run;quit;,选项VREF要求在竖轴上的某个指定值处画一条垂直于此轴的参照线,该例程中其值为0。,2.2.8多期平均收益率计算,多期收益的度量包括计算多个单期收益的算术平均值和几何平均值。计算上证指数(IDX000001)收盘价19952005年间年平均、月平均和日平均收益。,/*建立满足条件的数据集*/dataa1;setr_year;where1995=year(date)=2005;procprint;run;/*对数据集转置*/proctransposedata=a1out=a2;varr_pct;procprint;run;/*计算年平均收益*/dataa3(keep=amgm);seta2;c1=col1+1;c2=col2+1;c11=col11+1;,gm=(c1*c2*c3*.*c11)*(1/11)-1;am=mean(ofcol1-col11);procprint;run;/*变量太多时,用数组的方法处理简单些*/%lett=%eval(2005-1995+1);dataa4(keep=amgm);seta2;arraycol(,平均年收益:,一般来说,平均收益用的是几何平均收益,即上面程序中的GM。求几何平均收益时,还有更简单且更精确的方法,通过下面程序可以体会一下应用SAS编程的妙处。,dataa5;setbb;iflast_y=1and1997=year(date)outlist在相应的目录下打开文件OUTLIST,可以看到文件前两行的结果如下:stk000001.sas7bdatstk000002.sas7bdat这里DOS命令dir*.*/b中的参数/b表示只列出文件名。删除文件名stkcdref.sas7bdat。,dataa;lengthfiles$9;infiled:ResDatoutlist;inputfiles$;iffiles=stkcdref.thendelete;run;,形成文件名数据集:,Data_null_;seta;stkcd=substr(files,4,6);a=%a(;c=);fileStk1.txt;puta$stkcd$c$;run;,创建目录ResDat下全部股票代码的宏文本:Stk1.txt.:,2.3.3多股票收益计算程序,方法一:一只股票的行情与分配形成一个SAS数据集。每个SAS数据集计算一只股票的收益。并将计算结果按适当的形式合并到一个数据集中。,沪市日对数收益计算程序:optionsnodatenonotesnosource;/*不输出时间、注释和源程序到日志LOG上*/dataResDat.lg_shanghai(keep=date);setResDat.Idx000001;where1995=year(date)=2005;/*全部交易日期通过上证指数的行情取得*/%macroa(x,y);/*求日对数收益率*/dataa(keep=dater_1);setResDat.stk,/*将所求的收益率合并到数据集ResDat.lg_shanghai中*/dataResDat.lg_shanghai(rename=(r_1=r,%macroa(x,y);/*求日百分比收益率*/dataa(keep=dater_1);setResDat.stk,方法二:直接利用包括所有股票的行情分配数据集Qttndist。,datareturn;setResDat.Qttndist;bystkcddate;adjclpr=Mcfacpr*Clpr;lag_adjclpr=lag(adjclpr);ifnotfirst.stkcdthenlagadjclpr=lag_adjclpr;return=(adjclpr-lagadjclpr)/lagadjclpr;keepstkcdlstknmdatereturn;run;,注意:方法一、二计算收益数据的存贮方式不同。以下各节内容以方法一计算的结果为基础展开。,proctransposedata=ResDat.lg_shanghaiout=lg_shanghai_tr;run;datalg_shanghai_tr_1;setlg_shanghai_tr;if_n_=220;run;proctransposedata=lg_shanghai_tr_1out=lg_shanghai_1;datalg_shanghai_1;setlg_shanghai_1;formatdateyymmdd10.;run;datalg_shanghai_tr_2;setlg_shanghai_tr;if221=_n_=440;run;proctransposedata=lg_shanghai_tr_2out=lg_shanghai_2;datalg_shanghai_2;setlg_shanghai_2;run;,2.3.4收益SAS数据集转换为EXCEL数据表,datalg_shanghai_tr_3;setlg_shanghai_tr;if441=_n_=660;run;proctransposedata=lg_shanghai_tr_3out=lg_shanghai_3;datalg_shanghai_3;setlg_shanghai_3;run;datalg_shanghai_tr_4;setlg_shanghai_tr;if661=_n_;run;proctransposedata=lg_shanghai_tr_4out=lg_shanghai_4;datalg_shanghai_4;setlg_shanghai_4;run;,procexportdata=lg_shanghai_1outfile=d:ResDatlg_shanghai_1.xlsdbms=excel2000replace;run;procexportdata=lg_shanghai_2outfile=d:ResDatlg_shanghai_2.xlsdbms=excel2000replace;run;procexportdata=lg_shanghai_3outfile=d:ResDatlg_shanghai_3.xlsdbms=excel2000replace;run;procexportdata=lg_shanghai_4outfile=d:ResDatlg_shanghai_4.xlsdbms=excel2000replace;run;,同样,可以转换其他收益SAS数据集为相应的EXCEL表。,2.4投资组合收益计算,2.4.1由最新股票信息数据集Lstkinfo创建宏文本,挑选出1995年前上市的股票:%macroa(x);dataa;setResDat.Lstkinfo;ifyear(Lstdt)通过改变宏%a(1995)中的参数值1995,可以选择任意年份前上市的股票。,2.4.2随机抽股票,在上面得到的1995年前上市A股票中随机抽取20支,并创建包含这20支股票代码的宏文本RANDOM1995.TXT。,%macroa(x);procsql;/*sql过程创建视图*/createview_tmp_asselect*,ranuni(5)as_ran_fromy%eval(,2.4.3单个股票收益计算,dataResDat.r_port20(keep=date);setResDat.Idx000001;where1995=year(date)=2005;%macroa(x);dataa(keep=dater_1);setResDat.stk,对上面随机抽取20支股票,计算19952005年的日百分比收益:,dataResDat.r_port20(rename=(r_1=r,2.4.4股票组合的随机赋权重,对抽取的20支股票随机赋权重,构成投资组合。产生均匀分布0,1随机数20个,然后将其标准化,使所有权重的和为1。,方法一:datarv;id=1;retain_seed_3;do_i_=1to20;w=0+(1-0)*ranuni(_seed_);output;end;drop_seed_i_;,dataa(keep=sumwid);setrvend=obs_last;sumw+w;ifobs_last=1;id=1;datab(keep=w);mergerva;byid;w=w/sumw;run;,方法二:prociml;rv=uniform(repeat(0,20,1);/*0为种子值,20为随机数个数,1为随机数列数*/sum=rv+,;b=rv/sum;sumb=b+,;/*为验证权数相加是否为1作准备*/printsumb;/*看权数相加是否为1*/createbfromb;/*由矩阵b创建SAS数据集b*/appendfromb;quit;,2.4.5组合收益计算,由ResDat.R_PORT20得到数据集A,便于以后形成矩阵:,dataa(drop=date);setResDat.r_port20;if_n_=1thendelete;/*删除全为0的第1个观测*/arrays_all_;doovers;ifs=.thens=0;end;,prociml;usea;readallvar_num_intoxx;/*由数据集a的所有数值变量的观测创建矩阵xx*/createxxfromxx;/*由矩阵xx创建数据集xx*/appendfromxx;closexx;useb;readallintow;createwfromw;appendfromw;closew;aaa=xx*w;/*矩阵xx乘向量w*/createaaafromaaa;/*由矩阵aaa创建数据集aaa*/appendfromaaa;closeaaa;shownames;quit;run;,最后得到随机抽取20支股票投资组合的收益数据集R_PORT20:,dataa;setResDat.r_port20;if_n_=1thendelete;datar_port20;mergeaaaa(rename=(col1=r_port20);run;,第3章固定收益证券计算,清华大学经管学院朱世武ZhushwResdat样本数据:SAS论坛:,3.1收益计算3.2其它计算3.3绩效衡量3.4二叉树定价模型3.5习题,收益计算,内生收益率,固定收益证券收益率是一种利率,它能使现金流的现值等于初始投资的价格。,内生收益率(InternalRateofReturn)计算公式如下:,其中:P为价格($);为第i期现金流($);y为内生收益率;n为期数。,已知P,可以用试错法求内生收益率。试错法计算内生收益率步骤:1给出一个收益率;2用步骤1给出的收益率计算每笔现金流的现值;3加总步骤2得出的现金流现值;4将步骤3得出的现金流总现值与金融工具的价格作比较。当步骤3得出的现金流总现值比金融工具的价格大时,选择一个比步骤1大的收益率重复以上步骤。反之,选择一个更小的收益率进行重复。,例3.1假定一种金融工具有如表3.1的年金支付,金融工具的价格为7704美元,试求它的内生收益率。,表3.1年金支付情况,%macroa(r);data;p=2000/(1+,本例计算程序:,计算结果:r=10p=8081.4152039r=14p=7349.0709218r=12p=7701.624974将计算结果与7704相比较,得出12%为该金融工具的内生收益率,注:上例也可以直接用SAS函数yield=irr(1,-7704,2000,2000,2500,4000);函数irr的用法:IRR(freq,c0,cl,.,cn),freq表示每年产生现金流次数,c0-cn为现金流。或用Excel函数IRR(A1:A5),这里A1:A5记录现金流。计算结果一致。,到期收益率,到期收益率(YieldtoMaturity)是与债券联系在一起的术语,指投资者持有债券至到期日时所获得的内生收益率。即到期收益率也是一种内生收益率。,到期收益率的计算公式如下:,其中:P为价格($);C为半年期的票息($);y为到期收益率的一半;n为期数();Par为面值(到期价值)。,已知P,可以用试错法求到期收益率。因此,试错法计算到期收益率步骤:1给出一个收益率;2用步骤1给出的收益率计算每笔现金流的现值;3加总步骤2得出的现金流现值;4将步骤3得出的现金流总现值与金融工具的价格作比较。当步骤3得出的现金流总现值比金融工具的价格大时,选择一个比步骤1大的收益率重复以上步骤。反之,选择一个更小的收益率进行重复。,试错法计算到期收益率通用程序:,dataa;delete;Run;%macroa(r,n,d,par);dataa1;p1=0;%doi=1%to,p2=,例3.2假定发行者每6个月支付1000000美元给证券持有者并连续支付30次,到期后的支付额为20000000美元。发行时,发行者筹得资金为19696024美元。计算得知,资金总成本率为5.10%(半年期)。,利用通用程序,a(r,n,d,par)取值如下:%a(0.05,30,1000000,20000000);%a(0.0505,30,1000000,20000000);%a(0.051,30,1000000,20000000);,计算结果:Obsp1p2prr1n115372451.034627548.9720000000.0010.05.0030215285221.194561926.6019847147.7910.15.053015198759.444497265.3719696024.8110.25.1030将计算结果与该金融工具的价格19696024美元比较,5.10%为其到期收益率(半年期)。,注:上例也可以直接用SAS函数yield=yieldp(20000000,2000000/20000000,2,30,0.5,19696024);函数yieldp用法:YIELDP(A,c,n,K,k0,p),其中A表示面值,c为小数形式表示的名义年票息率,n为年付息次数,K为从现在起至到期日生于付息次数,k0为现在到下一个付息日的时间,p为价格。或用Excel函数yield=RATE(30,1000000,-19696024,20000000,0)。RATE用法:RATE(Nper,Pmt,Pv,Fv,Type),其中Nper表示付息次数,Pmt表示票息金额,Pv表示价格(初期现金流出,故为负值),Fv表示期末现金流,Type表示付款时间在期初还是期末,0或忽略表期末。计算结果一致。,有效年利率计算,银行存款中有名义年利率和有效年利率,这两种利率中较高的一个是有效年利率。有效年利率与周期性利率之间的换算关系:其中:m为每年支付的频率。,例3.5半年期周期性利率为4%时有效年收益率为1.042-1=8.16%。如果利息按季支付,那么周期性利率为2%时有效年利率为8.24%。,计算程序:%macroa(r,m);data;i=(1+,计算结果:r=2,i=0.08243216,注:上例也可以直接用SAS函数r=compound(1,1.02,.,0.25);函数compound的用法:COMPOUND(a,f,r,n),其中a表示期初值,f表示期末值,r为有效年利率,n为年付息次数。也可以用excel函数r=EFFECT(0.08,4)。EFFECT(nominal_rate,npery)。,三种收益率之间的关系,债券当前收益率定义如下:,表3.2三种收益率之间的关系,例3.6计算一种票息率为6%,价格为700.89美元的18年期债券的当前收益率和到期收益率。假定这种债券5年内第一次被赎回的价格为1030美元,该债券的票息为每6个月支付30美元,连续支付10次。求该债券第一个赎回日的收益率。,利用通用程序,a(r,n,d,par)取值如下:,%a(0.056,10,30,1030);%a(0.0585,10,30,1030);%a(0.061,10,30,1030);%a(0.0635,10,30,1030);%a(0.066,10,30,1030);,%a(0.0685,10,30,1030);%a(0.071,10,30,1030);%a(0.0735,10,30,1030);%a(0.076,10,30,1030);,第一个赎回日收益率计算,计算结果:Obsp1p2prr1n1225.048597.308822.35611.25.60102222.380583.349805.72911.75.85103219.760569.749789.50912.26.10104217.187556.496773.68312.76.35105214.659543.582758.24113.26.60106212.176530.997743.17313.76.85107209.737518.731728.46814.27.10108207.340506.777714.11714.77.3510204.985495.125700.11015.27.6010比较得出,债券第一个赎回日的收益率为15.2%。,清算日处于两个付息日之间的到期收益率计算,清算日处于两个付息日之间的到期收益率计算公式:其中:P为全价;C为半年的票息支付;y为到期收益率的一半;w=;n为票息支付的次数;Par为到期价值。,例3.7假设有一种票息率为10%的公司债券在2003年3月1日到期。该债券的全价为118.788美元,清算日在1997年7月17日。计算该债券的到期收益率。表3.3为该债券的日期与对应现金流,计算程序的第一段有相关数据的输出。,表3.3日期与对应的现金流,计算程序:data;date0=01mar1997d;date1=17jul1997d;date2=01sep1997d;days02=datdif(date0,date2,30/360);/*美国公司债适合30/360标准*/days12=datdif(date1,date2,30/360);n=2*(2003-1997);w=days12/days02;putdays02/days12/n/w;callsymput(n,n);/*创建一个值来自data步的宏变量n*/callsymput(w,w);/*创建一个值来自data步的宏变量w*/,dataa;delete;%macroa(r);dataa1;p1=0;doi=1to,dataa(drop=i);setaa1;w=,计算结果:Obsp1p2prr1wn149.258466.9691116.2277.263.6300.2444411248.994066.2108115.2057.473.7350.2444411于是,当该公司债券半年期利率为3.63%时,能使其现金流的现值等于其全价118.78美元。所以这种债券的到期收益率为7.26%,即23.63%。,注:上例也可以直接用SAS函数YIELD=YIELDP(100,0.1,2,12,0.12222,118.788);或EXCEL函数YIELD(DATE(1997,7,17),DATE(2003,3,1),0.1,115.010,100,2),函数yield用法:YIELD(settlement,maturity,rate,pr,redemption,frequency,basis),其中Settlement为成交日,Maturity为到期日,Rate为年票息率,Pr价格,Redemption为净价,Frequency为年付息次数,Basis为日计数基准类型(0或省略为30/360,1为实际天数/实际天数,2为实际天数/360,3为实际天数/365,4为欧洲30/360)。,投资组合到期收益率计算,投资组合到期收益率的计算步骤:1确定投资组合中所有证券的现金流;2找出一个利率;3用第二步利率得到的现金流现值和与投资组合的市场价值进行比较;4根据第三步的比较结果决定是否重复上述计算。,例3.9现有三种债券,假定每种债券的票息支付日相同。投资组合的市场价值为57259000美元。投资组合中每种债券的现金流及整个投资组合的现金流由表3.5列出。,表3.5三种债券投资组合的现金流,%macroa(y);dataa;ap1=0;don=1to9;ap1=ap1+350000/(1+,datab;bp1=0;don=1to13;bp1=bp1+1050000/(1+,datac;cp1=0;don=1to5;cp1=cp1+900000/(1+,%a(0.0476966);dataabc;mergeabc;p=ap+bp+cp;putp=;run;,输出结果:p=57259006.946比较得知,该投资组合的到期收益率为9.53932%(即24.76966%)。注:本例程序与本章开始的计算到期收益率通用程序的功能相同,但算法设计不同,其它计算,浮动利率证券的贴现差额计算公式:,浮动利率=参考利率+指数利差,贴现差额计算步骤:1在假定参考利率在证券到期前保持不变的条件下,计算现金流;2选出一个差额;3将现金流贴现;4将步骤3计算出来的现金流现值与证券的价格作比较,如果现金流的现值等于证券的价格,则贴现差额等于步骤2中假定的差额。,例3.10假定有一6年期的浮动利率证券。该证券的价格为99.3098美元,按参考利率加上80个基本点(指数利差)向外支付,参考利率的当前值是10%。这种证券的票息率每6个月调整一次,票息率为5.4%,到期价值为100美元。,表3.6不同贴现差额的计算结果,dataa;delete;%macroa(y,z,x);dataa1;don=1to12;ifn12thenp,dataa;mergeaa1;%menda;%a(0.05,0.004,80);%a(0.05,0.0042,84);%a(0.05,0.0044,88);%a(0.05,0.0048,96);%a(0.05,0.005,100);procprintdata=anoobs;run;,计算程序:,由计算结果得出,贴现差额应为96个基本点。,债券价格与必要收益率,例3.11表3.7给出了票面价值为1000美元、必要收益率从5%14%的20年期、票息率为9%的债券价格。,表3.7必要收益率与债券价格关系,dataa;delete;%macroa(y);dataa1;p1=45*(1-(1/(1+,%a(0.03);%a(0.035);%a(0.04);%a(0.045);%a(0.05);%a(0.055);%a(0.06);%a(0.065);%a(0.07);procprintdata=a;run;,结果:,Obsp1p2py11129.62372.4311502.06521040.16306.5571346.7263960.98252.5721213.5574890.67208.2891098.9685828.07171.9291000.0096772.16142.046914.20107722.08117.463839.54118677.0897.222774.31129636.5580.541717.091310599.9366.780666.7114,不含期权债券价格与收益率关系图:procgplotdata=a;plotp*y=1;symbol1v=nonei=joinr=1c=black;title2不含期权债券价格与收益率关系图;labelp=价格y=必要收益率;run;,债券价格时间轨迹,例3.12列出面值为1000美元,期限为20年,票息率为9%,必要收益率为12%的债券逼近到期日时的债券价格情况。,title2;dataa;don=40to0by-2;p1=45*(1-(1/(1+0.06)*n)/0.06;p2=1000*(1/(1+0.06)*n);p=p1+p2;year=n/2;output;end;,procprintdata=anoobs;varyearp1p2p;run;,生成图表程序:,打印列表结果:YearP1P2P20677.08397.22774.3119668.071109.24777.31182.503890.00972.5000.0001000.001000.00,假定必要收益率不变的情况下,贴水债券时间轨迹图程序:dataa;seta;p0=1000;procgplotdata=a;plotp*year=1p0*year=2/overlay;symbol1v=nonei=joinr=1c=black;symbol2v=nonei=joinr=1c=black;title2假定必要收益率不变的情况下,贴水债券时间轨迹;labelp=价格year=剩余到期年数;run;,例3.14假设有一种票息率为10%的公司债券,2003年3月到期,到期价值为100美元,清算日在1997年7月17日,若必要收益率为6.5%,求债券价格(适用30/360)。,dataa;delete;%macroa(y);dataa1;date1=17jul1997d;date2=01sep1997d;days1=datdif(date1,date2,30/360);w=days1/180;callsymput(x,w);/*创建一个值来自data步的宏变量x*/p1=0;don=1to12;p1=p1+5/(1+,dataa1;seta1end=lasobs;iflasobs;p2=105/(1+,计算结果:p=123.51,注:可以用SAS函数直接计算:pv=pvp(100,0.1,2,12,0.1222,0.065)。函数PVP用法:PVP(A,c,n,K,k0,y),其中A表示面值,c表示名义年票息率,n为年付息次数,K为生于付息次数,k0为现在到下一次付息日的间隔,y为必要收益率。也可以用EXCEL函数PRICE(DATE(1997,7,17),DATE(2003,3,1),0.1,0.065,100,2)。PRICE(settlement,maturity,rate,yld,redemption,frequency,basis),注意,这里计算的是净价,需要进行调整得到全价。,首次发行贴水债券的债务处理,若首次发行的债券是贴水债券,则随着时间接近到期日,债券价格就接近票面价格,即价格有一个上升的趋势。在税收申报时,为了准确计算资本利得,有必要区分价格的上升是由于接近到期日还是由于市场行为引起的。因此,必须对发行价格进行调整,以便计算资本利得,原则上采用持续收益法。,首次发行贴水债券的债务处理过程:,1.计算年利息,即申报的毛收入,为调整后的发行价格与发行时到期收益率的乘积;2.计算票面利息;3.计算当年摊还的发行贴水额,为年利息(毛收入)与票面利息之差;4.计算调整后的发行价格,为当年摊还的首次发行贴水额与原发行价格之和。,例3.15票息率为4%(半年付一次息)的5年期债券,以7683美元的价格发行,赎回价值为10000美元。假设该债券的到期收益率为10%,求调整后的发行价格。,dataa;p=7683;don=1to10;year=n/2;t=p*0.05;c=10000*0.02;b=t-c;p=b+p;putyear=p=t=c=b=;output;end;labelyear=持有年限t=申报的毛收入,c=票面利息b=调整的发行贴水p=调整后的发行价格;run;datab;seta;optionsnocenter;procprintdata=blabelnoobs;varyeartcbp;title以持续收益法调整发行价格;title;options;run;,输出结果:持有年限年利息(毛收入)票面利息当期摊还的发行贴水调整后的发行价格0.5384.150200184.1507867.151.0393.358200193.3588060.511.5403.025200203.0258263.532.0413.177200213.1778476.712.5423.835200223.8358700.543.0435.027200235.0278935.573.5446.779200246.7799182.354.0459.118200259.1189441.474.5472.073200272.0739713.545.0485.677200285.6779999.22,债券久期计算,久期是反映债券价格波动的一个指标。它对到期时间进行加权平均,权重等于各期现金流的现值占总债券现金流现值的比例。久期实际表示的是投资者收回初始投资的实际时间。,久期与修正久期计算,麦考雷(Macaulay)久期的计算公式:麦考雷久期(以期间计)=麦考雷久期(年)=麦考雷久期(以期间计)/k其中:PVCFt为以t期对应的市场普遍收益率进行贴现得到的债券在第t期的现金流现值;n为债券持有期内现金流的期间总数;TPV为债券各期现金流的总现值;k为每年支付现金流的次数。,修正久期=其中:PVCFt为以t期对应的市场普遍收益率进行贴现而得债券在第t期的现金流现值;n为债券持有期内现金流的期间总数;TPV为债券各期现金流的总现值;Y为到期收益率的一半。,债券组合的久期计算公式:债券组合的久期=,其中:,债券i市值总和在债券组合市值总和中所占的比重;,债券i的修正久期;,债券组合中债券的个数。,例3.16面值为100美元,票息率为10%的5年期债券,收益率为10%,计算久期(以年计)及修正久期。,dataa;c2=0;tc2=0;don=1to10;t=n;ifn10thenc=5;elseifn=10thenc=105;a=1/(1+0.05)*n);c1=c/(1+0.05)*n);tc1=t*c1;c2=c2+c/(1+0.05)*n);tc2=tc2+t*c/(1+0.05)*n);ifn=10thend=tc2/(c2*2);md=d/(1+0.05);output;end;,datab;seta;dropc2tc2n;labelt=时间c=现金流a=1美元的现值c1=现金流的现值tc1=t*pvcfd=久期(以年计)md=修正久期;procprintdata=blabelnoobs;title久期及修正久期;vardmd;run;,输出结果:久期(以年计)修正久期4.053913.86087,注:修正久期可直接用SAS函数计算:Modifdur=DURP(100,0.1,2,10,0.5,0.1);函数DURP用法:DURP(A,c,n,K,k0,y),其中A表示面值,c表示名义年票息率,n为年付息次数,K为生于付息次数,k0为现在到下一次付息日的间隔,y为收益率。或用EXCEL函数,久期=DURATION(DATE(1995,1,1),DATE(2000,1,1),0.1,0.1,2)函数duration的用法:DURATION(settlement,maturity,coupon,yld,frequency,basis)。修正久期=MDURATION(DATE(1995,1,1),DATE(2000,1,1),0.1,0.1,2),mduration用法同duration.,例3.19面值为100美元,票息率为10%,到期收益率为10%的5年期债券,以平价出售,计算久期。,%macrod(i,y,p);dataa;x=100*(,输出结果:d=8.1078216756,修正久期的近似计算,近似久期=其中:V-为收益率下降证券的估计价格;V+为收益率上升证券的估计价格;V0为证券初始价格;为证券收益率的变化。,例3.20票息率为7%,到期收益率为10%的20年期债券,以74.26美元的价格出售,收益率上升或下降20个基本点的价格变化如下所示,试计算近似修正久期。V-=75.64468623V+=72.917291682V0=74.261370469=0.002(半年变化10个基本点),收益率上升或下降20个基本点的债券初始价格计算程序:,dataa;delete;%macroa(n,y,cupon,par);dataa1;p1=0;%doi=1%to,dataa;setaa1;putp=;%menda;%a(40,0.05,0.035,100);%a(40,0.052,0.035,100);%a(40,0.048,0.035,100);run;,p=74.261370469p=71.611134614p=77.068604183,近似久期计算程序:,%macromd(Vu,Vd,V,y);dataa;md=(,输出结果:MD=9.15701589结果接近精确值md=9.1802370384,精确值计算程序:,%macrod(y,cupon,period,p0);dataa;c2=0;tc2=0;don=1to,ifn=,输出结果为:md=9.1802370384,债券凸度计算,凸度(分期限计算)=凸度(按年计算)=凸度(分期限计算)/零票息债券的凸度=其中:PVCFt为以第t期对应的收益率贴现得到的第t期现金流现值;n为总的时期数;Y为到期收益率的一半;PVTCF为以到期收益率贴现得到的各期现金流总现值;为每年付息的次数。,例3.21假设面值为100美元,5年期的票息率为8%的债券,每半年付息。假设该债券的初始收益率为10%,计算该债券的凸度。,%macrod(y,cupon,period,p0);dataa;c2=0;tc2=0;don=1to,ifn=,计算结果:凸度(以半年记)concave=78.29424228凸度(以年计)yearlyconcave=19.57356057,注:也可以用SAS函数直接计算:convx=convxp(100,0.08,2,10,0.5,0.1);函数convxp的用法:CONVXP(A,c,n,K,k0,y),其中A表示面值,c表示名义年票息率,n为年付息次数,K为生于付息次数,k0为现在到下一次付息日的间隔,y为收益率。,例3.22假设面值为100美元,5年期的零息票债券,年收益率为10%,计算凸度。,%macroconcave(n,y);dataa;concave=,计算结果:凸度concave=99.77324263,计算凸度引起的价格变化,凸度引起价格变化百分比的估计值=,例3.24面值为100美元,期限为15年的票息率为8%的债券,每半年付息,其初始收益率为10%。若收益率由10%增长到13%,计算凸度引起的价格变化。,首先计算年凸度:只需要将上面凸度计算程序中的宏参数值改为%d(0.05,4,30,100)即可求得年凸度为94.3571。,%macrovp(x,y);dataa;caused=0.5*,计算结果:凸度引起的价格变化为caused=4.2460695%,美元凸度,美元凸度=凸度初始价格.为确定美元引起的价格变化幅度,可以利用以下公式:凸度解释的价格变化幅度=,例3.25期限为15年的票息率为8%的债券,收益率为10%,计算每100美元面值债券的美元凸度。,首先计算凸度和初始价格:凸度=94.36初始价格=84.627548973凸度前面已经计算过,初始价格的计算

温馨提示

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

评论

0/150

提交评论