6 votos

¿cómo hago un bucle a través de todas las acciones con quantmod y ttr?

Acabo de empezar con el paquete Quantmod. Si quiero seleccionar las acciones en base a su reciente rendimiento, entonces necesito revisar todas las acciones en, digamos, la Bolsa de Valores de Nueva York. Así que necesito:

  1. obtener todos los símbolos de las acciones
  2. seleccionar los símbolos que tienen datos
  3. y las recorre una por una (por ejemplo, cada vez, descargando los datos de las acciones como $X$ y hacer algunos análisis. Luego haz un bucle con el siguiente, y ponlo como $X$ )

Mi pregunta es: ¿cómo puedo hacer esto? Aquí está parte de mi pensamiento:

  1. use stockSymbols() funcionan en el paquete TTR: AllSym <- stockSymbols() . La primera columna de AllSym son todos los símbolos potenciales.

  2. Utilice getSymbols(AllSym[i,1]) para hacer un bucle con todas las acciones i :

Preguntas aquí:

  1. No todos los símbolos de TTR tienen datos. Algunos pueden tener errores al usar getSymbols . En realidad, no me importa esta cierta acción. Entonces, ¿cómo puedo continuar con el bucle? [¿Cómo puedo usar el try función?]

  2. El getSymbols hará que los símbolos de las acciones sean automáticamente las variables. ¿Cómo puedo copiarlo (o establecerlo) en $X$ (en lugar de algo como $APPL$ )?

  3. ¿Cómo puedo hacer un bucle a través de las variables con sus nombres guardados como cadenas en un vector? Por ejemplo, si usamos getSymbols para obtener datos con el nombre como símbolo de la acción. ¿Cómo puedo hacer un bucle a través de esas acciones?[Nótese que el nombre de la variable se almacena en la primera columna AllSym como cuerda]

¡Muchas gracias!

11voto

joshbaptiste Puntos 1

Prueba lo siguiente:

library(quantmod)  # also loads xts and TTR

# Fetch all Symbols & store only the tickers to retrieve the data
symbols <- stockSymbols()
symbols <- symbols[,1]

A continuación, especificaremos dónde almacenar los datos

dataset<- xts() # Only run once

El siguiente código es el bucle que descargará los datos de OHLC a su entorno. A continuación, almacenará el cierre ajustado de las empresas descargadas y las fusionará en dataset

# cool progress bar to see the % of completion
n <- length(symbols)
pb <- txtProgressBar(min = 0, max = n, style=3)

# Actual loop: 
for(i in 1:length(symbols)) {
  symbols[i]-> symbol
# specify the "from" date to desired start date
  tryit <- try(getSymbols(symbol,from="2014-01-01", src='yahoo'))
  if(inherits(tryit, "try-error")){
    i <- i+1
  } else {
  # specify the "from" date to desired start date
  data <- getSymbols(symbol, from="2014-01-01", src='yahoo')
  dataset <- merge(dataset, Ad(get(symbols[i])))
  rm(symbol)
  }
  setTxtProgressBar(pb, i)
}

Si el bucle se rompe, por ejemplo en la 50ª iteración, sólo hay que volver a ejecutar el último bloque de código cambiando lo siguiente

# cool progress bar to see the % of completion
n <- length(symbols)
pb <- txtProgressBar(min = 0, max = n, style=3)

# Actual loop: 
# IF IT BREAKS ON THE 50th ITERATION, it must be skipped, therefore change it to 51
for(i in 51:length(symbols)) { 
  symbols[i]-> symbol
...

Siga haciéndolo hasta que symbols está agotado. Recuerde que descargará todos los datos en su entorno y que todos los precios de cierre ajustados se encuentran en dataset

0 votos

¿Hay alguna manera de mantener el bucle sin romperlo?

0 votos

Probablemente con un try() función

0 votos

Consulte la documentación sobre errores y excepciones en docs.python.org/3/tutorial/errors.html Todo lo que requiere es un bloque try: y en el bloque except: simplemente poner pass a menos que quiera hacer algo como imprimir una declaración y la acción que causó el error.

1voto

Ulf Lindback Puntos 5235

Puede referirse a este :

utilizar el último paquete en CRAN "BatchGetSymbols" para descargar los datos de OHLC para múltiples tickers en un solo marco de datos.

Puede que no sea necesario construir el bucle para esto.

Consulte el siguiente enlace para obtener más información https://cran.r-project.org/web/packages/BatchGetSymbols/vignettes/BatchGetSymbols-vignette.html

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