mtext r
Descargando los precios de las acciones de Yahoo en R (7)
Desafortunadamente, la URL "ichart.finance.yahoo.com" está muerta y no funciona ahora. Como sé, Yahoo lo cerró y parece que no se abrirá.
Hace varios días encontré una buena alternativa ( https://eodhistoricaldata.com/ ) con una API muy similar a Yahoo Finance.
Básicamente, para el script R descrito anteriormente, solo necesita cambiar esta parte:
URL <- paste0("ichart.finance.yahoo.com/table.csv?s=", symbols[i])
a esto:
URL <- paste0("eodhistoricaldata.com/api/table.csv?s=", symbols[i])
Luego agregue una clave API y funcionará de la misma manera que antes. Ahorré mucho tiempo para mis R-scripts en él.
Esta es una pregunta para principiantes en R. Estoy descargando los datos del precio de las acciones mensuales de yahoo finance usando R, donde se leen los nombres de un archivo de texto. Estoy utilizando un bucle para leer los nombres de teletipo para descargar los datos y ponerlos en una lista. Mi problema es que algunos nombres de ticker pueden no ser correctos, por lo que mi código se detiene cuando encuentra este caso. Quiero lo siguiente.
- omita el nombre del ticker si no es correcto.
- Cada elemento de la lista es un marco de datos. Quiero que los nombres de ticker se agreguen a los nombres de variables en los marcos de datos de elementos.
- Necesito una forma eficiente de crear un marco de datos que tenga los precios de cierre como variables.
Aquí está el código de muestra para la versión simplificada de mi problema.
library(tseries)
tckk <- c("MSFT", "C", "VIA/B", "MMM") # ticker names defined
numtk <- length(tckk);
ustart <- "2000-12-30";
uend <- "2007-12-30" # start and end date
all_dat <- list(); # empty list to fill in the data
for(i in 1:numtk)
{
all_dat[[i]] <- xxx <- get.hist.quote(instrument = tckk[i], start=ustart, end=uend, quote = c("Open", "High", "Low", "Close"), provider = "yahoo", compression = "m")
}
El código se detiene en la tercera entrada, pero quiero omitir este ticker y pasar a "MMM". He oído hablar de la función Trycatch () pero no sé cómo usarla.
Según la pregunta 2, quiero que los nombres de las variables para el primer elemento de la lista sean "MSFTopen", "MSFThigh", "MSFTlow" y "MSFTclose". ¿Hay una mejor manera de hacerlo aparte de usar una combinación de función de bucle y pegar ()?
Finalmente, para la pregunta 3, necesito un marco de datos con tres columnas correspondientes a los precios de cierre. Una vez más, estoy tratando de evitar un bucle aquí.
Gracias.
Esto también es un poco tarde ... Si desea capturar datos solo con las funciones básicas de R sin tratar con paquetes adicionales, solo use la función read.csv(URL)
, donde la URL es una cadena que apunta al lugar correcto en Yahoo. Los datos se incluirán como un marco de datos, y deberá convertir la ''Fecha'' de una cadena a un tipo de Fecha para que cualquier gráfico se vea bien. El fragmento de código simple está abajo.
URL <- "http://ichart.finance.yahoo.com/table.csv?s=SPY"
dat <- read.csv(URL)
dat$Date <- as.Date(dat$Date, "%Y-%m-%d")
El uso de las funciones básicas de R puede darle más control sobre la manipulación de datos.
Ligeramente modificado de las soluciones anteriores ... (gracias Shane y Stotastic)
symbols <- c("MSFT", "C", "MMM")
# 1. retrieve data
for(i in seq_along(symbols)) {
URL <- paste0("http://ichart.finance.yahoo.com/table.csv?s=", symbols[i])
dat <- read.csv(URL)
dat$Date <- as.Date(dat$Date, "%Y-%m-%d")
assign(paste0(symbols[i]," _data"), dat)
dat <- NULL
}
Llego un poco tarde a la fiesta, pero creo que esto será muy útil para otros que lleguen tarde.
La función stockSymbols
en TTR
recupera símbolos de instrumentos de nasdaq.com y ajusta los símbolos para que sean compatibles con Yahoo! Financiar. Actualmente devuelve ~ 6,500 símbolos para AMEX, NYSE y NASDAQ. También puede echar un vistazo al código en stockSymbols
que ajusta los tickers para que sean compatibles con Yahoo! Financiar para posiblemente ajustar algunos de los tickers en su archivo.
NOTA: stockSymbols
en la versión de TTR
en CRAN se rompe debido a un cambio en nasdaq.com, pero se corrige en la versión R-forge de TTR
.
Lo hago así, porque necesito tener una lista de precios histórica y un archivo de actualización diaria para ejecutar otros paquetes:
library(fImport)
fecha1<-"03/01/2009"
fecha2<-"02/02/2010"
Sys.time()
y <- format(Sys.time(), "%y")
m <- format(Sys.time(), "%m")
d <- format(Sys.time(), "%d")
fecha3 <- paste(c(m,"/",d,"/","20",y), collapse="")
write.table(yahooSeries("GCI", from=fecha1, to=fecha2), file = "GCI.txt", sep="/t", quote = FALSE, eol="/r/n", row.names = TRUE)
write.table(yahooSeries("GCI", from=fecha2, to=fecha3), file = "GCIupdate.txt", sep="/t", quote = FALSE, eol="/r/n", row.names = TRUE)
GCI <- read.table("GCI.txt")
GCI1 <- read.table("GCIupdate.txt")
GCI <- rbind(GCI1, GCI)
GCI <- unique(GCI)
write.table(GCI, file = "GCI.txt", sep="/t", quote = FALSE, eol="/r/n", row.names = TRUE)
Lo mejor es usar quantmod y almacenar los resultados como una serie de tiempo (en este caso, será xts
):
library(quantmod)
library(plyr)
symbols <- c("MSFT","C","VIA/B","MMM")
#1
l_ply(symbols, function(sym) try(getSymbols(sym)))
symbols <- symbols[symbols %in% ls()]
#2
sym.list <- llply(symbols, get)
#3
data <- xts()
for(i in seq_along(symbols)) {
symbol <- symbols[i]
data <- merge(data, get(symbol)[,paste(symbol, "Close", sep=".")])
}
Si su objetivo final es obtener el cuadro de datos de tres columnas de precios de cierre, entonces el nuevo paquete tidyquant
puede ser más adecuado para esto.
library(tidyquant)
symbols <- c("MSFT", "C", "VIA/B", "MMM")
# Download data in tidy format.
# Will remove VIA/B and warn you.
data <- tq_get(symbols)
# Ticker symbols as column names for closing prices
data %>%
select(.symbol, date, close) %>%
spread(key = .symbol, value = close)
Esto escalará a cualquier número de acciones, por lo que el archivo de 1000 tickers debería funcionar bien.