使用 portfolio.optimum 的二次函数错误
Quadratic function error using portfolio.optimum
我正在创建一个股票投资组合,我想 运行 一个效率边界。我 运行 我的投资组合最佳代码出现错误。我还注意到所有股票的每月 return 都相同。我当时正在解决这个错误。任何对我的问题的帮助将不胜感激
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
}
你提到,你总是得到相同的 return。我认为这是由于您的第一个循环。您为您的投资组合计算每月 return N 次。等于 Portfolio1[6].
编辑 1
因此,另一件事将再次出现在 Portfolio2 的规范中。在开始循环之前,保存 Portfolio2 <- Portfolio1[6],它始终采用相同的股票列 'DPZ'。我想你想在每次迭代时更新这个规范,因为你总是需要另一个 ticker[i] 但不更新 Portfolio2。由于您没有将 getSymbol.yahoo() 保存在任何地方。请在第一个循环中尝试以下循环:
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 )
}
我正在创建一个股票投资组合,我想 运行 一个效率边界。我 运行 我的投资组合最佳代码出现错误。我还注意到所有股票的每月 return 都相同。我当时正在解决这个错误。任何对我的问题的帮助将不胜感激
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
}
你提到,你总是得到相同的 return。我认为这是由于您的第一个循环。您为您的投资组合计算每月 return N 次。等于 Portfolio1[6].
编辑 1
因此,另一件事将再次出现在 Portfolio2 的规范中。在开始循环之前,保存 Portfolio2 <- Portfolio1[6],它始终采用相同的股票列 'DPZ'。我想你想在每次迭代时更新这个规范,因为你总是需要另一个 ticker[i] 但不更新 Portfolio2。由于您没有将 getSymbol.yahoo() 保存在任何地方。请在第一个循环中尝试以下循环:
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 )
}