第2章 股票收益计算(金融计算与建模-清华大学,朱世武)
发布时间:2024-11-25
发布时间:2024-11-25
第2章 股票收益计算清华大学经管学院 朱世武 Zhushw@http:// Resdat样本数据:http:// SAS论坛: http://
2.1 收益定义与加总 2.2 单个股票收益计算
2.3 多股票收益计算2.4 投资组合收益计算
2.1 收益定义与加总2.1.1 收益定义假定某支金融资产在时刻t的价 格为 Pt 。 百分比收益和连续复 利收益的定义如下: 单期百分比收益为 k期百分比收益为
Pt Rt 1 Pt 1Rt (k ) (1 Rt )(1 Rt 1 ) (1 Rt k 1 ) 1 Pt Pt 1 Pt 1 Pt k 1 1 Pt 1 Pt 2 Pt 3 Pt k Pt 1 Pt k
单期连续复利收益为
Pt rt log(1 Rt ) log( ) Pt 1 pt pt 1pt log( Pt ) 其中,
k期连续复利收益为rt (k ) log(1 Rt (k )) log (1 Rt )(1 Rt 1 ) (1 Rt k 1 ) log(1 Rt ) log(1 Rt 1 ) log(1 Rt k 1 ) rt rt 1 rt k 1 ,
2.1.2 收益加总加和方式(Aggregation) 百分比收益 (Percent Returns) 连续复利收益 (Continuously Compound Returns) 时序(Temporal)Ri (T ) (1 Rit ) 1t 1 T
截面(Cross-Section)R pt wi R iti 1 N
ri (T ) r itt 1
T
N rpt ln wi e rit i 1
对于百分比(复合)收益,单期收益一般比较小,于是,对年收益公 式进行一阶泰勒(Taylor)展开得近似的年收益公式, 年收益1 k 1 [ Rt (k )] Rt j k j 0
而对于投资组合的连续复利收益 我们有下面的近似公式,
N rpt wi rit i 1
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) 收盘价单期收益。这里要计算有收益有:年收益、季收益、 月收益、周收益和日收益。对期末收盘价加标识:data a; set ResDat.Idx000001; 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;
2.2.2 年收益计算计算上证指数(Idx000001)的相应收益时,不需要用 调整后的收盘价。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;
2.2.5 周收益计算程序一:data a; set ResDat.Idx000001; wd=weekday(date); dif=dif(wd); dif2=dif(date); if (dif<0 and dif^=.)or dif2>=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; r_pct=dif(clpr)/lag(clpr); r_log=log(clpr)log(lag(clpr)); run;
程序二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(于是(date3)/7都等于-1)。由此可以 理解为什么这样设定表达 式 */
proc sort; 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;
程序三:data c; set ResDat.Idx000001; last_wk= Wkflg; /* Wkflg;为周末交易日标识 */ run; data c(keep=date r_pct2 r_log2); set c; if last_wk=1; r_pct2=dif(clpr)/lag(clpr); r_log2=log(clpr)-log(lag(clpr)); run;
检测程序一、程序二和程序三的一致性: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; run;注:方法二和三是完全一致的,虽然方法一与二、三的最后一个观测不一 致。因为方法一的最后一个观测是缺失值。
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;
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。
2.2.8 多期平均收益率计算多期收益的度量包括计算多个单期收益的算术平均值 和几何平均值。
计算上证指数(IDX000001)收盘价1995~2005年间 年平均、月平均和日平均收益。
平均年收益:/*建立满足条件的数据集*/ data a1; set r_year; where 1995 <= year(date) <= 2005; proc print; run; /*对数据集转置*/ proc transpose data=a1 out=a2; var r_pct; proc print; run; /*计算年平均收益*/ data a3(keep=am gm); set a2; c1=col1+1; c2=col2+1; …… c11=col11+1;
gm=(c1*c2*c3*….*c11)**(1/11)-1; am=mean(of col1-col11); proc print; run; /*变量太多时,用数组的方法处理简 单些*/ %let t=%eval(2005-1995+1);
data a4(keep=am gm); set a2; array col(&t) col1-col&t; array c(&t) c1-c&t; gm0=1; do i=1 to &t; c(i)=col(i)+1; gm0=gm0*c(i); end; gm=(gm0)**(1/&t))-1; am=mean(of col1-col&t); proc print; run;
上一篇:日语基本课文和单词41
下一篇:拉格朗日插值法课程设计