股票收益计算金融计算与建模清华大学朱世武_第1页
股票收益计算金融计算与建模清华大学朱世武_第2页
股票收益计算金融计算与建模清华大学朱世武_第3页
股票收益计算金融计算与建模清华大学朱世武_第4页
股票收益计算金融计算与建模清华大学朱世武_第5页
已阅读5页,还剩28页未读 继续免费阅读

下载本文档

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

文档简介

2.1.1收益定义假定某支金融资产在时刻t的价格为Pt

。百分比收益和连续复利收益的定义如下:单期百分比收益为k期百分比收益为2.1收益定义与加总当前1页,总共33页。单期连续复利收益为其中,k期连续复利收益为当前2页,总共33页。2.1.2收益加总对于百分比(复合)收益,单期收益一般比较小,于是,对年收益公式进行一阶泰勒(Taylor)展开得近似的年收益公式,年收益而对于投资组合的连续复利收益我们有下面的近似公式,加和方式(Aggregation)时序(Temporal)截面(Cross-Section)百分比收益(PercentReturns)连续复利收益(ContinuouslyCompoundReturns)当前3页,总共33页。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多期平均收益率计算当前4页,总共33页。2.2.1创建单期收益计算环境计算上证指数(Idx000001)和股票深发展(Stk000001)收盘价单期收益。这里要计算有收益有:年收益、季收益、月收益、周收益和日收益。

对期末收盘价加标识:dataa;setResDat.Idx000001;year=year(date);qtr=qtr(date);month=month(date);proc

sortdata=a;byyearqtrmonth;run;databb;seta;last_y=last.year;/*标出某年的最后一个交易日*/last_q=last.qtr;/*标出某季的最后一个交易日*/last_m=last.month;/*标出某月的最后一个交易日*/byyearqtrmonth;run;当前5页,总共33页。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;当前6页,总共33页。2.2.5周收益计算程序一:dataa;setResDat.Idx000001;wd=weekday(date);dif=dif(wd);dif2=dif(date);if(dif<0anddif^=.)ordif2>=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;当前7页,总共33页。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)。由此可以理解为什么这样设定表达式*/proc

sort;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;程序二当前8页,总共33页。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;程序三:当前9页,总共33页。datad;merger_weekb;bydate;datad;mergedc;bydate;ifr_pct=r_pct1andr_pct=r_pct2thenaa=1;elseaa=0;/*最后一个不一样*/run;datae;setd;ifaa=0;run;检测程序一、程序二和程序三的一致性:注:方法二和三是完全一致的,虽然方法一与二、三的最后一个观测不一致。因为方法一的最后一个观测是缺失值。当前10页,总共33页。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;当前11页,总共33页。2.2.7绘制收益图计算收益后,可以绘制收益对时间的散点图来发现其随时间增长的发展趋势。例如,对上面计算的相关收益,其对时间的散点图SAS程序如下。proc

gplotdata=r_day;plotr_pct*date/vref=0;plotr_log*date/vref=0;run;quit;选项VREF=要求在竖轴上的某个指定值处画一条垂直于此轴的参照线,该例程中其值为0。当前12页,总共33页。2.2.8多期平均收益率计算多期收益的度量包括计算多个单期收益的算术平均值和几何平均值。计算上证指数(IDX000001)收盘价1995~2005年间年平均、月平均和日平均收益。当前13页,总共33页。/*建立满足条件的数据集*/dataa1;setr_year;where1995<=year(date)<=2005;proc

print;run;/*对数据集转置*/proc

transposedata=a1out=a2;varr_pct;proc

print;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);proc

print;run;/*变量太多时,用数组的方法处理简单些*/%lett=%eval(2005-1995+1);dataa4(keep=amgm);seta2;arraycol(&t)col1-col&t;arrayc(&t)c1-c&t;gm0=1;doi=1to&t;c(i)=col(i)+1;gm0=gm0*c(i);end;gm=(gm0)**(1/&t))-1;am=mean(ofcol1-col&t);proc

print;run;平均年收益:当前14页,总共33页。一般来说,平均收益用的是几何平均收益,即上面程序中的GM。求几何平均收益时,还有更简单且更精确的方法,通过下面程序可以体会一下应用SAS编程的妙处。

dataa5;setbb;iflast_y=1and1997<=year(date)<=2005;run;dataa6;retainbeginend;seta5end=lastobs;if_n_=1thenbegin=clpr;/*将数据集第一个观测值的价格赋给变量begin*/iflastobsthendo;end=clpr;/*将数据集最后一个观测值的价格赋给变量end*/output;end;dataa6(keep=gm);seta6;T=2005-1997+1;gm=(end/begin)**(1/t)-1;proc

print;run;/*该方法主要优点是精确*/其它多期平均收益的计算留为习题。当前15页,总共33页。2.3多股票收益计算实际应用时,往往需要计算多个股票的收益并将这些收益放在一张数据表中。以下程序可以用于多股票日对数收益和百分比收益数据。2.3.1由最新股票信息数据集创建宏文本2.3.2由个股数据集目录文件创建宏文本2.3.3多股票收益计算程序2.3.4收益SAS数据集转换为EXCEL数据表当前16页,总共33页。2.3.1由最新股票信息数据集创建宏文本利用最新股票信息数据集Lstkinfo创建多股票宏文本:Stk.txt.data_null_;setResDat.Lstkinfo;a='%a(';b=',';c=');';file"Stk.txt";/*这里输出的宏文本存于默认的文件夹下,这样存贮不需要查看和保留的中间文件、可以避免以后引用该文件或不同机器拷贝程序时,需要重新创建文件夹的问题。*/puta$stkcd$b$lstknm$c$;run;当前17页,总共33页。创建沪市股票宏文本:SHStk.txtData_null_;setResDat.Lstkinfo;ifsubstr(stkcd,1,1)in('6','9')orsubstr(stkcd,1,2)='99';a='%a(';b=',';c=');';file"SHStk.txt";puta$stkcd$b$lstknm$c$;run;创建深市股票宏文本:SZStk.txt";Data_null_;setResDat.Lstkinfo;ifsubstr(stkcd,1,1)='0'orsubstr(stkcd,1,2)='20';a='%a(';b=',';c=');';file"SZStk.txt";puta$stkcd$b$lstknm$c$;run;当前18页,总共33页。2.3.2由个股数据集目录文件创建宏文本个股股票数据存在于目录ResDat下。目录ResDat下所有个股股票SAS数据集.SAS7BDAT文件列表与宏的形成过程如下。DOS操作系统下→进入ResDat→执行列目录文件命令:dirStk*.*/b>outlist在相应的目录下打开文件OUTLIST,可以看到文件前两行的结果如下:stk000001.sas7bdatstk000002.sas7bdat………这里DOS命令dir*.*/b中的参数/b表示只列出文件名。删除文件名stkcdref.sas7bdat。当前19页,总共33页。dataa;lengthfiles$9;infile"d:\ResDat\outlist";inputfiles$;iffiles='stkcdref.'thendelete;run;形成文件名数据集:当前20页,总共33页。Data_null_;seta;stkcd=substr(files,4,6);a='%a(';c=');';file"Stk1.txt";puta$stkcd$c$;run;创建目录ResDat下全部股票代码的宏文本:Stk1.txt.:当前21页,总共33页。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&x;where1995<=year(date)<=2005;adjclpr=clpr*Mcfacpr;/*用调整后的股价计算,Mcfacpr为累积股价调整乘子*/r_1=log(adjclpr)-log(lag(adjclpr));当前22页,总共33页。/*将所求的收益率合并到数据集ResDat.lg_shanghai中*/dataResDat.lg_shanghai(rename=(r_1=r&x));mergeResDat.lg_shanghaia;bydate;dataResDat.lg_shanghai;setResDat.lg_shanghai;ifr&x=.thenr&x=0;elser&x=r&x;%menda;%include"SHStk.txt";run;沪市日百分比收益计算程序:optionsnodatenonotesnosource;dataResDat.r_shanghai(keep=date);setResDat.Idx000001;where1995<=year(date)<=2005;当前23页,总共33页。%macroa(x,y);/*求日百分比收益率*/dataa(keep=dater_1);setResDat.stk&x;where1995<=year(date)<=2005;adjclpr=clpr*Mcfacpr;/*用调整后的股价计算*/r_1=(adjclpr-lag(adjclpr))/lag(adjclpr);/*将所求的收益率合并到数据集ResDat.r_shanghai中*/dataResDat.r_shanghai(rename=(r_1=r&x));mergeResDat.r_shanghaia;bydate;dataResDat.r_shanghai;setResDat.r_shanghai;ifr&x=.thenr&x=0;elser&x=r&x;%menda;%include"SHStk.txt";run;当前24页,总共33页。方法二:直接利用包括所有股票的行情分配数据集Qttndist。datareturn;setResDat.Qttndist;bystkcddate;adjclpr=Mcfacpr*Clpr;lag_adjclpr=lag(adjclpr);ifnotfirst.stkcdthenlagadjclpr=lag_adjclpr;return=(adjclpr-lagadjclpr)/lagadjclpr;keepstkcdlstknmdatereturn;run;注意:方法一、二计算收益数据的存贮方式不同。以下各节内容以方法一计算的结果为基础展开。当前25页,总共33页。proc

transposedata=ResDat.lg_shanghaiout=lg_shanghai_tr;run;datalg_shanghai_tr_1;setlg_shanghai_tr;if_n_<=220;run;proc

transposedata=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;proc

transposedata=lg_shanghai_tr_2out=lg_shanghai_2;datalg_shanghai_2;setlg_shanghai_2;run;2.3.4收益SAS数据集转换为EXCEL数据表当前26页,总共33页。datalg_shanghai_tr_3;setlg_shanghai_tr;if441<=_n_<=660;run;proc

transposedata=lg_shanghai_tr_3out=lg_shanghai_3;datalg_shanghai_3;setlg_shanghai_3;run;datalg_shanghai_tr_4;setlg_shanghai_tr;if661<=_n_;run;proc

transposedata=lg_shanghai_tr_4out=lg_shanghai_4;datalg_shanghai_4;setlg_shanghai_4;run;当前27页,总共33页。proc

exportdata=lg_shanghai_1outfile="d:\ResDat\lg_shanghai_1.xls"dbms=excel2000replace;run;proc

exportdata=lg_shanghai_2outfile="d:\ResDat\lg_shanghai_2.xls"dbms=excel2000replace;run;proc

exportdata=lg_shanghai_3outfile="d:\ResDat\lg_shanghai_3.xls"dbms=excel2000replace;run;proc

exportdata=lg_shanghai_4outfile="d:\ResDat\lg_shanghai_4.xls"dbms=excel2000replace;run;同样,可以转换其他收益SAS数据集为相应的EXCEL表。当前28页,总共33页。2.4投资组合收益计算2.4.1由最新股票信息数据集Lstkinfo创建宏文本挑选出1995年前上市的股票:%macroa(x);dataa;setResDat.Lstkinfo;ifyear(Lstdt)<&x;/*Lstdt为股票上市日期*/datay%eval(&x)_list;seta;a='%a(';c=");";file"AlistedBefore%str(&x).txt";puta$stkcd$c$;%menda;%a(1995);run;通过改变宏%a(1995)中的参数值1995,可以选择任意年份前上市的股票。当前29页,总共33页。2.4.2随机抽股票在上面得到的1995年前上市A股票中随机抽取20支,并创建包含这20支股票代码的宏文本RANDOM1995.TXT。

%macroa(x);procsql;/*sql过程创建视图*/createview_tmp_asselect*,ranuni(5)as_ran_fromy%eval(&x)_listorderbycalculated_ran_;quit;datarandom;set_tmp_(obs=20);drop_ran_;a='%a(';c=");";file"random%str(&x).txt";puta$stkcd$c$;%menda;%a(1995);run;当前30页,总共33页。2.4.3单个股票收益计算dataResDat.r_port20(keep=date);setResDat.Idx000001;where1995<=y

温馨提示

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

评论

0/150

提交评论