收藏 分享(赏)

A股票收益计算.pdf

上传人:精品资料 文档编号:10701836 上传时间:2019-12-29 格式:PDF 页数:38 大小:507.68KB
下载 相关 举报
A股票收益计算.pdf_第1页
第1页 / 共38页
A股票收益计算.pdf_第2页
第2页 / 共38页
A股票收益计算.pdf_第3页
第3页 / 共38页
A股票收益计算.pdf_第4页
第4页 / 共38页
A股票收益计算.pdf_第5页
第5页 / 共38页
点击查看更多>>
资源描述

1、金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 股票收益计算 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 2.1 收益定义与加总 2.2 单个股票收益计算 2.3 多股票收益计算 2.4 投资组合收益计算 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 2.1.1 收益定义 假定某支金融资产在时刻 t的价格为 Pt 。 百分比收益和连续复利收益的定义如下 : 单期百分比收益为 k期百分比收益为 11ttt PPR111 1 11 2 3( ) ( 1 ) ( 1 ) ( 1 ) 111t t t t kt t t t kt t t t ktt

2、kR k R R RP P P PP P P PPP 2.1 收益定义与加总 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 单期连续复利收益为 其中, k期连续复利收益为 11l o g ( 1 ) l o g ( )ttttttPrRPpp lo g ( )ttpP ,)1l o g ()1l o g ()1l o g ()1()1)(1(l o g)(1l o g ()(111111ktttktttktttttrrrRRRRRRkRkr金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 2.1.2 收益加总 对于百分比(复合)收益,单期收益一般比较小,于是,对

3、年收益公式进行一阶泰勒( Taylor)展开得近似的年收益公式, 年收益 而对于投资组合的连续复利收益 我们有下面的近似公式, 1Np t i itir w r101 ( ) kt t jjR k Rk 1Npt i itiR wR1()Ti ittr T r 1lnitN rpt iir w e 1( ) (1 ) 1Ti ittR T R 加和方式 (Aggregation) 时序( Temporal) 截面( Cross-Section) 百分比收益 (Percent Returns) 连续复利收益 (Continuously Compound Returns) 金融实验分析 金融计算与

4、 SAS 金融学院金融实验教学示范中心 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 多期平均收益率计算 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 2.2.1 创建单期收益计算环境 计算上证指数( Idx000001)和股票深发展( Stk000001)收盘价单期收益。这里要计算有收益有:年收益、季收益、月收益、周收益和日收益。 对期末收盘价加标识: data a; set ResDat.Idx00000

5、1; year=year(date); qtr=qtr(date); month=month(date); proc sort data=a; by year qtr month; run; data bb; set a; last_y=last.year; /*标出某年的最后一个交易日 */ last_q=last.qtr; /*标出某季的最后一个交易日 */ last_m=last.month; /*标出某月的最后一个交易日 */ by year qtr month; run; 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 2.2.2 年收益计算 计算上证指数( Idx0

6、00001)的相应收益时,不需要用调整后的收盘价 。 data r_year(keep=date r_pct r_log label=“年收益 “); set bb; if last_y=1; /* 取各年最后一个交易日的数据 */ r_pct=dif(clpr)/lag(clpr); /* 计算百分比收益 */ r_log=log(clpr)-log(lag(clpr); /* 计算对数收益 */ /*函数 log(x)是以 e为底的自然对数,其它对数函数还有 log2(x),log10(x)*/ run; 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 2.2.5 周收益计

7、算 程序一 : data a; set ResDat.Idx000001; wd=weekday(date); dif=dif(wd); dif2=dif(date); if (dif=7 then index=1; /*第二天的星期日小于第一天的星期日,或第二天与第一天的时间间隔大于 7天时,表示第二天为新的一周 */ else index=0; data a(keep=date clpr index); set a; date=lag(date); clpr=lag(clpr); if index=1; data r_week(keep=date r_pct r_log); set a;

8、r_pct=dif(clpr)/lag(clpr); r_log=log(clpr)-log(lag(clpr); run; 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 data b; set ResDat.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

9、; by date; run; data b; set b; last_wk=last.wk; by wk; run; data b(keep=date r_pct1 r_log1); set b; if last_wk=1; r_pct1=dif(clpr)/lag(clpr); r_log1=log(clpr)-log(lag(clpr); run; 程序二 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 data c; set ResDat.Idx000001; last_wk= Wkflg; /* Wkflg;为周末交易日标识 */ run; data c(keep=d

10、ate r_pct2 r_log2); set c; if last_wk=1; r_pct2=dif(clpr)/lag(clpr); r_log2=log(clpr)-log(lag(clpr); run; 程序三: 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 data d; merge r_week b; by date; data d; merge d c; by date; if r_pct=r_pct1 and r_pct=r_pct2 then aa=1; else aa=0;/*最后一个不一样 */ run; data e; set d; if aa=0;

11、run; 检测程序一、程序二和程序三的一致性 : 注:方法二和三是完全一致的,虽然方法一与二、三的最后一个观测不一致。因为方法一的最后一个观测是缺失值。 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 2.2.6 日收益计算 data r_day (keep=date r_pct r_log label=“日收益 “); set ResDat.Idx000001; r_pct=dif(clpr)/lag(clpr); /*dif(clpr)等价于 clpr-lag(clpr)*/ r_log=log(clpr)-log(lag(clpr); run; 金融实验分析 金融计算与

12、SAS 金融学院金融实验教学示范中心 2.2.7 绘制收益图 计算收益后,可以绘制收益对时间的散点图来发现其随时间增长的发展趋势。例如,对上面计算的相关收益,其对时间的散点图 SAS程序如下。 proc gplot data=r_day ; plot r_pct*date / vref=0; plot r_log*date / vref=0; run; quit; 选项 VREF要求在竖轴上的某个指定值处画一条垂直于此轴的参照线,该例程中其值为 0。 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 2.2.8 多期平均收益率计算 多期收益的度量包括计算多个单期收益的算术平均值和

13、几何平均值。 计算上证指数( IDX000001)收盘价 19952005年间年平均、月平均和日平均收益。 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 /*建立满足条件的数据集 */ data a1; set r_year; where 1995 outlist 在相应的目录下打开文件 OUTLIST,可以看到文件前两行的结果如下: stk000001.sas7bdat stk000002.sas7bdat 这里 DOS命令 dir *.*/b中的参数 /b表示只列出文件名。 删除文件名 stkcdref.sas7bdat。 金融实验分析 金融计算与 SAS 金融学院金融实

14、验教学示范中心 data a; length files $9; infile “d:ResDatoutlist“; input files $ ; if files=stkcdref. then delete; run; 形成文件名数据集: 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 Data _null_; set a; stkcd=substr(files,4,6); a=%a(; c=); ; file “ Stk1.txt“; put a $ stkcd $ c $ ; run; 创建目录 ResDat下全部股票代码的宏文本: Stk1.txt.: 金融实验分析

15、金融计算与 SAS 金融学院金融实验教学示范中心 2.3.3 多股票收益计算程序 方法一: 一只股票的行情与分配形成一个 SAS数据集。每个 SAS数据集计算一只股票的收益。并将计算结果按适当的形式合并到一个数据集中。 沪市日对数收益计算程序: options nodate nonotes nosource; /*不输出时间、注释和源程序到日志 LOG上 */ data ResDat.lg_shanghai(keep=date); set ResDat.Idx000001; where 1995=year(date)=2005; /* 全部交易日期通过上证指数的行情取得 */ %macro a

16、(x,y); /*求日对数收益率 */ data a(keep=date r_1); set ResDat.stk where 1995=year(date)=2005; adjclpr=clpr*Mcfacpr;/*用调整后的股价计算, Mcfacpr为累积股价调整乘子 */ r_1=log(adjclpr)-log(lag(adjclpr); 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 /*将所求的收益率合并到数据集 ResDat.lg_shanghai中 */ data ResDat.lg_shanghai(rename=(r_1=r merge ResDat.lg_

17、shanghai a; by date; data ResDat.lg_shanghai; set ResDat.lg_shanghai; if r else r %mend a; %include “SHStk.txt“; run; 沪市 日百分比收益计算程序: options nodate nonotes nosource; data ResDat.r_shanghai(keep=date); set ResDat.Idx000001; where 1995=year(date)=2005; 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 %macro a(x,y); /*

18、求日百分比收益率 */ data a(keep=date r_1); set ResDat.stk where 1995=year(date)=2005; adjclpr=clpr*Mcfacpr; /*用调整后的股价计算 */ r_1= (adjclpr-lag(adjclpr)/ lag(adjclpr); /*将所求的收益率合并到数据集 ResDat.r_shanghai中 */ data ResDat.r_shanghai(rename=(r_1=r merge ResDat.r_shanghai a; by date; data ResDat.r_shanghai; set ResD

19、at.r_shanghai; if r else r %mend a; %include “SHStk.txt“; run; 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 方法二: 直接利用包括所有股票的行情分配数据集 Qttndist。 data return; set ResDat.Qttndist; by stkcd date; adjclpr=Mcfacpr*Clpr; lag_adjclpr =lag(adjclpr); if not first.stkcd then lagadjclpr =lag_adjclpr; return=(adjclpr-lagadjcl

20、pr)/lagadjclpr; keep stkcd lstknm date return; run; 注意:方法一、二计算收益数据的存贮方式不同。以下各节内容以方法一计算的结果为基础展开。 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 proc transpose data=ResDat.lg_shanghai out= lg_shanghai_tr; run; data lg_shanghai_tr_1; set lg_shanghai_tr; if _n_=220; run; proc transpose data= lg_shanghai_tr_1 out= lg_s

21、hanghai_1; data lg_shanghai_1; set lg_shanghai_1; format date yymmdd10.; run; data lg_shanghai_tr_2; set lg_shanghai_tr; if 221=_n_=440; run; proc transpose data= lg_shanghai_tr_2 out= lg_shanghai_2; data lg_shanghai_2; set lg_shanghai_2; run; 2.3.4 收益 SAS数据集转换为 EXCEL数据表 金融实验分析 金融计算与 SAS 金融学院金融实验教学示

22、范中心 data lg_shanghai_tr_3; set lg_shanghai_tr; if 441=_n_=660; run; proc transpose data= lg_shanghai_tr_3 out= lg_shanghai_3; data lg_shanghai_3; set lg_shanghai_3; run; data lg_shanghai_tr_4; set lg_shanghai_tr; if 661=_n_; run; proc transpose data= lg_shanghai_tr_4 out= lg_shanghai_4; data lg_shan

23、ghai_4; set lg_shanghai_4; run; 金融实验分析 金融计算与 SAS 金融学院金融实验教学示范中心 proc export data= lg_shanghai_1 outfile=“d:ResDatlg_shanghai_1.xls“ dbms=excel2000 replace; run; proc export data= lg_shanghai_2 outfile=“d:ResDatlg_shanghai_2.xls“ dbms=excel2000 replace; run; proc export data= lg_shanghai_3 outfile=“d:ResDatlg_shanghai_3.xls“ dbms=excel2000 replace; run; proc export data= lg_shanghai_4 outfile=“d:ResDatlg_shanghai_4.xls“ dbms=excel2000 replace; run; 同样,可以转换其他收益 SAS数据集为相应的 EXCEL表。

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

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报