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

时间:2018-09-11 02:52:03

标签: r quantmod

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

报告以下错误:

  

错误:两次尝试后,“ 20MICRONS.NS”下载失败。错误信息:   HTTP错误404。   5,   停止(Symbols.name,“两次尝试后下载失败。错误”,       “ message:\ n”,attr(dl,“ condition”)$ message,调用。 =假)   4。   getSymbols.yahoo(Symbols =“'20MICRONS.NS'”,env =,       详细=否,警告= TRUE,自动分配= TRUE)   3。   do.call(paste(“ getSymbols。”,symbol.source,sep =“”),列表(Symbols = current.symbols,       env = env,详细=详细,警告=警告,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]) }

1 个答案:

答案 0 :(得分:1)

好,现在我明白了...

首先从以下位置下载符号: 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环境中。

祝你好运