2 votos

Recopila todos los rendimientos de las acciones en una sola matriz usando quantmod en R

Mi problema es similar al de esta pregunta: cómo hago un bucle a través de todas las acciones con quantmod y ttr?

Para estimar la matriz de covarianza de los rendimientos de las acciones, necesito una matriz $NxT$ $X$ de rendimientos (acciones $N$ observaciones $T$). Así que usando el enlace de arriba, tengo el siguiente código:

library(quantmod)

symbols <- stockSymbols(c("AMEX", "NYSE")) 
symbols <- symbols[,1]

dataset <- xts()

for(i in 1:length(symbols)){
  symbol <- symbols[i]   
  tryit <- try(getSymbols(symbol,from = "1990-01-01", to = "2010-01-01"))
  if(inherits(tryit, "try-error")){
    i <- i+1   }
  else{   
  getSymbols(symbol, from = "1990-01-01", to = "2010-01-01")   
  retx <- Ad(get(symbol)) %>%
    dailyReturn(type = "log")  
  colnames(retx) <- as.character(symbol)   
  dataset <- merge(dataset, retx)
  rm(symbol)
  } }

Sin embargo, por alguna razón y parece que también aparece en el enlace de arriba, el bucle for anterior se rompe después de 50 o 100 iteraciones. Se describe una solución y consiste en ejecutar nuevamente el bucle comenzando donde se rompe, pero me pregunto por qué se rompe en absoluto si funciona bien al principio.

Tengo una segunda pregunta, la última línea

rm(symbol)

en realidad no elimina los datos xts del símbolo de la base de datos. En cambio, elimina la variable temporal de carácter. En su lugar, quiero eliminar el elemento xts de mi entorno. Intenté usar

rm(get(symbol))

pero esto tampoco funciona y arroja un error en la primera iteración.

¡Gracias por la ayuda!

0 votos

Cuando se rompe el bucle, simplemente se detiene sin lanzar un error.

0 votos

¿La respuesta de @Rime te ayudó? Sería genial si pudieras aceptarla.

0voto

joshbaptiste Puntos 1

Intenta usando

stock<- lapply(as.list(tickers), function(x) {
tmp <- try(getSymbols(x, from="1990-01-01",   auto.assign= FALSE))
if(!inherits(tmp, 'try-error'))
tmp})

stock devolverá todos los datos OHLCV para las acciones disponibles como una lista. Posiblemente puedes usar do.call para combinar todos los cierres ajustados y luego calcular los retornos.

Finanhelp.com

FinanHelp es una comunidad para personas con conocimientos de economía y finanzas, o quiere aprender. Puedes hacer tus propias preguntas o resolver las de los demás.

Powered by:

X