11最优投资组合选择.ppt

上传人:本田雅阁 文档编号:2877264 上传时间:2019-05-31 格式:PPT 页数:40 大小:452.52KB
返回 下载 相关 举报
11最优投资组合选择.ppt_第1页
第1页 / 共40页
11最优投资组合选择.ppt_第2页
第2页 / 共40页
11最优投资组合选择.ppt_第3页
第3页 / 共40页
11最优投资组合选择.ppt_第4页
第4页 / 共40页
11最优投资组合选择.ppt_第5页
第5页 / 共40页
点击查看更多>>
资源描述

《11最优投资组合选择.ppt》由会员分享,可在线阅读,更多相关《11最优投资组合选择.ppt(40页珍藏版)》请在三一文库上搜索。

1、第11章 最优投资组合选择,清华大学经管学院 朱世武 Z Resdat样本数据: SAS论坛: ,用线性规划选择投资组合,用线性规划求解最优投资组合步骤: 用means过程计算股票收益; 用data步生成proc Lp的输人数据集; 用proc Lp求解最优投资组合权; 用proc Lp进行灵敏度分析; 用data步,根据最优权及投资组合的大小计算投资于每只股票的金额。,创建数据集,创建收益数据集return。数据集Return包括1995年2005年A股市场月持有期收益,及其它8只股票月持有期收益数据。 return变量解释: Stkcd为股票代码; Date为日期; Mretmc为A股市场

2、的月持有期收益; Monret为个股的月持有期收益。,计算期望收益,在使用PROC LP解决线性规划问题之前,要先估计期望收益这里用过去的平均收益来估计期望收益。 用PROC MEANS语句计算股票收益。 proc means data=return noprint; by stkcd; var monret; output out=m_out; data m_out1a; set m_out; where _stat_=mean; keep stkcd monret; run;,风险度量,常用风险度量的指标有两种: 股票收益标准差; 资本资产定价模型(CAPM)的 。,股票收益标准差,标准差

3、是统计学对波动性的度量,而股票收益的波动性正是持有股票的风险所在。 计算所选8只股票的标准差,保存在数据集m_out1b中。 data m_out1b; set m_out; where _stat_=std; keep stkcd monret; rename monret=std; label monret=月收益率标准差; run;,CAPM的,第二种风险度量指标是CAPM的 ,它代表系统风险。,根据CAPM模型,资产i的期望收益和市场期望收益之间有如下关系:,投资组合p的CAPM:,.,投资组合权重为 时(i=1,2,N),参数 和 可以表示成单个股票的线性组合:,总风险定义为收益的标

4、准差,根据CAPM,资产i收益的方差为:,对于投资组合p,收益方差为:,当投资组合分散时,第二项会减小,分散好的投资组合,该项接近0,其收益的方差近似为:,因此,对于分散好的投资组合,就是要最小化,计算最优投资组合权重,计算出股票期望收益和风险水平后,就可以用PROC LP来找出在最大可接受风险的前提下收益最大的投资组合权。该线性规划问题为以下形式:,其中: A是一个 的系数阵(rhs)。 b是一个 常数向量。 c是一个 的价格系数向量. x是一个 的结构变量向量 是 的一个下界。PROC LP中缺省下界是0。 是 的一个上界。,下面的例中用PROC LP来最大化以下目标函数以求解投资组合权重

5、:,.,该目标函数有以下约束条件: 投资组合风险是1.2,即选择投资组合权重时要使权重与各股票的乘积之和是1.2。,权重和为l:,.,投资组合权重的上界是1。,下面的DATA步创建一个名为WEIGHT1的数据集,按PROC LP的格式说明线性规划问题。 data weight1; input _id_ : $10. r000002 r000007 r000011 r000016 r600601 r600604 r600651 r600653 _type_ $ _rhs_ ; cards; exp_return 0.0247 0.0127 0.0124 0.008 0.0216 0.0068 0

6、.0263 0.0144 max beta 1.1185001891 1.3470123011 1.3185749233 1.0260654129 1.3509499965 0.9038958443 1.2559109335 1.2961143173 eq 1.2 sum_wts 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 eq 1.0 available 1 1 1 1 1 1 1 1 upperbd . available 0 0 0 0 0 0 0 0 lowerbd . ; run;,灵敏度分析,可以通过灵敏度分析来考察投资组合权重(线性规划问题的主要解)的稳定性质

7、。 proc lp data=weight2 primalin=lp_out2 rangeprice rangerhs; title2 灵敏度分析; run; quit;,限定组合最高风险水平,风险约束也可以是不等式,即当投资组合的小于或等于一个最大可接受值时计算出的最优投资组合权。 下面考察允许投资组合 小于等于1.2时上面问题主要解的变化情况。 data weight3; set weight2; if _id_=beta then _type_=le; run; proc lp data=weight3 primalout=lp_out3; run; quit;,用整数规划产生投资组合,

8、例11.1 用PROC LP求解整数规划。 /* 创建价格数据集price */ data price; merge resdat.qttndist stk8(in=samp); by stkcd; if samp and date=30dec2005d; keep stkcd clpr; run; data weight4; input _id_ : $10. r000002 r000007 r000011 r000016 r600601 r600604 r600651 r600653 _type_ $ _rhs_ ; cards; exp_return 0.0247 0.0127 0.01

9、24 0.008 0.0216 0.0068 0.0263 0.0144 max . beta 1.1185001891 1.3470123011 1.3185749233 1.0260654129 1.3509499965 0.9038958443 1.2559109335 1.2961143173 le 200 lots 431 322 522 352 320 349 596 148 le 100000 upper 50 50 50 50 50 50 50 50 upperbd . lower 5 5 5 5 5 5 5 5 lowerbd . integer 1 2 3 4 5 6 7

10、8 integer . ; /* 求解整数规划 */ proc lp data=weight4 imaxit=200 primalout=lp_out4 dualout=d_out; run;,/*整理求解输出数据集*/ data lp_out4a(keep= _var_ _value_ rename=_var_=name); set lp_out4; if _n_ 8 then delete; run; /* 打印主要解,列出每只股票应购买的手数*/ proc print data=lp_out4a; title 整数规划; title2 购买手数; run; 注意,在PROC LP输出中,

11、LOTS约束条件(限制投资金额)是一个最大值为$100000的不等式约束。在这$100000中,只有71975用于创建投资组合。,/*打印对偶解数据集*/ proc print data=d_out; title 整数规划; title2 收益、风险和投资金额; run; 对偶解数据集包含以下信息: 投资组合收益; 最佳投资金额; 最佳投资组合风险水平。 注意,这里投资组合收益和风险度量与前面线性规划问题中的度量不一样,前面的投资组合收益和风险是每只股票收益和风险按最优投资组合权重的线性组合,因此不能直接比较。,用非线性规划产生投资组合,在Markowitz模型中,股票收益指的是平均收益(也叫

12、算术平均收益)。 股票风险是股票收益的标准差。 证券投资组合收益是每只股票的加权收益。 在不允许卖空,即组合权重在0和1之间,且和为1的条件下,证券投资组合的收益为:,两只股票组合的风险定义为:,用DATA步和PROC CORR产生投资组合,考虑从以下三只股票中选择两只构造投资组合, 万科A(000002), 深达声(000007), S深物业A(000011)。 试图找出在既定风险水平下收益最大的投资组合。,计算股票收益的均值和方差,/*从RETURN数据集中抽出3只股票*/ data return1; set return; where stkcd in (000002 000007 00

13、0011); /*对数据集进行处理,将3只股票的数据合为一个数据集中的三个变量,以便用PROC CORR求3只股票月收益的协方差*/ proc transpose data=return1 out=return1(drop=_name_ _label_); by stkcd; var monret; proc transpose data=return1 out=return1(drop=_name_); proc corr data=return1 cov outp=cov_out1 nosimple; var col1 col2 col3; title Markowitz 模型; quit

14、;,计算股票投资组合的平均收益,一般说来,两种股票投资组合的收益用以下方法计算:,/*数据集COV_OUTl1中,增加变量X,表示权重。例中,X从0到l,步长为0.05。 */ data cov_out2(drop=_name_); set cov_out1; if _type_ ne MEAN then delete; do x=0 to 1 by .05; output; end; rename col1=r000002 col2=r000007 col3=r000011; label x=投资组合的权重; run;,/* 计算投资组合的收益 */ data mean1; set cov_

15、out2; pfol_m1=x*r000002+(1-x)*r000007; pfol_m2=x*r000002+(1-x)*r000011; pfol_m3=x*r000007+(1-x)*r000011; run; proc print data=mean1; title Markowitz 模型; title2 两种股票投资组合的收益; run;,图中,组合1用符号*,组合2用符号,组合3用+。由图可以看出,投资组合1在所有组合权重水平中都有最高收益。,计算投资组合的风险,投资组合的风险可通过下式计算:,程序参考教材,含有两只股票投资组合的风险水平 Obs x pfol_r1 pfol_

16、r2 pfol_r3 1 0.00 0.15765 0.15761 0.15761 2 0.05 0.15389 0.15457 0.15506 3 0.10 0.15035 0.15171 0.15275 4 0.15 0.14704 0.14903 0.15068 5 0.20 0.14399 0.14655 0.14886 6 0.25 0.14121 0.14427 0.14731 7 0.30 0.13871 0.14221 0.14602 8 0.35 0.13652 0.14036 0.14501 9 0.40 0.13464 0.13876 0.14429 ,从列表可以看出风险

17、水平随投资组合权重变化。例中,投资组合1在观测14处风险最小(0.13042),即65的万科A(000002)和35的深达声(000007)。 此外,对于每种权重,投资组合1都有最低风险。结合上面分析,组合1是最佳选择。,识别有效证券组合,有效证券组合在任何既定风险水平下都有最大收益。可以通过GPLOT过程画出收益对风险的图形,从而形象地识别出有效证券组合。,图中,竖轴表示收益,横轴表示风险。曲线的端点(靠右边)是不分散投资组合(一种股票占100,另一种为0),分散投资降低了风险水平。 投资组合的有效边界是在既定风险水平下具有最大收益的组合,也即最左上的组合。 组合3远不如组合1和2好。,先去

18、掉部分没有优势的投资组合,然后画出投资组合的一个子集。 下面把权重小于0.4的投资组合删去,因为从前面图中可看出它们的收益较小而风险较高,同时去掉组合3。,由图可以看出,投资组合的有效边界是权重从0.65到1的组合1。其次是权重从0.7到1.0的组合2。,用PROC NLP产生投资组合,NLP过程可以解决大量线性和非线性最优化问题 。 用PROC NLP过程时,还可以加入边界条件和一般线性条件 。,下面仍以本章选择的8只股票为例,说明使用PROC NLP求解投资组合的过程。权重计为XlX8,要求在0与1之间,和为1。最后要求期望收益最少为1.9。,data return2; set retur

19、n; proc transpose data=return2 out=return2(drop=_name_ _label_); by stkcd; var monret; proc transpose data=return2 out=return2(drop=_name_); data return2; set return2; rename col1=x1 col2=x2 col3=x3 col4=x4 col5=x5 col6=x6 col7=x7 col8=x8; proc corr data=return2 cov outp=cov_out3 nosimple; var x1-x8

20、; title Markowitz 模型; quit;,proc nlp outest=nlp_out4 noprint; parms x1-x8; var =x1*x1* 0.0194244422 +x2*x2* 0.0248545995+x3*x3* 0.024841303 +x4*x4* 0.0150937098+x5*x5* 0.029767682+x6*x6* 0.0156948233 +x7*x7* 0.0295971799+x8*x8* 0.0227559726 +2*x1*x2* 0.012652434+2*x1*x3* 0.0150048423+2*x1*x4* 0.0085

21、234643 +2*x1*x5* 0.0087603573+2*x1*x6* 0.0043113555+2*x1*x7* 0.0078285695 +2*x1*x8* 0.0068767269 +2*x2*x3* 0.0164591308+2*x2*x4* 0.0102511593+2*x2*x5* 0.0125957989 +2*x2*x6* 0.0091172983+2*x2*x7* 0.0140708542+2*x2*x8* 0.0126957816 +2*x3*x4* 0.0084318348+2*x3*x5* 0.0097300933+2*x3*x6* 0.0075174348 +2

22、*x3*x7* 0.0084425639+2*x3*x8* 0.0090521457 +2*x4*x5* 0.009197054+2*x4*x6* 0.0043473766+2*x4*x7* 0.0070145728 +2*x4*x8* 0.0091100859 +2*x5*x6* 0.0101411356+2*x5*x7* 0.0175577636+2*x5*x8* 0.0167131136 +2*x6*x7* 0.0104334122+2*x6*x8*0.0083393987 +2*x7*x8* 0.0136299731; risk=sqrt(var); min risk; bounds

23、0=x1-x8 = 1; lincon 1=x1+x2+x3+x4+x5+x6+x7+x8, .019 = 0.0246951391*x1+ 0.0127497123*x2+ 0.0124444582*x3+ 0.0079714507*x4+ 0.0216395959*x5+ 0.0067692931*x6+ 0.0263324389*x7+ 0.0143749164*x8; run;,计算投资金额,data amt_out3; set nlp_out4; if _TYPE_ ne PARMS then delete; array xa(8) x1-x8; array a(8) a1-a8;

24、do i=1 to 8; a(i)=round(xa(i)*100000,.01); end; total=sum(of a1-a8); run; data amt_out4; set amt_out3; rename a1=r000002 a2=r000007 a3=r000011 a4=r000016 a5=r600601 a6=r600604 a7=r600651 a8=r600653; run; proc print data=amt_out4; var r000002 r000007 r000011 r000016 r600601 r600604 r600651 r600653 to

25、tal; title2 每只股票投资的数额; run;,使用INEST=输入数据集,在PROC NLP中使用INEST=输入收据集,可以使其余PROC NLP语句简化,同时也简化诊断检查。 INEST=数据集为TYPE=EST中的数据。 所有股票的初始值均取为0.125。如果这些初始值不可行,PROC NLP将计算可行的初始值。下界是0,上界是1。收益不等式约束的右边值设为0.019 (即1.9个百分点)。,data in_nlp4(type=est); input _type_ $8. x1-x8 _rhs_; cards; parms .125 .125 .125 .125 .125 .1

26、25 .125 .125 . lowerbd 0 0 0 0 0 0 0 0 . upperbd 1 1 1 1 1 1 1 1 . eq 1 1 1 1 1 1 1 1 1 ge 0.0246951391 0.0127497123 0.0124444582 0.0079714507 0.0216395959 0.0067692931 0.0263324389 0.0143749164 0.019,proc nlp inest=in_nlp4 outest=nlp_out5; parms x1-x8; var =x1*x1* 0.0194244422 +x2*x2* 0.0248545995+

27、x3*x3* 0.024841303 +x4*x4* 0.0150937098+x5*x5* 0.029767682+x6*x6* 0.0156948233 +x7*x7* 0.0295971799+x8*x8* 0.0227559726 +2*x1*x2* 0.012652434+2*x1*x3* 0.0150048423+2*x1*x4* 0.0085234643 +2*x1*x5* 0.0087603573+2*x1*x6* 0.0043113555+2*x1*x7* 0.0078285695 +2*x1*x8* 0.0068767269 +2*x2*x3* 0.0164591308+2

28、*x2*x4* 0.0102511593+2*x2*x5* 0.0125957989 +2*x2*x6* 0.0091172983+2*x2*x7* 0.0140708542+2*x2*x8* 0.0126957816 +2*x3*x4* 0.0084318348+2*x3*x5* 0.0097300933+2*x3*x6* 0.0075174348 +2*x3*x7* 0.0084425639+2*x3*x8* 0.0090521457 +2*x4*x5* 0.009197054+2*x4*x6* 0.0043473766+2*x4*x7* 0.0070145728 +2*x4*x8* 0.

29、0091100859 +2*x5*x6* 0.0101411356+2*x5*x7* 0.0175577636+2*x5*x8* 0.0167131136 +2*x6*x7* 0.0104334122+2*x6*x8*0.0083393987 +2*x7*x8* 0.0136299731; risk=sqrt(var); min risk; run;,使用INQUAD=输入数据集,INQUAD=数据集为股票收益的方差和协方差数据。需要最小化的二次函数的形式如下:,其中, 是投资组合权, H是协方差阵,g是一个线性系数向量(本章的例子中全为0),c是常数(本章例中为0)。,/*产生协方差阵*/

30、data cov_out4; set cov_out3; if _type_ ne cov then delete; _type_=quad; proc nlp inest=in_nlp4 inquad=cov_out4 outest=nlp_out6; min; parms x1-x8; run; 通过连接inest=和inquad=数据集可以进一步简化proc nlp语句。 data quad; set cov_out4 in_nlp4; keep _type_ _name_ x1-x8 _rhs_; proc nlp inquad=quad outest=nlp_out7; min; p

31、arms x1-x8; run;,列出有效投资组合,通过改变期望收益不等式约束的右边值,可列出有效投资组合。以下DATA步产生一个新数据集QUAD1,使收益不等式约束的右边值为0.020。 data quad1; set quad; if _type_=ge then _rhs_=.020; run;,表11.2 改变期望收益不等式约束右边值所得到的投资组合,注意,期望收益可用的约束范围为0.00677到0.02633,分别是单只股票的最小和最大期望收益。同时也可以看出,右边值大于等于0.010时才是有效组合,约束小于0.010时,投资组合的权重保持不变。,用PROC NLP计算相切投资组合,资本市场贝塔风险线是从无风险资本出发、与有效边界相切的条射线,它在所有与有效边界相交或相切的这样的射线中有着最大倾斜角。因此,可通过最大 化 来求出相切投资组合。,

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

当前位置:首页 > 其他


经营许可证编号:宁ICP备18001539号-1