r语言 - 警告:getSymbols, tq_get, getSymbols.yahoo 不返回迄今为止的价格



这实际上更像是一个警告,但我确实问并回答了一个问题。 当在getSymbolstq_getgetSymbols中指定to日期参数时,该函数返回截至但不包括截至日期的日期的价格,即使文档(quantmod::getSymbols.yahoo)声明它将"检索截至此日期的数据"。 考虑以下取自整洁小插图的示例:

Ra <- c("AAPL", "GOOG", "NFLX") %>%
tq_get(get  = "stock.prices",
       from = "2010-01-01",
       to   = "2015-12-31")
人们可能期望结果包括 2015-12-31 的价格

,但它只返回 2015-12-30 的价格。 有31日的价格;市场是开放的,价格可以在雅虎财经上查看。

诸如整洁的小插图之类的文档通常仅显示头部功能的结果,因此这是一个容易错过的细节。 如果在此示例中,您希望获得 2015 年的效果,那么您将错过一天。

因此,对于以下问题:如何让这些函数返回包含to日期参数的价格?

请注意,带有源 yahoogetSymbols 函数返回一个 Date 类型的索引.class。如果您从 Tiingo 获取数据,则返回的索引类型为 POSIXct.class 并且您可以按预期获取数据并包括"开始日期"。即

getSymbols("AAPL", src = "tiingo", to = "2015-12-31", api.key = "xxx"); tail(AAPL)
[1] "AAPL"
           AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume
2015-12-23    107.27    108.85 107.2000     108.61    32657354
2015-12-24    109.00    109.00 107.9500     108.03    13596680
2015-12-28    107.59    107.69 106.1807     106.82    26704210
2015-12-29    106.96    109.43 106.8600     108.74    30931243
2015-12-30    108.58    108.70 107.1800     107.32    25213777
2015-12-31    107.01    107.03 104.8200     105.26    40912316

(注意:输入来自Tiingo的个人API.token,而不是我示例中的3个"x")

检查:?getSymbols.tiingo ,它只能由getSymbols在内部调用。此方法不应直接调用,而是调用 getSymbols("x", src="tiingo”)

如果您想使用雅虎数据,简单的解决方案是省略to参数并将数据子集到您想要的结束日期:

tail(getSymbols('AAPL',auto.assign = F)['::2015-12-31'])
           AAPL.Open AAPL.High AAPL.Low AAPL.Close AAPL.Volume AAPL.Adjusted
2015-12-23    107.27    108.85   107.20     108.61    32657400     103.01801
2015-12-24    109.00    109.00   107.95     108.03    13570400     102.46785
2015-12-28    107.59    107.69   106.18     106.82    26704200     101.32014
2015-12-29    106.96    109.43   106.86     108.74    30931200     103.14129
2015-12-30    108.58    108.70   107.18     107.32    25213800     101.79442
2015-12-31    107.01    107.03   104.82     105.26    40635300      99.84048

我的建议是在to日期参数中添加一天。我尝试将时区更改为 UTC 但无效。 在示例中,将 to 参数设为:

如。日期("2015-12-31") + 润滑日期::d AYS(1)

对我有用的是:

getSymbols("xxx",src="yahoo",from=xxx,to=end,periodicity="daily")
where end=Sys.Dat()+10

那是我得到当天价格的时候

最新更新