Ошибка функции Quadrati c при использовании portfolio.optimum - PullRequest
0 голосов
/ 19 апреля 2020

Я создаю портфель акций и хочу открыть границу эффективности. Я сталкиваюсь с ошибкой с моим кодом оптимального портфеля. Я также заметил, что все акции имеют одинаковую месячную доходность. Я работаю через эту ошибку в то время. Любая помощь с любой из моих проблем будет принята с благодарностью

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
}

1 Ответ

1 голос
/ 19 апреля 2020

Вы упоминаете, что вы всегда получаете один и тот же доход. Я думаю, это связано с твоим первым l oop. Вы рассчитываете N-раз ежемесячной доходности для своего портфеля2. Что равно Portfolio1 [, 6].

EDIT 1

Так что еще одна вещь будет снова в спецификации Portfolio2. Перед запуском l oop вы сохраняете Portfolio2 <- Portfolio1 [, 6], в котором всегда находится один и тот же столбец запаса «DPZ». Я думаю, что вы хотели обновлять эту спецификацию с каждой итерацией, так как вы всегда берете другой тикер [i], но не обновляете Portfolio2. Так как вы не сохраняете getSymbol.yahoo () никуда. пожалуйста, попробуйте следующий l oop для первого: </p>

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 )
   }

...