使用R在quantmod中调用代码列表

时间:2014-11-09 23:04:27

标签: r symbols quantmod stock

我想使用quantmod从中国股票清单中获取一些数据。

列表如下:

002705.SZ -- 002730.SZ(在这个序列中,有一些代码与Null股票匹配,例如,没有股票称为002720.SZ)

300357.SZ -- 300402.SZ
603188.SS
603609.SS
603288.SS
603306.SS
603369.SS

我想编写一个循环来运行所有这些股票以获取每个股票的数据,并将它们保存到一个数据框中。

1 个答案:

答案 0 :(得分:0)

这应该让你开始。

library(quantmod)
library(stringr)   # for str_pad
stocks <- paste(str_pad(2705:2730,width=6,side="left",pad="0"),"SZ",sep=".")
get.stock <- function(s) {
  s <- try(Cl(getSymbols(s,auto.assign=FALSE)),silent=T)
  if (class(s)=="xts") return(s)
  return (NULL)
}
result <- do.call(cbind,lapply(stocks,get.stock))
head(result)
#            X002705.SZ.Close X002706.SZ.Close X002707.SZ.Close X002708.SZ.Close X002709.SZ.Close X002711.SZ.Close X002712.SZ.Close X002713.SZ.Close
# 2014-01-21            15.25            27.79               NA            17.26               NA               NA               NA               NA
# 2014-01-22            14.28            28.41               NA            16.56               NA               NA               NA               NA
# 2014-01-23            13.65            27.78            33.62            15.95            19.83               NA            36.58               NA
# 2014-01-24            15.02            30.56            36.98            17.55            21.81               NA            40.24               NA
# 2014-01-27            14.43            31.26            40.68            18.70            23.99            26.34            44.26               NA
# 2014-01-28            14.18            30.01            44.75            17.66            25.57            28.97            48.69               NA

这利用了getSymbols(...)返回xts对象或带有错误消息的字符串(如果提取失败)这一事实。

请注意,cbind(...)个对象的xts根据索引排列,因此其行为类似于merge(...)

这会生成xts个对象,而不是数据框。要将其转换为data.frame,请使用:

result.df <- data.frame(date=index(result),result)