在 For 循环中使用 quantmod 函数 getSymbols 下载失败

Download failed while using quantmod function getSymbols in For loop

我正在尝试使用 quantmod 包获取构成印度 NSE 指数的 1632 只股票的数据。我可以单独下载股票;但是,当我遍历所有股票时,我会超时。如何循环getSymbols函数来下载想要的数据?

报告以下错误:

Error: '20MICRONS.NS' download failed after two attempts. Error message: HTTP error 404. 5. stop(Symbols.name, " download failed after two attempts. Error", " message:\n", attr(dl, "condition")$message, call. = FALSE) 4. getSymbols.yahoo(Symbols = "'20MICRONS.NS'", env = , verbose = FALSE, warnings = TRUE, auto.assign = TRUE) 3. do.call(paste("getSymbols.", symbol.source, sep = ""), list(Symbols = current.symbols, env = env, verbose = verbose, warnings = warnings, auto.assign = auto.assign, ...)) 2. getSymbols(as.character(x), src = "yahoo") 1. f(Symbol[i])

MyData <- read.csv(file="C:/Documents/EQUITY_L.csv", header=TRUE)
Symbol <- MyData$SYMBOL

f <- function(x) { getSymbols(as.character(x), src='yahoo') }
for (i in 1:1632) { f(Symbol[i]) }

好的,现在我明白了...

首先从以下位置下载 Symbols: https://www.nseindia.com/corporates/content/securities_info.htm 这是页面上列出的第一个文件。

看来 NSE 文件中的每个符号都需要添加一个“.NS”后缀。这就是为什么您可以单独下载股票,但是当您将文件的符号列传递给 getSymbols.

时它会失败

我还会创建一个新环境来将所有股票转储到其中并使您的全球环境易于管理。

最后,将NSE_Symbols传递给quantmods getSymbols函数获取每日数据。 我喜欢将 sapplytry 结合使用,这样如果您遇到错误的符号, HTTP error 404 不会停止下载剩余的符号。

EQUITY_L <- read.csv("~/R/stack-overflow/data/EQUITY_L.csv", stringsAsFactors = FALSE)

NSE_Symbols <- paste0(EQUITY_L$SYMBOL,".NS")

NSE_stocks <- new.env() 

library(quantmod)
sapply(NSE_Symbols, function(x){try(getSymbols(x, env=NSE_stocks), silent=TRUE)})

接下来,测试并找出哪些符号没有下载。除了 17,我都能得到。

length(NSE_Symbols[!(NSE_Symbols %in% names(NSE_stocks))])
[1] 17

NSE_Symbols[!(NSE_Symbols %in% names(NSE_stocks))]
[1] "3PLAND.NS"     "BHAGYANGR.NS"  "CHEMFAB.NS"    "ELECTROSL.NS"  "GANGESSECU.NS" 
[6] "GMMPFAUDLR.NS" "GUJRAFFIA.NS"  "HBSL.NS"       "KALYANI.NS"    "MAGADSUGAR.NS" 
[11] "MANAKCOAT.NS"  "MCDOWELL-N.NS" "NIRAJISPAT.NS" "PALASHSECU.NS" "SIGIND.NS"
[16]"SPTL.NS"       "SUBCAPCITY.NS"

下载成功的符号将整齐地包含在NSE_stocks环境中。

祝你好运,