ImageVerifierCode 换一换
格式:DOCX , 页数:31 ,大小:149.79KB ,
资源ID:10149505      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/10149505.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(最优投资组合选择SAS实现.docx)为本站会员(b****7)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

最优投资组合选择SAS实现.docx

1、最优投资组合选择SAS实现最优投资组合选择SAS实现1、分享一些感觉当初,在我翻看金融计算与建模这本书的时候,我也感觉:哇,会很难懂吧!yes,有这种感觉应该正常,因为书中的有些细节确实不是那么好理解,但这不影响我们有选择性地加以应用。整本书的大部内容都突出了“计算”二字各种收益率计算、各种指数计算、各种风险价值(价格或指标)计算、VaR计算、利率计算等等。这些计算搞得我很“蒙蔽”,因为,当我在阅读程序语句时总是搞不明白,这些计算对应的是哪个数据集、哪个字段。现在,用一种轻松的感觉挑选着翻看其中某些章节的内容,顿时发现“山重水复疑无路,柳暗花明又一村”了,原来当初是“不识庐山真面目,只缘生在此

2、山中”啊,好吧,接下来,我就股票/证券领域中的投资组合理论来介绍一下我是如何柳暗花明的。参看书籍是朱世武的金融计算与建模,数据集来自锐思数据库。2、一句话的阳光在SAS中进行最优投资组合选择需要:计算股票期望收益率计算风险度量指标/优化求解组合权重weightYes,就是这三句话。前两句没什么好说的,第三句由于是规划问题,所以就要考虑到优化建模的一系列问题,比如,灵敏度分析、整型规划、变量限制条件,等等。投资组合就这些内容吧,分解一下就so easy吧。3、各个击破在对上述三个步骤进行各个击破前,让我们来熟悉一下,我们所要使用的数据集,以及数据集中的字段吧这是一个十分十分重要的觉悟性认识!需要

3、字段:8只股票包括代码名、1995-2005年A股市场月持有收益率、3只股票月持有收益率。由于这三个字段来自不同方的数据集,所以需要进行整合。为什么选择这8只股票?这就是我们最初选股的问题了,而不是投资组合问题。数据说明:resdat是自建的存储在SAS系统逻辑库下的库名,类似Work。monret是个股月持有期收益率数据集;monretm是市场持有期收益率数据集。(这里,我门不关心这两个收益率是如何得来的) 数据准备阶段,程序见下:创建8只股票的代码收益率data Stk8;input stkcd$6.;cards;00000200000700001100001660060160060460

4、0651600653;run;按8只股票名合并数据,回忆一下merge函数,学习samp变量作用哟data return;merge resdat.monret stk8(in=samp); by stkcd;if samp;year=year(date);month=month(date);if 1995=year=2005;keep stkcd date year month monret;提取1995-2005年A股市场月持有期收益率data monretm;set resdat.monretm; year=year(date);month=month(date);If 1995=yea

5、r 8 then delete;amount= _value_*100000;rename _var_=asset;proc print data=lp_out3a;var asset amount;title 线性规划;title2 在每种资产上的投资金额;run;整数规划创建只股票2005年12月30日的收盘价数据集data price;merge resdat.qttndist stk8(in=samp);by stkcd;if samp and date=30dec2005d;keep stkcd clpr;run;规划求解收盘价乘以100作为每手价格,限定投资总额小于等于100000

6、,每只股票的手数设定为550手,每只股票的风险与购买手数的乘积之和小于200。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.9

7、038958443 1.2559109335 1.2961143173 le 200lots 431 322 522 352 320 349 596 148 le 100000upper 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;/*imaxit设置最大迭代次数,默认100次,primalout和dualou

8、t是输出整型规划的主要解和对偶解到数据集*/以下程序语句是对结果进行整理: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;打印出对偶数据集中的投资组合收益、最佳投资金额、最佳投资组合风险水平(结果分别为:3.6423,71975,199.51):proc print data=d_out;title 整数规划;title2 收益、风险和投资金额;run;以下程序

9、还是数据集操作为了进行结果对比,没什么可说的,so easy的proc transpose data=weight4 out=wt1;run;data wt2(drop=col4 col5 col6);set wt1;if _n_ 8 then delete;rename _name_=name col1=return col2=beta col3=lots;run;proc print data=wt2; title 整数规划;title2 转置和修改后的输入数据集;data wt3;merge lp_out4a wt2;proc print data=wt3;title 整数规划;titl

10、e2 合并数据集;run;以下程序计算每只股票对风险和收益的贡献,并求其累积值,理解其意义就easy了,结果为:8只股票的投资组合的风险为1.2213942,data wt4;set wt3;amt=71975;fraction=_value_*lots/amt;risk=fraction*beta;exp_ret=fraction*return;run;proc means data=wt4 sum; var risk exp_ret;title2 风险和收益的比较量度;run;允许卖空时的投资组合计算 设定组合风险水平小于1,组合权重在-11之间,组合权重的绝对值为1,这样设定是为了体现卖

11、空,期望收益中加了负号的表示卖空。data weight5;input _id_ : $10. r000002_1 r000007_1 r000011_1 r000016_1 r600601_1 r600604_1 r600651_1 r600653_1 r000002_2 r000007_2 r000011_2 r000016_2 r600601_2 r600604_2 r600651_2 r600653_2_type_ $ _rhs_ ;cards;exp_return 0.0247 0.0127 0.0124 0.008 0.0216 0.0068 0.0263 0.0144 -0.02

12、47 -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 -1.1185001891 -1.3470123011 -1.3185749233 -1.0260654129 -1.3509499965 -0.9038958443 -1.2559109335 -1.2961143173 le 1.0sum_wts 1.

13、0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 eq 1.0available 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 upperbd .;run;data lp_out5a; set lp_out5; if _n_ 16 then delete; if _value_ = 0 then delete; amount=_value_*100000; rename _var_=asset;run;proc print data=lp_out5a; var asset amount ; title

14、整数规划; title2 每只股票的投资金额;run;不再展示以上程序的输出结果,这种设定更符合实际,因为某一只股票的期望收益可能为负值,并且绝对值还会比较大,因此,持有和卖空的收益是不同的。值得注意的是,在线性约束条件下的优化求解中可能会出现全部非0的权值(这个应该能够理解吧,得细细斟酌!),如果全部非0 的话,那么就说明某只股票的期望收益的正负与你设定的持有还是卖空不对应,还有可能是期望收益的绝对量都相差不大。设定投资组合风险小于等于0.75,和上文的程序差不多 这里明示一个小观念:可以设定投资组合风险为负值,如果这样,则说明投资组合与市价波动相反,当市价上涨时投资组合收益下降,反之投资组

15、合收益上升。data weight5b; set weight5; if _id_=beta then _rhs_= .75;run;proc lp data=weight5b primalout=lp_out5b;run;quit;设最优的权重边界没啥好说的,主要是修改约束条件,重在理解经济意义啦! 设定持有每只股票数量的上界为0.25,卖空的下界为0.3时data weight6; input _id_ : $10. r000002_1 r000007_1 r000011_1 r000016_1 r600601_1 r600604_1 r600651_1 r600653_1 r000002

16、_2 r000007_2 r000011_2 r000016_2 r600601_2 r600604_2 r600651_2 r600653_2_type_ $ _rhs_ ; cards;exp_return 0.0247 0.0127 0.0124 0.008 0.0216 0.0068 0.0263 0.0144 -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

17、.9038958443 1.2559109335 1.2961143173 -1.1185001891 -1.3470123011 -1.3185749233 -1.0260654129 -1.3509499965 -0.9038958443 -1.2559109335 -1.2961143173 eq 1.0sum_wts 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 1.0 eq 1.0available .25 .25 .25 .25 .25 .25 .25 .25 .3 .3 .3 .3 .3 .3 .3 .3

18、upperbd .;proc lp data=weight6 primalout=lp_out6;run;quit;data lp_out6a; set lp_out6; if _n_ 16 then delete; if _value_ = 0 then delete; amount=_value_*100000; rename _var_=asset;run;proc print data=lp_out6a; var asset amount ; title 整数规划; title2 每只股票的投资金额;run; 非线性规划 马柯维茨模型是非线性规划问题,因为它考虑到了股票间的相关性。建立

19、数据集用到了对数据的转置操作data return1;set return;where stkcd in (000002 000007 000011);run;proc transpose data=return1 out=return1(drop=_name_ _label_);by stkcd;var monret;run;proc transpose data=return1 out=return1(drop=_name_); run;求3只股票期望收益的协方差proc corr data=return1 cov outp=cov_out1 nosimple;var col1 col2

20、col3;title Markowitz 模型;quit;计算投资组合收益两只股票的组合收益为:,x是自主设定的权重值。用循环建立了一个新变量xdata 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_out2;pfol_m1=x*r000002+(1-x)*r

21、000007;pfol_m2=x*r000002+(1-x)*r000011;pfol_m3=x*r000007+(1-x)*r000011;run;proc print data=mean1;title Markowitz 模型;title2 两种股票投资组合的收益;run;图形展示直接看图就能明白程序啦proc gplot data=mean1;plot pfol_m1*x=1 pfol_m2*x=2 pfol_m3*x=3/ overlay;symbol1 v=star i=none c=black;symbol2 v= i=none c=red;symbol3 v=plus i=none c=green;title1 ;/*貌似无用*/title2 投资组合收益与投资组合权重散点图;run;quit;计算投资组合风险我们的目的是找到在不同的x下的最低风险水平找最小值或图形化展示两只

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1