11最优投资组合选择
灵敏度分析
可以通过灵敏度分析来考察投资组合权重(线性规划问题的主要解) 的稳定性质. 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;
CAPM的 β 的
第二种风险度量指标是CAPM的 β ,它代表系统风险.
根据CAPM模型,资产i的期望收益和市场期望收益之间有如下关系:
E ( Ri ) = α i + β i E ( RM )
投资组合p的CAPM:
E ( R p ) = α p + β p E ( RM )
.
投资组合权重为 X i 时(i=1,2,…,N),参数 α p 和 β p 可以表示成单个 股票的线性组合:
权重和为l:x1 + x2 + + x8 = 1 投资组合权重的上界是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.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;
创建数据集
创建收益数据集return.数据集Return包括1995年 ~2005年A股市场月持有期收益,及其它8只股票月持 有期收益数据. return变量解释: Stkcd为股票代码; Date为日期; Mretmc为A股市场的月持有期收益; 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;
计算股票投资组合的平均收益
一般说来,两种股票投资组合的收益用以下方法计算:
R p = x R1 + (1 x ) R2
/*数据集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;
用非线性规划产生投资组合
在Markowitz模型中,股票收益指的是平均收益(也叫算术平均收益). 股票风险是股票收益的标准差. 证券投资组合收益是每只股票的加权收益. 在不允许卖空,即组合权重在0和1之间,且和为1的条件下,证券投资 组合的收益为:
R p = x1 R1 + x2 R2 + x3 R3 + + xN RN = ∑ i =1 xi Ri
用整数规划产生投资组合
例11.1 用PROC LP求解整数规划. /* 创建价格数据集price */ data price; merge resdat.qttndist stk8(in=samp); by stkcd; if samp and date='30dec2005'd; 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.0124 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 8 integer . ; /* 求解整数规划 */ proc lp data=weight4 imaxit=200 primalout=lp_out4 dualout=d_out; run;
/* 计算投资组合的收益 */ data mean1; set cov_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;
风险度量
常用风险度量的指标有两种: 股票收益标准差; 资本资产定价模型(CAPM)的 β .
股票收益标准差
标准差是统计学对波动性的度量,而股票收益的波动性正是持有 股票的风险所在. 计算所选8只股票的标准差,保存在数据集m_out1b中. data m_out1b; set m_out; where _stat_='std'; keep stkcd monret; rename monret=std; label monret='月收益率标准差'; run;
第11章 最优投资组合选择 章
清华大学经管学院 朱世武 Zhushw@ Resdat样本数据: 样本数据: 样本数据 SAS论坛: 论坛: 论坛
用线性规划选择投资组合
用线性规划求解最优投资组合步骤: 用means过程计算股票收益; 用data步生成proc Lp的输人数据集; 用proc Lp求解最优投资组合权; 用proc Lp进行灵敏度分析; 用data步,根据最优权及投资组合的大小计算投资于 每只股票的金额.
/*整理求解输出数据集*/ 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输出中,LOTS约束条件(限制投资金额)是 一个最大值为$100000的不等式约束.在这$100000中,只有71975 用于创建投资组合.
α p = ∑ i =1 X iα i ,β p = ∑ i =1 X i βi ,
N N
总风险定义为收益的标准差,根据CAPM,资产i收益的方差为:
σ i 2 = βi 2σ M 2 σ p 2 = β p 2σ M 2 + ∑ i =1 X i 2σ ε 2
N
i
当投资组合分散时,第二项会减小,分散好的投资组合,该项接 近0,其收益的方差近似为:
σ p 2 = β p 2σ M 2
因此,对于分散好的投资组合,就是要最小化 β p
计算最优投资组合权重
计算出股票期望收益和风险水平后,就可以用PROC LP来找出在 最大可接受风险的前提下收益最大的投资组合权.该线性规划问题为以下 形式:
两只股票组合的风险定义为:
2 2 σ p = ( x12σ 12 + x2σ 2 + 2 x1 x2σ 12 ) 1/ 2
N
σ 12 = ρ12σ 1σ 2
用DATA步和 步和PROC CORR产生投资组合 产生投资组合 步和
考虑从以下三只股票中选择两只构造投资组合, 万科A(000002), 深达声(000007), S深物业A(000011). 试图找出在既定风险水平下收益最大的投资组合.