遇到字符串的R-xts对象不是标准的明确格式

遇到字符串的R-xts对象不是标准的明确格式,r,xts,posixct,posixlt,R,Xts,Posixct,Posixlt,我试图通过与标准普尔500指数成份股公司的合作来复制动量策略。然而,事实证明,getSymbols无法获取所有股票的价格数据,我使用以下工具仅获得了大约300只股票: getSymbols(symbols, src='yahoo', index.class=c("POSIXt","POSIXct"), from='2000-01-01', to = '2015-12-31') 我发现这是关于这个问题的讨论,可能来自“chart.yahoo.com”。因此,我采用了作者建议的方法,它似乎在没有警

我试图通过与标准普尔500指数成份股公司的合作来复制动量策略。然而,事实证明,
getSymbols
无法获取所有股票的价格数据,我使用以下工具仅获得了大约300只股票:

getSymbols(symbols, src='yahoo', index.class=c("POSIXt","POSIXct"), from='2000-01-01', to = '2015-12-31')
我发现这是关于这个问题的讨论,可能来自“chart.yahoo.com”。因此,我采用了作者建议的方法,它似乎在没有警告的情况下工作得很好

更新:在检查了
quantmod
软件包后,我发现它现在也在从ichart.yahoo.com获取数据

然而,在计算月度收盘价时,出现如下错误:

Error in try.xts(x) : 
  Error in as.POSIXlt.character(x, tz, ...) :   character string is not in a standard unambiguous format
Called from: try.xts(x)
以下是我的问题和我不明白的地方:

1)是否有可能将getSymbols直接发送到“ichart.yahoo.com”以提供更可靠的报价

2) 我已将所有符号转换为xts对象,那么为什么从try.xts调用此错误

3) 我想问题在于日期,它不是ISO8601格式。但是我还没有找到一种方法将日期转换为POSIXct,因为这些日期只有四舍五入到天

4) 非常感谢对代码的任何评论

随附代码,sp500components.csv可从下载

谢谢你的时间和善意的帮助!祝你一切顺利

library(quantstrat)
library(FinancialInstrument)
library(TTR)

symbols <- read.table("sp500components.csv", header = FALSE, sep = ",")$V1
symbols <- as.character(symbols) 

currency("USD")
stock(symbols, currency="USD",multiplier=1)

MonthlyAd <- function(x){
  # Converts daily data to monthly and returns only the monthly close 
  # Note: only used with Yahoo Finance data so far
  # Thanks to Joshua Ulrich for the Monthly Ad function
  # 
  # args:
  #   x = daily price data from Yahoo Finance
  #
  # Returns:
  #   xts object with the monthly adjusted close prices

  sym <- sub("\\..*$", "", names(x)[1])
  Ad(to.monthly(x, indexAt = 'lastof', drop.time = TRUE, name = sym))
}

symEnv <- new.env()

f <- function(x) {
  uri    <- "http://ichart.yahoo.com/table.csv"
  symbol <- paste("s",x,sep="=")
  from   <- "a=1&b=1&c=2000"
  to     <- "d=31&e=12&f=2015"
  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=symEnv))
}

lapply(symbols,f) 

ts <- function(x) {
    x["Date"] <- as.Date.character(x[["Date"]], "%Y-%m-%d")
    x <- xts(x[,-1], order.by = x$Date)
    colnames(x) <- gsub("Adj", "Adjusted", colnames(x))
    assign(symbol, x)
}

eapply(symEnv, ts) 

symbols.close <- do.call(merge, eapply(symEnv, MonthlyAd))
库(quantstrat)
图书馆(金融仪器)
图书馆(TTR)

符号由于您没有提供错误原因的可复制示例,我不得不进行一些猜测。因此,我假设您正在对
symEnv
中的对象调用
MonthlyAd

f
函数创建的对象不具有
to.monthly
期望的特征。也就是说,它创建的data.frame没有表示每个观测的日期时间的行名称

如果对由
eapply(symEnv,ts)
创建的对象调用
MonthlyAd
,则没有问题

symList <- eapply(symEnv, ts)
symListMonthly <- lapply(symList, MonthlyAd)
symEnv <- new.env()
getSymbols("SPY;IWM", env = symEnv)
symListMonthly <- eapply(symEnv, MonthlyAd)