Quantmod,getSymbols错误尝试复制答案
我刚刚下载了Quantmod
软件包,并且一直在玩getSymbols
。 我希望能够获得多个股票的数据,如下面的问题所示:getSymbols并使用lapply,Cl,并合并以提取收盘价格。
不幸的是,当我尝试复制答案时:
tickers <- c("SPY","DIA","IWM","SMH","OIH","XLY",
"XLP","XLE","XLI","XLB","XLK","XLU")
getSymbols(tickers, from="2001-03-01", to="2011-03-11")
我收到以下错误消息:
Error in download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m, :
cannot open URL
'http://chart.yahoo.com/table.csv?s=SPY&a=2&b=01&c=2001&d=2&e=11&f=2011&g=d&q=q&y=0&z=SPY&x=.csv'
In addition: Warning message:
In download.file(paste(yahoo.URL, "s=", Symbols.name, "&a=", from.m,
: cannot open: HTTP status was '0 (null)'
这是我的sessionInfo()
R version 3.0.2 (2013-09-25)
Platform: x86_64-apple-darwin10.8.0 (64-bit)
locale:
[1] en_US.UTF-8/en_US.UTF-8/en_US.UTF-8/C/en_US.UTF-8/en_US.UTF-8
attached base packages:
[1] stats graphics grDevices utils datasets methods base
other attached packages:
[1] quantmod_0.4-0 TTR_0.22-0 xts_0.9-7 zoo_1.7-10 Defaults_1.1-1
loaded via a namespace (and not attached):
[1] grid_3.0.2 lattice_0.20-23 tools_3.0.2
编辑:回应OP的评论:
所以底线似乎是提供免费下载历史数据的网站是古怪的,至少可以说。 它们不一定适用于所有有效的符号,并且有时它们因无明显原因而变得不可用。 ichart.yahoo.com/table.csv
24小时前为我工作,但目前不适用(对我而言)。 这可能是因为雅虎对我的IP施加了24小时锁定,如果他们检测到可解释为DDOS攻击的活动,他们将执行此操作。 或者可能是由于其他原因...
下面更新的代码询问谷歌,目前确实有效(除此之外),除了道琼斯工业平均指数以外的所有其他代码。 请注意,如果指定交易所和交易EXCHANGE:SYMBOL
(交易所EXCHANGE:SYMBOL
),则取得更多成功。 没有交换,我无法下载SMH。 最后,如果您遇到问题,请尝试取消打印语句的注释并将URL粘贴到浏览器中,以查看会发生什么情况。
tickers <- c("SPY","DJIA","IWM","NYSEARCA:SMH","OIH","XLY",
"XLP","XLE","XLI","XLB","XLK","XLU")
g <- function(x,from,to,output="csv") {
uri <- "http://www.google.com/finance/historical"
q.symbol <- paste("q",x,sep="=")
q.from <- paste("startdate",from,sep="=")
q.to <- paste("enddate",to,sep="=")
q.output <- paste("output",output,sep="=")
query <- paste(q.symbol,q.output,q.from,q.to,sep="&")
url <- paste(uri,query,sep="?")
# print(url)
try(assign(x,read.csv(url),envir=.GlobalEnv))
}
lapply(tickers,g,from="2001-03-01",to="2011-03-11",output="csv")
您可以从圣路易斯联储下载DJI,这非常可靠。 不幸的是,你从1896年开始就掌握了这一切,这是一个时间序列。
getSymbols("DJIA",src="FRED")
原始回应:
除了SMH和OIH之外,这对我来说很有用。
tickers <- c("SPY","DJIA","IWM","SMH","OIH","XLY",
"XLP","XLE","XLI","XLB","XLK","XLU")
f <- function(x) {
uri <- "http://ichart.yahoo.com/table.csv"
symbol <- paste("s",x,sep="=")
from <- "a=2&b=1&c=2001"
to <- "d=2&e=11&f=2011"
period <- "g=d"
ignore <- "ignore=.csv"
query <- paste(symbol,from,to,period,ignore,sep="&")
url <- paste(uri,query,sep="?")
try(assign(x,read.csv(url),envir=.GlobalEnv))
}
lapply(tickers,f)
这与getSymbols(...)
的主要区别在于它使用ichart.yahoo.com
(如此处所述),而getSymbols(...)
使用chart.yahoo.com
。 前者似乎更可靠。 根据我的经验,在雅虎使用getSymbols(...)
是一个令人头痛的问题。
如果@ user2492310的建议,使用src="google"
适合您,那么显然这是要走的路。 它不适合我。
另外一个注意事项:SMH和OIH在2001年并不存在。其他人至少可以返回到2000年。所以,如果您提供日期范围,ichart.yahoo.com(和chart.yahoo.com)可能会引发错误超出符号的操作范围。
链接地址: http://www.djcxy.com/p/76685.html