R语言_根据马科维茨投资组合理论画出最优投资组合线

#以3只股票的156个交易日对数收益率为例


data <- read.csv("./dayly_stocks.csv") #数据读取
R <- 100*array( c(data$平安银行,data$万科A,data$神州高铁),dim=c(156,3))

#计算平均收益率与协方差矩阵
mean_vect = apply(R,2,mean,na.rm=TRUE)
mean_vect
cov_mat = cov(R,use="complete.obs")
sd_vect = sqrt(diag(cov_mat))

#约束条件:包括等式和不等式约束,
Amat = cbind(rep(1,3),mean_vect,diag(1,nrow=3))  # 设置约束矩阵
muP = seq(min(mean_vect)+.0001,max(mean_vect)-.0001,length=300)  #length为绘制投资组合线提供的样本数,不能太小,也没必要太大

sdP = muP # 投资组合收益的标准差
weights = matrix(0, nrow=300,ncol=3) # 投资组合权重

library(quadprog) #可能会需要提前install.packages("quadprog")
for (i in 1:length(muP))  # 找出与设置预期收益率对应的最优组合权重
{
  bvec = c(1,muP[i],rep(0,3)) #有x只股票就需要rep(0,x)
  result = 
    solve.QP(Dmat=2*cov_mat,dvec=rep(0,3),Amat=Amat,bvec=bvec,meq=2)#这里的3同样需要改成股票数目)
  sdP[i] = sqrt(result$value)
  weights[i,] 
  • 8
    点赞
  • 43
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值