Saya membuat portofolio saham dan saya ingin menjalankan efisiensi. Saya mengalami kesalahan dengan kode optimal portofolio saya. Saya juga memperhatikan bahwa semua saham memiliki pengembalian bulanan yang sama. Saya sedang mengatasi kesalahan ini pada saat itu. Bantuan apa pun dengan salah satu masalah saya akan sangat dihargai

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
}
0
fighttender 19 April 2020, 22:49

1 menjawab

Jawaban Terbaik

Anda menyebutkan, bahwa Anda selalu mendapatkan pengembalian yang sama. Saya pikir itu karena loop pertama Anda. Anda menghitung pengembalian bulanan N-waktu untuk portfolio2 Anda. Yang sama dengan Portofolio1[,6].

EDIT 1

Jadi hal lain lagi pada spesifikasi Portofolio2. Sebelum Anda memulai loop Anda, simpan Portfolio2 <- Portfolio1[,6] yang selalu menggunakan kolom 'DPZ' yang sama. Saya pikir Anda ingin memperbarui spesifikasi ini dengan setiap iterasi, karena Anda juga selalu mengambil ticker lain[i] tetapi tidak memperbarui Portofolio2. Karena Anda tidak menyimpan getSymbol.yahoo() di mana pun. silakan coba loop berikut untuk yang pertama:

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

1
dpendi 19 April 2020, 20:55