我正在尝试使用quantmod
包获得包含印度NSE指数的1632种股票的数据。我可以单独下载股票;然而,当我遍历所有股票时,我正在暂停。如何循环getSymbols
函数下载所需数据?
报告以下错误:
错误:两次尝试后'20MICRONS.NS'下载失败。错误消息:HTTP错误404. 5.停止(符号。名称,“两次尝试后下载失败。错误”,“消息:\ n”,attr(dl,“条件”)$ 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 = “”),列表(符号= current.symbols,env = env,verbose = verbose,warnings = warnings,auto.assign = auto.assign,...))2。getSymbols(as.character(x),src = “雅虎”)1。f(符号[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]) }
好的,现在我明白了......
首先从以下网址下载符号:https://www.nseindia.com/corporates/content/securities_info.htm这是页面上列出的第一个文件。
看来NSE文件中的每个符号都需要添加一个“.NS”后缀。这就是您可以单独下载股票的原因,但是当您将文件的符号列传递给getSymbols
时它会失败。
我还创建了一个新的环境来将每个库存转储到您的全球环境中并使其易于管理。
最后,将NSE_Symbols
传递给quantmods getSymbols
函数以获取日常数据。我喜欢使用sapply
和try
,这样如果你遇到一个坏符号,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
环境中。
祝好运,