【问题标题】:Warning: getSymbols, tq_get, getSymbols.yahoo does not return prices for to date警告:getSymbols、tq_get、getSymbols.yahoo 不返回迄今为止的价格
【发布时间】:2018-12-24 17:55:22
【问题描述】:

这实际上更像是一个警告,但我确实提出并回答了一个问题。当to 日期参数在getSymbolstq_getgetSymbols 中指定时,即使文档 (quantmod::getSymbols.yahoo) 声明它将“在此日期之前检索数据”。考虑以下取自 tidyquant vignette 的示例:

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号有价格;市场开盘,价格可以在yahoo finance 上查看。

文档,例如 tidyquant vignette,经常只显示 head 函数的结果,所以这是一个很容易错过的细节。如果在此示例中,您想要 2015 年的性能,那么您将错过一天。

那么问题来了:我如何让这些函数返回直到并包括 to 日期参数的价格?

【问题讨论】:

标签: r quantmod tidyquant


【解决方案1】:

请注意,源为yahoogetSymbols 函数返回Date 类型的index.class。如果您从 Tiingo 获取数据,则返回的 index.class 的类型为 POSIXct,并且您可以按预期获取数据并包括“起始日期”。即

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”)

如果您想使用 Yahoo 数据,简单的解决方案是省略 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

【讨论】:

    【解决方案2】:

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

    as.Date("2015-12-31") + lubridate::days(1)

    【讨论】:

      【解决方案3】:

      对我有用的是:

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

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

      【讨论】:

      • 也许你应该给出更多的解释或细节!
      • 嗯,由于某种原因,返回的股票数据不包括今天。几天前它停止了。因此,我在 Sys.Date+10 中添加了 10 天……就成功了。例如设置 from=“2019-01-01” 和 to=Sys.Date()+10 并返回从 2019 年 1 月 1 日到今天的价格
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-08-14
      • 1970-01-01
      • 1970-01-01
      • 2014-11-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多