为了正常的体验网站,请在浏览器设置里面开启Javascript功能!
首页 > 02股票收益计算

02股票收益计算

2010-03-18 38页 ppt 1MB 30阅读

用户头像

is_232407

暂无简介

举报
02股票收益计算第2章股票收益计算清华大学经管学院朱世武Zhushw@sem.tsinghua.edu.cnResdat样本数据:www.resset.cnSAS论坛:www.resset.cn2.1收益定义与加总2.2单个股票收益计算2.3多股票收益计算2.4投资组合收益计算2.1.1收益定义假定某支金融资产在时刻t的价格为Pt。百分比收益和连续复利收益的定义如下:单期百分比收益为k期百分比收益为2.1收益定义与加总单期连续复利收益为其中,k期连续复利收益为2.1.2收益加总对于百分比(复合)收益,单期收益一般比较小,于是,对年收益公式进行...
02股票收益计算
第2章股票收益计算清华大学经管学院朱世武Zhushw@sem.tsinghua.edu.cnResdat样本数据:www.resset.cnSAS论坛:www.resset.cn2.1收益定义与加总2.2单个股票收益计算2.3多股票收益计算2.4投资组合收益计算2.1.1收益定义假定某支金融资产在时刻t的价格为Pt。百分比收益和连续复利收益的定义如下:单期百分比收益为k期百分比收益为2.1收益定义与加总单期连续复利收益为其中,k期连续复利收益为2.1.2收益加总对于百分比(复合)收益,单期收益一般比较小,于是,对年收益公式进行一阶泰勒(Taylor)展开得近似的年收益公式,年收益而对于投资组合的连续复利收益我们有下面的近似公式,加和方式(Aggregation)时序(Temporal)截面(Cross-Section)百分比收益(PercentReturns)连续复利收益(ContinuouslyCompoundReturns)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<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;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)收盘价1995~2005年间年平均、月平均和日平均收益。/*建立满足条件的数据集*/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(&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);procprint;run;平均年收益:一般来说,平均收益用的是几何平均收益,即上面程序中的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;procprint;run;/*该方法主要优点是精确*/其它多期平均收益的计算留为习题。2.3多股票收益计算实际应用时,往往需要计算多个股票的收益并将这些收益放在一张数据表中。以下程序可以用于多股票日对数收益和百分比收益数据。2.3.1由最新股票信息数据集创建宏文本2.3.2由个股数据集文件创建宏文本2.3.3多股票收益计算程序2.3.4收益SAS数据集转换为EXCEL数据表2.3.1由最新股票信息数据集创建宏文本利用最新股票信息数据集Lstkinfo创建多股票宏文本:Stk.txt.data_null_;setResDat.Lstkinfo;a='%a(';b=',';c=');';file"Stk.txt";/*这里输出的宏文本存于默认的文件夹下,这样存贮不需要查看和保留的中间文件、可以避免以后引用该文件或不同机器拷贝程序时,需要重新创建文件夹的问题。*/puta$stkcd$b$lstknm$c$;run;创建沪市股票宏文本: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;2.3.2由个股数据集目录文件创建宏文本个股股票数据存在于目录ResDat下。目录ResDat下所有个股股票SAS数据集.SAS7BDAT文件列表与宏的形成过程如下。DOS操作系统下→进入ResDat→执行列目录文件命令:dirStk*.*/b>outlist在相应的目录下打开文件OUTLIST,可以看到文件前两行的结果如下:stk000001.sas7bdatstk000002.sas7bdat………这里DOS命令dir*.*/b中的参数/b表示只列出文件名。删除文件名stkcdref.sas7bdat。dataa;lengthfiles$9;infile"d:\ResDat\outlist";inputfiles$;iffiles='stkcdref.'thendelete;run;形成文件名数据集:Data_null_;seta;stkcd=substr(files,4,6);a='%a(';c=');';file"Stk1.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&x;where1995<=year(date)<=2005;adjclpr=clpr*Mcfacpr;/*用调整后的股价计算,Mcfacpr为累积股价调整乘子*/r_1=log(adjclpr)-log(lag(adjclpr));/*将所求的收益率合并到数据集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;%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;方法二:直接利用包括所有股票的行情分配数据集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:\ResDat\lg_shanghai_1.xls"dbms=excel2000replace;run;procexportdata=lg_shanghai_2outfile="d:\ResDat\lg_shanghai_2.xls"dbms=excel2000replace;run;procexportdata=lg_shanghai_3outfile="d:\ResDat\lg_shanghai_3.xls"dbms=excel2000replace;run;procexportdata=lg_shanghai_4outfile="d:\ResDat\lg_shanghai_4.xls"dbms=excel2000replace;run;同样,可以转换其他收益SAS数据集为相应的EXCEL表。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,可以选择任意年份前上市的股票。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;2.4.3单个股票收益计算dataResDat.r_port20(keep=date);setResDat.Idx000001;where1995<=year(date)<=2005;%macroa(x);dataa(keep=dater_1);setResDat.stk&x;where1995<=year(date)<=2005;adjclpr=clpr*Mcfacpr;/*用调整后的股价计算*/r_1=(adjclpr-lag(adjclpr))/lag(adjclpr);对上面随机抽取20支股票,计算1995~2005年的日百分比收益:dataResDat.r_port20(rename=(r_1=r&x));mergeResDat.r_port20a;bydate;dataResDat.r_port20;setResDat.r_port20;ifr&x=.thenr&x=0;elser&x=r&x;%menda;%include"Random1995.txt";run;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;
/
本文档为【02股票收益计算】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索