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

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

由Kaizong Ye,Sherry Deng撰写

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

> 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 HSI
SP500   17.8 12.7 13.8 17.8 19.5 18.9
N225    12.7 36.6 10.8 15.0 16.2 16.7
FTSE100 13.8 10.8 17.3 18.8 19.4 19.1
CAC40   17.8 15.0 18.8 30.9 29.9 22.8
GDAX    19.5 16.2 19.4 29.9 38.0 26.1
HSI     18.9 16.7 19.1 22.8 26.1 58.1

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

×

一:马科维茨投资组合理论

投资组合(Portfolio)是由投资人或金融机构所持有的股票、债券、衍生金融产品等组成的集合。投资组合的目的在于分散风险,投资组合按粗略的分类有三种不同的模式可供运用,即积极的、中庸的和保守的。

投资组合理论[1]:若干种证券组成的投资组合,其收益是这些证券收益的加权平均数,但是其风险不是这些证券风险的加权平均风险,投资组合能降低非系统性风险。人们进行投资,本质上是在不确定性的收益和风险中进行选择。投资组合理论用均值-方差来刻画这两个关键因素。其中均值是指投资组合的期望收益率,它是单只证券的期望收益率的加权平均,权重为相应的投资比例。方差是指投资组合的收益率的方差。我们把收益率的标准差称为波动率,它刻画了投资组合的风险。

那么在证券投资决策中应该怎样选择收益和风险的组合呢?投资组合理论主要通过研究"理性投资者"优化投资组合。所谓理性投资者:是指在给定期望风险水平下对期望收益进行最大化,或者在给定期望收益水平下对期望风险进行最小化。

 

二:求解最优投资组合过程

本文最优投资组合思想是:在给定期望收益水平下对期望风险进行最小化的投资。利用的是马克维茨的均值-方差模型:

本文实现最优投资组合的主要步骤:

1:得到夏普比率最大时的期望收益

2:得到标准差最小时的期望收益

3:根据1,2所得的期望收益,获取预估期望收益范围,在预估期望收益范围内取不同值,获取其最小方差,得到预估期望收益与最小方差的关系即获得最小方差边界。

4:最小方差边界位于最小方差资产组合上方为有效边界

5;获取最小方差边界上最大夏普比率,绘出CML

6:得到最小方差边界上最大夏普比率处各股票权重



> 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))


课程

R语言数据分析挖掘必知必会

从数据获取和清理开始,有目的的进行探索性分析与可视化。让数据从生涩的资料,摇身成为有温度的故事。

立即参加

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



SP500 N225 FTSE100 CAC40 GDAX HSI
SP500   1.00 0.50 0.79 0.76 0.75 0.59
N225    0.50 1.00 0.43 0.45 0.43 0.36
FTSE100 0.79 0.43 1.00 0.81 0.76 0.60
CAC40   0.76 0.45 0.81 1.00 0.87 0.54
GDAX    0.75 0.43 0.76 0.87 1.00 0.56
HSI     0.59 0.36 0.60 0.54 0.56 1.00

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

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,我们得到以下有效边界

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

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))

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

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







> 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)
+ }

或其他资产

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








> 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")
+ }

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


可下载资源

关于作者

Kaizong Ye拓端研究室(TRL)的研究员。在此对他对本文所作的贡献表示诚挚感谢,他在上海财经大学完成了统计学专业的硕士学位,专注人工智能领域。擅长Python.Matlab仿真、视觉处理、神经网络、数据分析。

本文借鉴了作者最近为《R语言数据分析挖掘必知必会 》课堂做的准备。

​非常感谢您阅读本文,如需帮助请联系我们!

 
QQ在线咨询
售前咨询热线
15121130882
售后咨询热线
0571-63341498