Cómo descargar precios históricos de acciones en R


Una de las mejores formas de trabajar en algoritmos de trading o automatizar estudios técnicos es descargar los datos de precios históricos directamente desde fuentes en la web.  Este proceso es bastante sencillo y práctico en R cuando nos referimos a acciones de los Estados Unidos.  Para otros mercados y datos fundamentales se necesitan otras fuentes.

Lo primero que necesitamos es instalar el paquete ‘BatchGetSymbols’ con el comando

install.packages('BatchGetSymbols')  

Una vez instalado el paquete, debemos cargarlo

library(BatchGetSymbols)

Con el paquete cargado procederemos a guardar en variables los diferentes parámetros que se necesitan para utilizar la función de descarga.   La información necesaria es la fecha inicial de la serie, la fecha final, la frecuencia de los datos y los tickers de las acciones que se desean traer.

# Definimos las variables necesarias. 

fechaInicial  <- Sys.Date() – 250  # fecha del sistema menos 250 días
fechaFinal <- Sys.Date() # Fecha del sistema cómo fecha final
freqDatos <- 'daily'  # Frecuencia de los datos.
acciones <- c('MSFT', 'AAPL', 'TSLA', 'GPRO')  # Vector con las acciones que se quiere descargar

ahora se deben descargar los datos con la función BatchGetSymbols

Datos <- BatchGetSymbols(tickers = acciones, first.date = fechaInicial, last.date = fechaFinal, freq.data = freqDatos,  cache.folder = file.path(tempdir(), 'BGS_Cache') ) 

“Datos” contiene dos listas, la primera con datos de control o información de la descarga y la segunda los datos de las acciones.

# para verificar la descarga
print(l.out$df.control)
# Para conocer la estructura del DataFrame que contiene las series históricos. 
str(l.out$df.tickers)
head(l.out$df.tickers)

Luego de verificar la descarga se debe cargar la lista de precios históricos en una nueva variable, en este caso la variable acciones.

acciones <- l.out$df.tickers
head(acciones)
names(acciones)

En el Dataframe de datos históricos se encuentra la columna ticker la cual contiene el ticker de la acción, así que si se desea seleccionar los datos de una sola acción se deberá filtrar el DataFrame por esta columna.

# Seleccionar la acción de Tesla
accion_sel <- 'FB'

# Se seleccionarán las columnas de información de precio y volumen.
accion <- acciones[acciones$ticker == accion_sel, c(7,1:5)]
head(accion)

# Por último se asignarán nombres de columnas en español y se reiniciará el índice.
names(accion) <- c('Fecha', 'Apretura', 'Maximo', 'Minimo', 'Cierre', 'Volumen')
head(accion)
rownames(accion) <- NULL # Reinicia los índices

Una segunda opción es usar el paquete tidyquant.

install.packages("tidyquant")
library(tidyquant)
AAPL <- tq_get("AAPL", get="stock.prices", from= "2016-09-01", to= "2017-12-31")
head(AAPL)
AAPL <- data.frame(AAPL)
head(AAPL)

Ratio: 5 / 5

Inicio activadoInicio activadoInicio activadoInicio activadoInicio activado