前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >R语言Markowitz马克维茨投资组合理论分析和可视化

R语言Markowitz马克维茨投资组合理论分析和可视化

原创
作者头像
拓端
修改2020-08-05 17:36:09
5600
修改2020-08-05 17:36:09
举报
文章被收录于专栏:拓端tecdat

原文链接: http://tecdat.cn/?p=14200

之前我们在关于投资组合优化相关的内容中已经看到了Markowitz的理论,其中给出了预期收益和协方差矩阵

代码语言:javascript
复制
> pzoo = zoo ( StockIndex , order.by = rownames ( StockIndex ) )> rzoo = ( pzoo / lag ( pzoo , k = -1) - 1 ) * 100> ans <- do.call ( method , list ( x = x , ... ) ) + return ( getCov ( ans ) )} > covmat=Moments(as.matrix(rzoo),"CovClassic")> (covmat=round(covmat,1))SP500 N225 FTSE100 CAC40 GDAX HSISP500   17.8 12.7 13.8 17.8 19.5 18.9N225    12.7 36.6 10.8 15.0 16.2 16.7FTSE100 13.8 10.8 17.3 18.8 19.4 19.1CAC40   17.8 15.0 18.8 30.9 29.9 22.8GDAX    19.5 16.2 19.4 29.9 38.0 26.1HSI     18.9 16.7 19.1 22.8 26.1 58.1

现在,我们可以可视化下面的有效边界(和可接受的投资组合)

代码语言:javascript
复制
> points(sqrt(diag(covmat)),er,pch=19,col="blue")> text(sqrt(diag(covmat)),er,names(er),pos=4, col="blue",cex=.6)> polygon(u,v,border=NA,col=rgb(0,0,1,.3))

实际上很难在该图上将重要的东西可视化:收益之间的相关性。它不是点(单变量,具有预期收益和标准差),而是有效边界。例如,这是我们的相关矩阵

代码语言:javascript
复制
SP500 N225 FTSE100 CAC40 GDAX HSISP500   1.00 0.50 0.79 0.76 0.75 0.59N225    0.50 1.00 0.43 0.45 0.43 0.36FTSE100 0.79 0.43 1.00 0.81 0.76 0.60CAC40   0.76 0.45 0.81 1.00 0.87 0.54GDAX    0.75 0.43 0.76 0.87 1.00 0.56HSI     0.59 0.36 0.60 0.54 0.56 1.00

我们实际上可以更改FT500和FTSE100之间的相关性(此处为.786)

代码语言:javascript
复制
courbe=function(r=.786){ef plot(ef$sd,ef$er,type="l",xlab="Standard Deviation",ylab="Expected Return",points(sqrt(diag(covmat)),er,pch=19,col=c("blue","red")[c(2,1,2,1,1,1)])polygon(u,v,border=NA,col=rgb(0,0,1,.3))}

例如,相关系数为0.6,我们得到以下有效边界

代码语言:javascript
复制
> courbe(.6)

并具有更强的相关性

代码语言:javascript
复制
> courbe(.9)

很明显,相关性很重要。但更重要的是,期望收益和协方差不是给出而是估计的。以前,我们确实将标准估计量用于方差矩阵。但是可以考虑使用另一个更可靠的估计器

代码语言:javascript
复制
covmat=Moments(as.matrix(rzoo),"CovSde")points(sqrt(diag(covmat)),er,pch=19,col="blue")text(sqrt(diag(covmat)),er,names(er),pos=4,col="blue",cex=.6)polygon(u,v,border=NA,col=rgb(0,0,1,.3))

它确实影响了点的(水平)位置,因为方差现在以及有效边界都不同,而方差明显更低。

为了说明最后一点,说明我们确实有基于观察到的收益的估计量,如果我们观察到不同的收益怎么办?了解可能发生的情况的一种方法是使用引导程序,例如每日收益。

代码语言:javascript
复制
> plot(ef$sd,ef$er,type="l",xlab="Standard Deviation",ylab="Expected Return", xlim=c(3.5,11),ylim=c(0,2.5),col="white",lwd=1.5)> polygon(u,v,border=NA,col=rgb(0,0,1,.3))> for(i in 1:100){+  +  + er=apply(as.matrix(rzoo)[id,],2,mean)+ points(sqrt(diag(covmat))[k],er[k],cex=.5)+ }

或其他资产

这是我们在(估计的)有效边界上得到的

代码语言:javascript
复制
> polygon(u,v,border=NA,col=rgb(0,0,1,.3))> for(i in 1:100){+ +  +  + ef <- efficient.frontier(er, covmat, alpha.min=-2.5, alpha.max=2.5, nport=50)+ lines(ef$sd,ef$er,col="red")+ }

因此,至少在统计学的角度上,要评估一个投资组合是否最优是很困难的。


参考文献

1.用机器学习识别不断变化的股市状况—隐马尔科夫模型(HMM)的应用

2.R语言GARCH-DCC模型和DCC(MVT)建模估计

3.R语言实现 Copula 算法建模依赖性案例分析报告

4.R语言使用ARIMA模型预测股票收益

5.r语言中对LASSO回归,Ridge岭回归和Elastic Net模型实现

6.用R语言实现神经网络预测股票实例

7.r语言预测波动率的实现:ARCH模型与HAR-RV模型

8.R语言如何做马尔科夫转换模型markov switching model

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 原文链接: http://tecdat.cn/?p=14200
  • 之前我们在关于投资组合优化相关的内容中已经看到了Markowitz的理论,其中给出了预期收益和协方差矩阵
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档