【问题标题】:Quadratic function error using portfolio.optimum使用portfolio.optimum的二次函数误差
【发布时间】:2020-04-20 04:55:41
【问题描述】:

我正在创建一个股票投资组合,我想运行一个效率前沿。我的投资组合优化代码遇到了错误。我还注意到所有股票的月回报率都相同。我当时正在解决这个错误。对我的任何一个问题的任何帮助都将不胜感激

tickers <- c('DPZ','SPY','AMD','AAPL','TSLA','MSFT','V', 'WMT', 'SQ','EA','ATVI','AMZN','ROKU', 
'PYPL','KO','AXP','CCL','DFS')
 Portfolio1 <- getSymbols.yahoo(tickers[1], from="2016-01-01", to= "2018-12-31", auto.assign=FALSE)


 Portfolio2 <- Portfolio1[,6]
 my_portfolio <- monthlyReturn(Portfolio2)

 for(i in 2:length(tickers)){
   ticker1 <- c('DPZ','SPY','AMD','AAPL','TSLA','MSFT','V', 'WMT', 'SQ','EA','ATVI','AMZN','ROKU', 
  'PYPL','KO','AXP','CCL','DFS')
   getSymbols.yahoo(tickers[i], from="2016-01-01", to= "2018-12-31", auto.assign=FALSE)
   Portfolio2 <- Portfolio1[,6]
   holder <- monthlyReturn(Portfolio2)
    my_portfolio <- cbind( my_portfolio, holder )
   }
  #Applies ticker name to column
  names (my_portfolio) <- tickers

# Target 7%
eff_port <- portfolio.optim(my_portfolio, pm = 0.07, shorts = TRUE)
eff_port$pw

#Efficiency Frontier
#Mean Returns
mu <- colMeans(my_portfolio)
grid <- seq(0.005, 0.033, length.out = 60)

vector_pm <- rep(NA, length(grid))
vector_psd <- rep(NA, length(grid))
eff_weights <- matrix(NA, 60, 18)
#FOR LOOP
for (i in 1 : length(grid)) {
  eff.port <- portfolio.optim(my_portfolio, pm = grid[i], shorts =TRUE)
  vector_pm[i] <- eff.port$pm
  vector_psd[i] <- eff.port$ps
  eff_weights[i, ] <- eff.port$pw
}

【问题讨论】:

    标签: r portfolio


    【解决方案1】:

    你提到,你总是得到相同的回报。我认为这是由于您的第一个循环。您计算您的投资组合的每月 N 次回报2。等于 Portfolio1[,6]。

    编辑 1

    所以另一件事将再次出现在 Portfolio2 的规范中。在你开始你的循环之前,你保存 Portfolio2

    for(i in 2:length(tickers)){
       ticker1 <- c('DPZ','SPY','AMD','AAPL','TSLA','MSFT','V', 'WMT', 'SQ','EA','ATVI','AMZN','ROKU', 
      'PYPL','KO','AXP','CCL','DFS')
    
    # here is my change##############
       Portfolio1 <- getSymbols.yahoo(tickers[i], from="2016-01-01", to= "2018-12-31", auto.assign=FALSE)
    #################
    
       Portfolio2 <- Portfolio1[,6]
       holder <- monthlyReturn(Portfolio2)
        my_portfolio <- cbind( my_portfolio, holder )
       }
    
    

    【讨论】:

    • [,6] 是指拉动股票的第 6 列。我特别关注调整后的值。我尝试了您的代码并遇到了错误
    • 请尝试我在回答中提到的edit1。如果没有,你能提供错误信息吗?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-03-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-09
    相关资源
    最近更新 更多