下载S& P500组件的收盘价

时间:2017-06-01 01:16:18

标签: r

我在这里很新,并且在这里遇到了非常奇怪的问题(正如我自己想的那样)。我有一个包含所有S& P500代号(MMM,ABT,ABBV,ACN,ATVI,AYI,ADBE ......)的专栏。然后,我执行一些代码,为每个股票代码请求xts。我不擅长创建循环,所以我这样做(第一列由代码组成):

sp500=read.csv(text=getURL("https://raw.githubusercontent.com/datasets/s-and-p-500-companies/master/data/constituents-financials.csv"),  header=T)
n=nrow(sp500)
for(i in 1:n) {
  j <- sp500[i,1]
  getSymbols(j)
  j=as.data.frame(j)      
}

所以我得到了很多数据集,这些数据集的方式与之前提到的列中给出的代码相同。但问题在于,我以某种方式制作了一种聚合数据集,由每个数据集中的一个精确列组成。换句话说,我必须采用MMM$MMM.Close并添加ABT$ABT.Close等等。

我想,手动完成它会很长,所以我想知道,如何逐个解决这些数据集的代码(带循环),了解它&# 39;带有代码的列中的名字?

1 个答案:

答案 0 :(得分:0)

下面是一个代码,用于下载所选代码的每日CLOSE价格(归功于@Quant Guy)。我无法打开你的文件,找不到一个免费的可靠来源(除了维基百科找到所有S&amp; P500索引组件),所以我手动输入了代码:

library(quantmod)
    tickers = c( "WMT", "MMM","AIG", "AAPL", "KO",
             "COST", "C", "AMZN", "ICE", "VTR")

getSymbols(tickers, from = "2010-01-01", to = "2015-12-31")
P <- NULL
seltickers <- NULL

for(ticker in tickers) {     
  tmp = Cl(eval(parse(text = ticker))) ## Cl from quantmod
  if(is.null(P)){ timeP = time(tmp) }
  if(any(time(tmp)!=timeP)) next
  else P = cbind(P, as.numeric(tmp))
  seltickers = c(seltickers, ticker)
}

P = xts(P, order.by = timeP)
colnames(P) = seltickers

只需修改tickers,你就应该好了。