首页 文章

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

提问于
浏览
0

我试图使用 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 = “”),list(符号= 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]) }

1 回答

  • 1

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

    首先从以下网址下载符号: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 环境中 .

    祝好运,

    r quantmod

相关问题