R演示-数据提取_第1页
R演示-数据提取_第2页
R演示-数据提取_第3页
R演示-数据提取_第4页
R演示-数据提取_第5页
已阅读5页,还剩10页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、1. 获取实验数据本次实验可以使用R软件的金融分析包quantmod中的getSymbols()函数,来获取所需的二十支股票的基本数据。为了统一工作路径,我们首先将R的工作目录设定为D盘。在设定好默认路径后,我们需要载入quantmod包,它可以帮助我们对金融数据进行分析和处理。通过quantmod包中的getSymbols( )函数来下载和获取实验要求中的二十只股票从2012年03月1日到2015年03月30日的交易数据。注意下载程序包时,需要设定CRAN网站镜像,在弹出CRAN mirror的菜单里选择距离网络代理器最近的地点,如China(Beijing4)(图1)。运行代码如下:#设定

2、工作目录setwd("D:/")#安装quantmod程序包install.packages("quantmod")#读取quantmod程序包library(quantmod) 图1下载CRAN镜像图2安装与读取程序包#下载股票基本交易数据,本实验所需的20支股票的数据都可以通过同样的R语句下载,需要将代码部分改成所需的股票代码并按顺序赋值(如赋值为s1、s2、s20)。注意区分沪市和深市的股票,沪市股票代码后应当加上标注“.ss”,深市股票代码后应加标注“.sz”。将R语句补充完整并在R中运行。s1<-getSymbols("6000

3、16.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s2<-getSymbols("600059.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s3<-getSymbols("600060.ss",from="2012-03-01",to="2015-03-31",auto.assig

4、n=FALSE)s4<-getSymbols("600069.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s5<-getSymbols("600070.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s6<-getSymbols("600079.ss",from="2012-03-01",

5、to="2015-03-31",auto.assign=FALSE)s7<-getSymbols("600080.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s8<-getSymbols("600085.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s9<-getSymbols("600095.s

6、s",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s10<-getSymbols("600114.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s11<-getSymbols("600123.ss",from="2012-03-01",to="2015-03-31",auto.assign=

7、FALSE)s12<-getSymbols("600066.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s13<-getSymbols("600160.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s14<-getSymbols("600436.ss",from="2012-03-01"

8、,to="2015-03-31",auto.assign=FALSE)s15<-getSymbols("600188.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s16<-getSymbols("600199.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s17<-getSymbols("6002

9、18.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s18<-getSymbols("600256.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)s19<-getSymbols("600261.ss",from="2012-03-01",to="2015-03-31",auto.ass

10、ign=FALSE)s20<-getSymbols("600612.ss",from="2012-03-01",to="2015-03-31",auto.assign=FALSE)图3下载数据#计算月收益率。将R语句补充完整并在R中运行。s1.m<-monthlyReturn(s1)  s2.m<-monthlyReturn(s2)  s3.m<-monthlyReturn(s3)  s4.m<-monthlyReturn(s4) &#

11、160;s5.m<-monthlyReturn(s5)  s6.m<-monthlyReturn(s6)  s7.m<-monthlyReturn(s7)  s8.m<-monthlyReturn(s8)  s9.m<-monthlyReturn(s9)  s10.m<-monthlyReturn(s10)  s11.m<-monthlyReturn(s11)  s12.m<-monthlyReturn(s1

12、2)  s13.m<-monthlyReturn(s13)  s14.m<-monthlyReturn(s14)  s15.m<-monthlyReturn(s15)  s16.m<-monthlyReturn(s16)  s17.m<-monthlyReturn(s17)  s18.m<-monthlyReturn(s18)  s19.m<-monthlyReturn(s19)  s20.m&

13、lt;-monthlyReturn(s20) 图4计算月收益率#将不同股票的数据合并在一起并赋值给DATA,并将数据转换成时间序列。将R语句补充完整并在R中运行。data<-merge(s1.m,s2.m,s3.m,s4.m,s5.m,s6.m,s7.m,s8.m,s9.m,s10.m,s11.m,s12.m,s13.m,s14.m,s15.m,s16.m,s17.m,s18.m,s19.m,s20.m) data<-as.data.frame(data) #将数据列用股票代码命名,将R语句补充完整并在R中运行。colnames(data)<-c("600016&q

14、uot;,"600059","600060","600069","600070","600079","600080","600085","600095","600114","600123","600141","600160","600172","600188","600199","6002

15、18","600228","600256","600261") #将数据以csv的形式存在D盘根目录下write.csv(data,"stock.csv")图5赋值之后在国泰安提取债券数据,打开国泰安官网,选取数据中心-债券,在左侧编辑所需要的参数。选定债券行情指标-行情指标-债券月交易信息表-月收盘价。设定时间为2012-3月到2015-3月。图6交易数据收集输入所选取的债券的代码120605,111051,122829,112059。图7交易数据收集将所收集到的数据汇总到stock.csv文件中,并将

16、股票收益率年化。2计算回报率的均值、协方差和标准差。计算均值时使用apply()函数。apply()函数是通过对数组或者矩阵的一个维度使用函数生成值得到列表或者数组、向量。第二个参数值为2表示对列向量进行操作,第三个参数为mean表示对列向量进行求平均数的操作。计算协方差使用cov()函数。cov()函数用以计算列与列之间的协方差。同样,通过head()函数可以查看前四只股票的协方差矩阵,如图9。计算标准差时使用了两个函数,分别为diag()和sqrt()。diag()函数为求对角阵的函数,返回一个矩阵对角线的值构成的向量。因此,diag(cov_mat)表示每只资产的方差值构成的向量。通过函

17、数sqrt()进行开方操作,得到各资产的标准差值。其代码如下:# 计算均值,并将其赋值给mean_vecmean_vec <- apply(R, 2, mean)#计算协方差,并将其赋值给cov_matcov_mat <- cov(R)#计算标准差,并将其赋值给sd_vecsd_vec <- sqrt(diag(cov_mat);可以通过head()函数查看前几个数据,如输入head(mean_vec,4),head(cov_mat,4),head(sd_vec,4),返回查看对应函数输出结果的前4个数据。如图8图10。图8平均值图示图9协方差矩阵图示图10标准差图示2.设定

18、约束条件本实验根据马克维茨资产组合选择模型,除了两个基本约束条件外,还需加入恒定比例的约束条件。并且可以通过循环的方式,改变bvec值,从而得到不同期望收益下的最小方差组合,画出有效前沿。代码如下:#设定约束矩阵A,第一列为1,第二列为各证券均值,第三列为限制20支股票占比例70%,第五列开始为24行以1为对角的对角矩阵A <- cbind(rep(1,24),mean_vec,c(rep(1,20),rep(0,4),diag(1,nrow=24)#设定600个目标收益率,以此作为描点的基础Mu <- seq(0.12,0.3,length=600)#设置变量Sd用来存储资产组合

19、收益率的标准差Sd <- Mu#设置变量W用来存储资产组合比例W <- matrix(0, nrow=600, ncol=24)3. 规划求解本实验采用二次规划求解的方式,利用R语言中的solve.QP函数,用循环语句for()将所设定的W矩阵中每一个数当做目标收益率循环计算,得到有效前沿上的点。并将每一次计算中的风险值和投资比例分别赋值给Sd和W。其代码如下:# 利用二次规划(QP)为各个目标回报率计算最优投资组合for (i in 1:length(Mu) B <- c(1, Mui, 0.7, rep(0,24) # 约束向量 result <- solve.QP

20、(Dmat=2*cov_mat,dvec=rep(0,24),Amat=A,bvec=B,meq=3) Sdi <- sqrt(result$value) # 最小风险 Wi, <- result$solution # 投资比例4. 通过有效前沿、最大夏普比率计算出最优投资策略本实验设定无风险年利率为3%。在图中标出这一点,代码如下:mufree = 0.03 points(0,mufree,cex=3,pch=20)图11绘制无风险年利率点# 计算夏普比率sharpe = (Mu-mufree)/Sd # 计算夏普比率的最大值sharpe.max = (sharpe = max(

21、sharpe)#计算夏普比率最大时各资产的投资比例W.opt <- round(Wsharpe.max,6)图12 找出最大夏普比率值round()函数的作用是对数据进行四舍五入,第二个参数表示四舍五入的精度。W.opt即为所要求的最优权重比例构成的数组。查看W.opt的值,如图7。图13最优投资比例对所得结果进行加总会发现,投资比例之和不为1,并且有很多0值,这是由于round()函数设定了保留六位有效数字,很多计算出的投资比例很小,当以该精度输出时显示为0值。5. 画出资本市场线及有效性边界我们可以利用R中的plot()函数画出有效前沿,其形状为一条双曲线,代码如下:plot(Sd,

22、Mu,type="l",xlim=c(0,1.2),ylim=c(0,.6),lty=3,lwd=3,ylab="Expected Return", xlab="Risk(Standard Deviation)")在图中画出资本市场线(CML),如图14,并且标出风险资产的最优投资组合点,即资本市场线(CML)与有效前沿曲线的切点。代码如下:#切线投资组合lines(c(0,2),mufree+c(0,2)*(Musharpe.max-mufree)/Sdsharpe.max,lwd=3,lty=2,col="darkgrey")# 风险资产的最优投资组合points(Sdsharpe.max,Musharpe.max,cex=3,pch=20,col="

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论