#以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,] = result$solution
}pdf("./qp.pdf",width=6,height=5)   #将绘制的最优投资组合线储存在qp.pdf中
par(mfrow = c(1,1))
##  plotthe efficient frontier (and inefficient frontier)
plot(sdP,muP,type="l", xlab="risk(%)",ylab="reward(%)",xlim=c(0,25),ylim=c(0,5),lty=3)#这里的xlim,ylim的长度需要跑出来试试大小是否合适,A股risk在0-25%,return在0-5%。mufree = 1.0 # 设置无风险利率,无风险利率为y轴截距
points(0, mufree,cex=4,pch="*")  # 显示无风险利率
sharpe =( muP-mufree)/sdP # 计算夏普比率
ind = (sharpe == max(sharpe)) # 找出最大夏普比率
print(weights[ind,]) # 找出切线组合
lines(c(0,sdP[ind]),c(mufree,muP[ind]),lwd=4,lty=1, col = "blue") # 找出最优投资组合线
points(sdP[ind],muP[ind],cex=4,pch="*") # 显示切线投资组合
ind2 = (sdP == min(sdP)) # 计算最小风险组合
points(sdP[ind2],muP[ind2],cex=2,pch="+") # 显示最小风险组合
ind3 = (muP > muP[ind2])
lines(sdP[ind3],muP[ind3],type="l",xlim=c(0,25), ylim=c(0,3),lwd=2, col = "red")  # 画出有效前沿text(sd_vect[1],mean_vect[1],"Vanke",cex=1.15)
text(sd_vect[2],mean_vect[2],"Pingan",cex=1.15)
text(sd_vect[3],mean_vect[3],"Gaotie",cex=1.15)
graphics.off()

跑出来pdf里应该是这样子的图像。

模拟以上代码,又去找了50家新三板企业的日收盘价。

#如果收集的是日收盘价,需要提前进行数据计算
#日收盘价到日对数收益率#以50只股票的153个交易日收盘价为例
data <- read.cv("./dayly_stock.csv")
D=length(data[1,])-1
len=length(data[,1]-1
prices=data[2,D]
R <- 100*diff(log(as.matrix(prices[2:len,1:50]))) #对数收益率=log(Pt)-log(Pt-1)#再重复使用上面的代码得出最优投资组合线
#计算平均收益率与协方差矩阵
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,50),mean_vect,diag(1,nrow=50))  # 设置约束矩阵
muP = seq(min(mean_vect)+.0001,max(mean_vect)-.0001,length=300)  #length为绘制投资组合线提供的样本数,不能太小,也没必要太大sdP = muP # 投资组合收益的标准差
weights = matrix(0, nrow=300,ncol=50) # 投资组合权重library(quadprog) #可能会需要提前install.packages("quadprog")
for (i in 1:length(muP))  # 找出与设置预期收益率对应的最优组合权重
{bvec = c(1,muP[i],rep(0,50)) #有x只股票就需要rep(0,x)result = solve.QP(Dmat=2*cov_mat,dvec=rep(0,50),Amat=Amat,bvec=bvec,meq=2)#这里的原来3只股票,同样需要改成股票数目50)sdP[i] = sqrt(result$value)weights[i,] = result$solution
}pdf("./qp.pdf",width=6,height=5)   #将绘制的最优投资组合线储存在qp.pdf中
par(mfrow = c(1,1))
##  plotthe efficient frontier (and inefficient frontier)
plot(sdP,muP,type="l", xlab="risk(%)",ylab="reward(%)",xlim=c(0,5),ylim=c(-0.2,1.0),lty=3)#这里的xlim,ylim的长度需要跑出来试试大小是否合适,A股risk在0-25%,return在0-5%。mufree = 0 # 设置无风险利率,无风险利率为y轴截距
points(0, mufree,cex=4,pch="*")  # 显示无风险利率
sharpe =( muP-mufree)/sdP # 计算夏普比率
ind = (sharpe == max(sharpe)) # 找出最大夏普比率
print(weights[ind,]) # 找出切线组合
lines(c(0,sdP[ind]),c(mufree,muP[ind]),lwd=4,lty=1, col = "blue") # 找出最优投资组合线
points(sdP[ind],muP[ind],cex=4,pch="*") # 显示切线投资组合
ind2 = (sdP == min(sdP)) # 计算最小风险组合
points(sdP[ind2],muP[ind2],cex=2,pch="+") # 显示最小风险组合
ind3 = (muP > muP[ind2])
lines(sdP[ind3],muP[ind3],type="l",xlim=c(0,5), ylim=c(-0.2,2),lwd=2, col = "red")  # 画出有效前沿text(sd_vect[1],mean_vect[1],"1",cex=1.15)
text(sd_vect[2],mean_vect[2],"2",cex=1.15)
text(sd_vect[3],mean_vect[3],"3",cex=1.15)
graphics.off()

跑完是这样的图(对比一下,就知道程序里的参数都是干森么的啦!

 谨以此篇感谢我的导师

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

  1. R语言:根据经纬度在世界地图上画出各个点

    "ljs.csv"的文件内容: mydata<-read.table("ljs.csv",header=TRUE,sep=",") # ...

  2. 二元置信椭圆r语言_医学统计与R语言:画一个姑娘陪着我,再画个花边的被窝...

    微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1: "waffle") 结果1: 1] 输入2: library(ggpubr)a <- waffle(c( ...

  3. 马科维茨模型 matlab,马科维茨投资组合理论(均方模型)学习笔记——基于Matlab(四)...

    这是本阶段最后一次学习马科维茨投资组合理论的软件实现. 一.创建投资组合 %模拟N种资产的收益率mu=[10 20 30 50 60 90 120];sigma=[0.06 0.01 0.2 0.8 ...

  4. 马科维茨投资组合理论(均方模型)学习笔记——基于Matlab(四)

    这是本阶段最后一次学习马科维茨投资组合理论的软件实现. 一.创建投资组合 %模拟N种资产的收益率 mu=[10 20 30 50 60 90 120];sigma=[0.06 0.01 0.2 0.8 ...

  5. 二元置信椭圆r语言_医学统计与R语言:圆形树状图(circular dendrogram)

    微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1: "ggraph") 结果1: name 输入2: <- graph_from_data_frame(my ...

  6. 二元置信椭圆r语言_医学统计与R语言:多分类logistic回归HosmerLemeshow拟合优度检验...

    微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1:multinominal logistic regression "nnet") 结果1: test (mult ...

  7. R语言ggplot2可视化在时间序列上标注出重点区域实战(突出特定的时间范围):highlight specific time ranges

    R语言ggplot2可视化在时间序列上标注出重点区域实战(突出特定的时间范围):highlight specific time ranges 目录

  8. mchain r语言_布林带交易策略R语言实现

    布林带(Bollinger Bands)指标是股市技术分析的常用工具之一.该指标由约翰 布林提出,基于K线图画出三条线,其中上下两条线可以分别看成是股价的压力线和支撑线,而在两条线之间还有一条股价平均 ...

  9. R语言时代,你要怎样画地图?

    不知道各位平常有没有过需要画地图的需求,有的时候需要在地图上标出特定位置的数据表现或者一些数值,然而怎么实现? 这里主要介绍下在R语言中绘制地图的个人琢磨的思路.绘制地图步骤有三: 你得需要绘制地图: ...

  10. 二元置信椭圆r语言_一般加性模型的简介、应用举例及R语言操作

    一般加性模型的简介.应用及R语言操作举例前文在"平滑回归举例"中,提到当未知自变量和响应变量间的关系,难以选择合适的参数模型描述二者间的响应状态,或者期望探索二者可能的响应曲线形式 ...

最新文章

  1. 这个逆袭的新同事,也太牛逼了
  2. 普通用户程序使用保留端口 error while loading shared libraries
  3. 仿真RM码,及在高斯信道下的译码性能,对RM采用大数逻辑译码算法
  4. 华硕老毛子(Padavan)——校园网电信宽带闪讯(NetKeeper)L2TP学校认证解决方案
  5. delete file$ recovery----惜分飞
  6. celery异步邮件发送系统出现django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_FROM
  7. php模拟表单提交登录,PHP模拟表单的post请求实现登录
  8. 为什么动物不需要吃盐
  9. windows freeSSHd搭建SFtp服务器
  10. FS7022双节锂电池8.4V保护IC电路图
  11. 双网卡实现同时上内外网方法
  12. 工作缺点和不足及措施_个人工作缺点和不足
  13. strcpy函数在c语言的作用是什么,strcpy函数的作用是什么呀?
  14. Oracle:Locked by transaction: console [表名]
  15. IOS唤起键盘,移动端页面放大
  16. @那些想要转行AI的人:送你一份人工智能入门指南
  17. OCTAFX滑点滑到令人发指 现在出金也不给出金是黑平台无疑了
  18. 7月第3周回顾:裁员潮袭卷IT人 雅虎服“软”愿被收购
  19. 俄亥俄州立大学计算机专业排名,俄亥俄州立大学CS专业排名2020年
  20. 国际金融学试题及参考答案

热门文章

  1. 怎么用PHP实现检测网站文章是否被收录
  2. CEVA-DSP构成
  3. Python学习笔记之os模块
  4. 36氪专访| 友盟+CEO朋新宇:大数据赛道会越来越宽,同时也会越来越头部化
  5. 太阳电池板特性实验_太阳电池伏安特性的测量
  6. 学习笔记(02):英特尔® OpenVINO™工具套件初级课程-如何加速视频处理进程?
  7. 值得收藏的JavaScript代码
  8. 基于Java的超市积分管理系统(附:论文 源码 课件)
  9. 如何选择合适焦距工业相机镜头
  10. Python配置清华镜像源