用R语言自动构建指定风险和收益的现代投资组合

编程入门 行业动态 更新时间:2024-10-22 05:09:22

用R实现,通过指定期望收益、风险、权重等条件,自动创建现代投资组合

# 获得四只股票股价收盘价数据
library(quantmod)

stockData <- new.env()
symbols <- c("MSFT","FB","GOOG","AAPL")
start_data <- as.Date("2014-01-01")
end_date <- as.Date("2017-12-31")
getSymbols(symbols,sec="yahoo",env=stockData,from=start_data,to=end_date)

# [1] "MSFT" "FB"   "GOOG" "AAPL"

x<-list()
for (i in 1:length(symbols)) {
  x[[i]] <- get(symbols[i],pos=stockData)
  if(i==1){
    data <- Ad(x[[i]])
  }
  else {
    data <- cbind(data,Ad(x[[i]]))
  }
}

# 计算收益率、平均收益率、协方差

data_ret <- apply(data, 2, Delt)
avg_ret <- apply(data_ret, 2, mean,na.rm=TRUE)
Covariance_mat <- cov(data_ret,use="na.orplete")

# 初始权重

# 源代码位置:http://faculty.washington.edu/ezivot/econ424/portfolio.r

source("portfolio.r")

weights <-c(0.2,0.3,0.35,0.15)

# 期望收益率、标准差和权重

weightsport <- getPortfolio(avg_ret,Covariance_mat,weights)
weightsport

# Call:
#   getPortfolio(er = avg_ret, cov.mat = Covariance_mat, weights = weights)
# 
# Portfolio expected return:     0.0009934422 
# Portfolio standard deviation:  0.01189354 
# Portfolio weights:
#   MSFT.Adjusted   FB.Adjusted GOOG.Adjusted AAPL.Adjusted 
# 0.20          0.30          0.35          0.15 

# 最小方差组合,蓝点

minvar_port <- globalMin.portfolio(avg_ret,Covariance_mat)
minvar_port

# Call:
#   globalMin.portfolio(er = avg_ret, cov.mat = Covariance_mat)
# 
# Portfolio expected return:     0.0009279438 
# Portfolio standard deviation:  0.01112518 
# Portfolio weights:
#   MSFT.Adjusted   FB.Adjusted GOOG.Adjusted AAPL.Adjusted 
# 0.3036        0.0671        0.2850        0.3443 

# 给定日收益率,求风险最小的有效投资组合

rf <- 0.0002
effcient_port <- efficient.portfolio(avg_ret,Covariance_mat,rf)
effcient_port

# Call:
#   efficient.portfolio(er = avg_ret, cov.mat = Covariance_mat, target.return = rf)
# 
# Portfolio expected return:     2e-04 
# Portfolio standard deviation:  0.02025839 
# Portfolio weights:
#   MSFT.Adjusted   FB.Adjusted GOOG.Adjusted AAPL.Adjusted 
# -0.2155       -0.9749        1.6681        0.5222 

# 最大化夏普比率的投资组合,切线,红点

tangency_port <- tangency.portfolio(avg_ret,Covariance_mat,rf)
tangency_port

# Call:
#   tangency.portfolio(er = avg_ret, cov.mat = Covariance_mat, risk.free = rf)
# 
# Portfolio expected return:     0.001242274 
# Portfolio standard deviation:  0.01331219 
# Portfolio weights:
#   MSFT.Adjusted   FB.Adjusted GOOG.Adjusted AAPL.Adjusted 
# 0.5277        0.5170       -0.3122        0.2675 

# 画出的投资组合的有效边界、蓝点最小方差组合,红点最大化夏普比率(切线)的投资组合

efficient_frontier <- efficient.frontier(
  avg_ret,Covariance_mat,alpha.min = -2,alpha.max = 2,nport = 50
)

plot(efficient_frontier,plot.assets = TRUE,pch=20)
points(minvar_port$sd,minvar_port$er,pch=13,col="blue")
points(tangency_port$sd,tangency_port$er,pch=13,col="red")
tangent_sharpe_ratio <- (tangency_port$er -rf)/tangency_port$sd
abline(a=rf,b=tangent_sharpe_ratio)

感谢阅读,欢迎关注和留言

更多推荐

用R语言自动构建指定风险和收益的现代投资组合

本文发布于:2023-06-14 09:48:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1462652.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:投资组合   收益   风险   语言

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!