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,] = 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语言_根据马科维茨投资组合理论画出最优投资组合线相关推荐
- R语言:根据经纬度在世界地图上画出各个点
"ljs.csv"的文件内容: mydata<-read.table("ljs.csv",header=TRUE,sep=",") # ...
- 二元置信椭圆r语言_医学统计与R语言:画一个姑娘陪着我,再画个花边的被窝...
微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1: "waffle") 结果1: 1] 输入2: library(ggpubr)a <- waffle(c( ...
- 马科维茨模型 matlab,马科维茨投资组合理论(均方模型)学习笔记——基于Matlab(四)...
这是本阶段最后一次学习马科维茨投资组合理论的软件实现. 一.创建投资组合 %模拟N种资产的收益率mu=[10 20 30 50 60 90 120];sigma=[0.06 0.01 0.2 0.8 ...
- 马科维茨投资组合理论(均方模型)学习笔记——基于Matlab(四)
这是本阶段最后一次学习马科维茨投资组合理论的软件实现. 一.创建投资组合 %模拟N种资产的收益率 mu=[10 20 30 50 60 90 120];sigma=[0.06 0.01 0.2 0.8 ...
- 二元置信椭圆r语言_医学统计与R语言:圆形树状图(circular dendrogram)
微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1: "ggraph") 结果1: name 输入2: <- graph_from_data_frame(my ...
- 二元置信椭圆r语言_医学统计与R语言:多分类logistic回归HosmerLemeshow拟合优度检验...
微信公众号:医学统计与R语言如果你觉得对你有帮助,欢迎转发 输入1:multinominal logistic regression "nnet") 结果1: test (mult ...
- R语言ggplot2可视化在时间序列上标注出重点区域实战(突出特定的时间范围):highlight specific time ranges
R语言ggplot2可视化在时间序列上标注出重点区域实战(突出特定的时间范围):highlight specific time ranges 目录
- mchain r语言_布林带交易策略R语言实现
布林带(Bollinger Bands)指标是股市技术分析的常用工具之一.该指标由约翰 布林提出,基于K线图画出三条线,其中上下两条线可以分别看成是股价的压力线和支撑线,而在两条线之间还有一条股价平均 ...
- R语言时代,你要怎样画地图?
不知道各位平常有没有过需要画地图的需求,有的时候需要在地图上标出特定位置的数据表现或者一些数值,然而怎么实现? 这里主要介绍下在R语言中绘制地图的个人琢磨的思路.绘制地图步骤有三: 你得需要绘制地图: ...
- 二元置信椭圆r语言_一般加性模型的简介、应用举例及R语言操作
一般加性模型的简介.应用及R语言操作举例前文在"平滑回归举例"中,提到当未知自变量和响应变量间的关系,难以选择合适的参数模型描述二者间的响应状态,或者期望探索二者可能的响应曲线形式 ...
最新文章
- 这个逆袭的新同事,也太牛逼了
- 普通用户程序使用保留端口 error while loading shared libraries
- 仿真RM码,及在高斯信道下的译码性能,对RM采用大数逻辑译码算法
- 华硕老毛子(Padavan)——校园网电信宽带闪讯(NetKeeper)L2TP学校认证解决方案
- delete file$ recovery----惜分飞
- celery异步邮件发送系统出现django.core.exceptions.ImproperlyConfigured: Requested setting EMAIL_FROM
- php模拟表单提交登录,PHP模拟表单的post请求实现登录
- 为什么动物不需要吃盐
- windows freeSSHd搭建SFtp服务器
- FS7022双节锂电池8.4V保护IC电路图
- 双网卡实现同时上内外网方法
- 工作缺点和不足及措施_个人工作缺点和不足
- strcpy函数在c语言的作用是什么,strcpy函数的作用是什么呀?
- Oracle:Locked by transaction: console [表名]
- IOS唤起键盘,移动端页面放大
- @那些想要转行AI的人:送你一份人工智能入门指南
- OCTAFX滑点滑到令人发指 现在出金也不给出金是黑平台无疑了
- 7月第3周回顾:裁员潮袭卷IT人 雅虎服“软”愿被收购
- 俄亥俄州立大学计算机专业排名,俄亥俄州立大学CS专业排名2020年
- 国际金融学试题及参考答案