收益波动率计算(清华 朱世武)
- 格式:ppt
- 大小:478.00 KB
- 文档页数:25
SAS金融计算清华朱世武数据集10r_1=r_1+r_2;if r_1=. Then r_1=0;else r_1=r_1;data stoindiv.r_shenzhen(rename=(r_1=r&x)); merge stoindiv.r_shenzhen a;by date;data stoindiv.r_shenzhen;set stoindiv.r_shenzhen;if r&x=. then r&x=0;else r&x= r&x;%mend a;%include "D:\基于SAS系统的金融计算光盘\Compufin\宏文本\深市全部A股.txt";run;2.3.4收益SAS数据集转换为EXCEL数据表proc transpose data=stoindiv.lg_shanghai out=stoindiv.lg_shanghai_tr; run;data stoindiv.lg_shanghai_tr_1;set stoindiv.lg_shanghai_tr;if _n_<200;run;proc transpose data= stoindiv.lg_shanghai_tr_1 out= stoindiv.lg_shanghai_1; data stoindiv.lg_shanghai_1;set stoindiv.lg_shanghai_1;format date yymmdd10.;run;set stoindiv.lg_shanghai_tr;if 201<=_n_<400;run;proc transpose data= stoindiv.lg_shanghai_tr_2 out= stoindiv.lg_shanghai_2; data stoindiv.lg_shanghai_2;set stoindiv.lg_shanghai_2;format date yymmdd10.;run;data stoindiv.lg_shanghai_tr_3;set stoindiv.lg_shanghai_tr;if 401<=_n_;11run;proc transpose data= stoindiv.lg_shanghai_tr_3 out= stoindiv.lg_shanghai_3;set stoindiv.lg_shanghai_3;format date yymmdd10.;run;proc export data=stoindiv.lg_shanghai_1outfile="d:\基于sas系统的金融计算光盘\compufin\lg_shanghai_1.xls"dbms=excel2000 replace;run;proc export data=stoindiv.lg_shanghai_2outfile="d:\基于sas系统的金融计算光盘\compufin\lg_shanghai_2.xls"dbms=excel2000 replace;run;proc export data=stoindiv.lg_shanghai_3 outfile="d:\基于sas系统的金融计算光盘\compufin\lg_shanghai_3.xls"dbms=excel2000 replace;run;同样,可以转换其他收益SAS数据集为相应的EXCEL表。
收益率波动率的计算收益率: ”,弓,…,弓 历史波动率:b 移动平均模型:用过去M 天的收益率的历史波动率来估计今天的波动率| M---- £侦一7),比如取M =20,40,60M - \ /=1% using moving average model to estimate volatility % date from 1990-12-19 to 2003-9-19 clear M=[20,60]; m=length(M);z=xlsread(,index ,);z 1 =datenum(l 990,12,19)-z(l, 1 );z2=z(:, 1 )+zl; x=z(,2); x=pnce2ret(x); n=length(x); for i=l:mfor j=l:n-M(i)+l0W1/2005AUWEOA01/01/199501/01/2000date86421BWS; 以111 1 o o o o o.o.o.o.o,0.Q.o.AW-C5OAa=x(j:M ①句・1); b(M(i) -fj-l,i)=std(a); end endio=find(b==0); b(io)=NaN; plot(z2(2:end),b) datetick('x\23);legend('2O days=60 days', 1) xlabel('date') ylabel('volatility)title('volatility of shanghai composite daily return with MA mode?)指数加权平均模型:I MM i I M /-1j=11~ Z4 I j=l £ 才 T! i=lM 2 '一1心Z 或1=1 M I= Z ----------- (J _ "2 n b ; =+ (1 _ 4)(7; _ U)2,=1 £质1=1r = 0 =>(7;2 = ji + (1 - A)?;2经验表明:一般对于日收益率4 = 0.94,对于月收益率4 = 0.97% using exponential weighted moving average model to estimate volatility>?=-石OAclearlamda=0.94;m=20;z=xlsread(,index') ;z 1 =datenum( 1990,12,19)-z( 1,1 );z2=z(1 )+zl;x=z(:,2);x=price2ret(x);n=length(x);s=l:m;nlamda=lamda.A(s-l);slamda=sum(nlamda);for i=l:n-m+la=x(i:m-l +i)';a 1 =a-mean(a);a2=al .A2;b(m-1 +i)=sqrt(sum(a2(end:-1:1 ).*nlamda/slamda));endio=find(b==0) ;b(io)=NaN;plot(z2(2:end),b)datetick('x*,23);xlabel('date')ylabel('volatility')title(r volatility of shanghai composite daily return with EWMA model1)%x=xlsread(!index l);y=x(:,2);z=price2ret(y);autocorr(z)parcorr(z)因此收益率过程可以如下刻画:。
4.1.2 通用计算程序数据集准备:(程序时点设为2000年12月31日)data a;set compufin.header_genius (keep=f0001 f0002 f0003 f0004);proc sort data=a;by f0001 ;run;data b (keep=f0001 gb002 gb004 gb008 gb009 gb016 gb017 gb018 );set compufin.shares_genius;proc sort data=b;by f0001 gb002;data c;merge a b;by F0001;if f0002=. then delete;if f0003=’A’ ; /*只算A股*/run;data c;set c;date=datepart(gb002);if date>'31dec2000'd then delete ; /*2000年12月31日,其它时点可修改此处*/ run;data c;set c;by f0001;if last.f0001;run;data c;set c;a_state= gb008+gb009;a_all= gb004-gb017-gb018; /*全部a股股本,求全市场股票比率修改此处*/run;data c_1 (keep=suma_state suma_all suma_pub ratio_state ratio_pub);set c end=aaa;suma_all+a_all;suma_state+a_state;suma_pub+gb016;ratio_state=100*suma_state/suma_all;ratio_pub=100* Suma_pub/suma_all;If aaa=1;put suma_state/Suma_pub/suma_all/Ratio_state /ratio_pub=;Run;A股计算结果:2000年12月31日:Suma_State=215044425739Suma_Pub=103400844064Suma_All=346763200649Ratio_State=62.01477704Ratio_Pub=29.81886309520001年8月31日:Suma_State=287393936240Suma_Pub=121828508426Suma_All=438426705492Ratio_State=65.551193082Ratio_Pub=27.787656842Suma_State=287393936240Suma_All=438426705492Ratio=65.5511930824.1.3 指数300成份股股本比例计算创建数据集STALL_GENIUS:data a;set compufin.header_genius (keep=f0001 f0002 f0003 f0004);proc sort data=a;by f0001 ;run;data b (keep=f0001 gb002 gb004 gb008 gb009 gb016 gb017 gb018 );set compufin.shares_genius;proc sort data=b;by f0001 gb002;data stall_genius;merge a b;by f0001;if f0002=. then delete;if f0003='A' ; /*只算A股*/run;data compufin.stall_genius;set stall_genius;date=datepart(gb002);if date>='18jan2001'd then delete ; /*2001年1月18日前全部A股*/run;data compufin.stall_genius;set compufin.stall_genius;by f0001;if last.f0001;run;求数据集C_1,股本数据集,包括2001年1月18日前全部A股股票并标识INX300_GENIUS中的股票。
基于NSS模型构建企业债收益率曲线郭琳北京科技大学2010级东凌经济管理学院金融工程系【摘要】企业债券市场是企业融资、有效配置资源的重要途径。
随着债券收益率曲线模型研究的不断发展,采取恰当的方法构造我国企业债收益率曲线具有理论和实践的双重重要意义。
NSS模型参数具有较强的经济含义,许多国家的中央银行采用该模型构建债券收益率曲线。
本文试图解决模型存在最优解对参数初始值设定较为敏感和收益率曲线受异常价格影响较大两个问题。
优化后的NSS模型符合实际经济情况,具有良好的适应性和稳健性,能够满足我国当前的国债市场需要。
【关键词】NSS模型收益率曲线零波动率利差企业债构建能够符合市场真实情况的企业债利率期限结构,有利于企业选择适合的融资手段,投资者分析研判价格走势,金融政策制定者检验政策实施效果。
一、NSS模型文献综述Nelson和Seigel模型是Nelson和Seigel(1987)提出的一个参数拟合模型。
通过建立远期瞬时利率的函数,从而推导出即期利率的函数形式。
Svensson(1994)对Nelson和Seigel的模型进行了改进,提高了模型计算短期债券价格的灵活性以及对形状复杂的利率期限结构的拟合能力。
朱世武(2004)认为NSS模型的近端拟合效果好。
周子康(2008)虽然通过扩展指数多项式的方法构建出NSM模型,得出NSM模型在多个方面优于NS、NSS模型的结论,但由于此模型容易导致远期利率曲线呈现幂指数上升的情况,在实证上还是不够稳定,而且暂时也未得到广泛应用。
综上所述,本文继续使用西方经典理论模型—NSS模型来构建我国企业债收益率曲线。
二、实证研究1.NSS模型介绍。
NSS模型用二次微分方程的等同解来表示瞬时远期利率,建立了一个与经济理论相协调的利率期限结构静态估计模型。
通过对远期利率的积分取平均值,可以得到即期利率的表达形式。
建立NSS模型的期限结构,见式(1)。
(1)从公式(1)当中,可以看出远期利率实质上是由短期、中期和长期利率三部分组成的。
12.2.1数据选取data ;weeks=('31dec2000'd-'01jan1995'd)/14;put weeks=;run;weeks=156.512.3.2 计算双周收益率/*计算市场组合双周收益率*/options nodate nonotes nosource;data index;set compufin.final;dweek=ceil((date-'01Jan95'd-6)/14); /*标记双周序号,1995年1月1日及以后的第一周为0,以后每两周加1*/data index(keep=dweek dwr_index);set index;if last.dweek=1 ; /*保留双周末数据*/by dweek;dwr_index=dif(index)/lag(index); /*计算双周收益率*/if dwr_index=. then delete; /*去掉空值*/run;/*通过DOS命令为计算个股双周收益率创建宏文本:char12.txt*//*第一步,在DOS的“d:\基于sas系统的金融计算光盘\stoindif”目录下键入“dir a6*.*/b >list.txt”,生成文件list.txt*//*第二步,生成宏文本*/data a;infile ' d:\基于SAS系统的金融计算光盘\stoindif\list.txt';informat fname $16.;input fname $;data a;set a;hexcd=substr(fname,2,6);format hexcd $6.;data a;set a;a='%a(';b=');' ;file "d:\基于SAS系统的金融计算光盘\stoindif\char12_1.txt" ;put a $ hexcd $ b $ ;run;/*根据复权个股数据库(stoindif)复权价计算个股双周收益率*/ data stock;delete;%macro a(a1);data a;set stoindif.a&a1.;dweek=ceil((date-'01Jan95'd-6)/14); /*标记双周序号*/hexcd="&a1.";data a(keep=dweek dwr hexcd);set a(where=(date<'01Jan01'd));if last.dweek=1 ; /*保留周末数据*/by dweek;dwr=dif(clpr_r)/lag(clpr_r); /*计算双周收益率*/data stock;set stock a(firstobs=2); /*去掉第一行,收益率为空*/%mend a;%include "d:\基于SAS系统的金融计算光盘\stoindif\char12_1.txt" ;proc sort;by dweek hexcd;run;12.3.3 计算无风险利率data deposit;set compufin.deposit_r;where '01Jan95'd<=date<='31Dec00'd;dweek=ceil((date-'01Jan95'd)/14); /*标记双周序号*/data deposit(keep=dweek dw_rf);set deposit;if last.dweek=0 then delete; /*保留周末数据*/by dweek;if dweek in(0,157) then delete;dw_rf=y_r/26; /* 一年有26个双周*/run;12.3.4 验证CAPM循环程序/*合并市场组合及个股双周收益率、无风险收益率*/data table;merge stock deposit index;by dweek;label dwr='个股双周收益率'dw_rf='无风险双周收益率'dwr_index='市场组合双周收益率'hexcd='股票代码';if hexcd=. then delete;proc sort;by hexcd dweek;run;/*循环计算过程*/data reg;/*后面要在reg里面存放最后一步日回归用的所有变量*/delete;run;%macro b(b1);data a;set table;where %eval(&b1.)<=dweek<=%eval(&b1.+15);/*分组过程,保留这一区间内的股票收益率、指数收益率*/proc reg outest=a noprint;/*在此区间内分组回归,得到每一只股票的Beta值,输出到数据集a*/model dwr=dwr_index;by hexcd;/*每支股票分别回归*/run;proc sort data=a;by dwr_index;/*在a中从小到大排列Beta*/run;data a(keep=hexcd group);/*在a中分15个组,只保留股票代码与组号*/set a nobs=nobs;x0=mod(nobs,15);x1=floor(nobs/15);if _n_ le x0*(x1+1) then group=ceil(_n_/(x1+1));if _n_ gt x0*(x1+1) then group=ceil((_n_/x1);proc sort data=a;by hexcd;run;%do i=%eval(&b1.+25) %to %eval(&b1.+34);/*在同一分组期内逐个计算“估值期”Beta值*/data b;set table;where %eval(&b1.+16)<=dweek<=&i. and dwr^=.;/*控制每次读相应数据行*/proc reg outest=b noprint; /*Beta和S值输出到b*/model dwr=dwr_index;by hexcd;run;data b;merge b(keep=hexcd dwr_index _rmse_ rename=(dwr_index=b _rmse_=s)) a;/*将b与a合并,加上组号,并只保留Beta和残差标准差S*/by hexcd;if group=. then delete; /*如果股票在“分组期”没有上市,则此处不参与计算*/proc sort;by group;run;proc means data=b noprint; /*每组Beta与S取简单平均*/by group;var b s;output out=b mean=b s; /*输出到b*/run;data b(keep=group s b bb); /*只保留回归用变量S、β、β平方*/set b;bb=b*b; /*加入beta的平方这个变量*/run;data c;set table;where dweek=%eval(&i.+1);/*“检验期”对应的一个数据点*/data c;merge c a;/*加上组号*/by hexcd;if group=. then delete;/*如果股票在“分组期”没有上市,则此处不参与计算*/proc sort;by group;run;proc means data=c noprint; /*组收益率简单平均*/by group;var dwr dwr_index;output out=c mean=dwr dwr_index;/*输出到c文件*/run;data b(keep=group dwr dwr_index b bb s dweek);merge c b; /*合并b、c,这样“估值期”得到的Beta、Beta平方、S和“检验期”的对应数据都到了一个表格中*/by group;dweek=%eval(&i.+1); /*加上序号*/run;data reg;set reg b; /*合并成大表*/run;%end;%mend b;%b(1);%b(11);%b(21);%b(31);%b(41);%b(51);%b(61);%b(71);%b(81);%b(91);%b(101);%b(111);%b(121);data reg;set reg;where dwr^=.;run;proc reg data=reg outest=out tableout noprint;/*将生成的reg表进行分组回归,得到相应参数*/model dwr=b bb s/dw;by dweek;run;/*检验结果*/data out1;set out;where _type_='PARMS';proc means data=out1 noprint; /*t检验,输出到out1*/var bb s b;output out=out1 t=t_bb t_s t_b probt=probt_bb probt_s probt_b mean=mean_bb mean_s mean_b;run;/*结果已输出到work.out中,这里加上日期并把t检验和参数估计放在同一行,以更好的呈现*/data out2;set out;keep dweek intercept b bb s _TYPE_;where _type_ in ('PARMS','T');proc sort;by dweek descending _type_;data out2(drop=_type_);set out2;intercept_t=lag(intercept);b_t=lag(b);bb_t=lag(bb);s_t=lag(s);if _type_='T' then delete;data a(keep=date dweek);set compufin.final;dweek=ceil((date-'01Jan95'd-6)/14);if dweek=lag(dweek) then delete;data out2;merge out2 a;by dweek;if intercept=. then delete;run;/*计算一阶自相关系数*/data a(drop=_type_ _freq_ probt_bb probt_s probt_b);set out1;do dweek=27 to 156;output;end;data out3;merge out2(drop=intercept_t b_t bb_t s_t date) deposit a;by dweek;if bb=. then delete;var1=bb;var2=s;var3=b-mean_b;var4=intercept-dw_rf;data out3;set out3;lag_var1=lag(var1);lag_var2=lag(var2);lag_var3=lag(var3);lag_var4=lag(var4);proc corr data=out3 out=out3 (type=corr) oprint; /*协方差矩阵输出到out3*/ var var1-var4 lag_var1-lag_var4;run;。