0

这实际上更像是一个警告,但我确实提出并回答了一个问题。当todate 参数在getSymbols, tq_get,中指定时getSymbols,该函数返回截至日期但不包括日期的价格,即使文档 ( 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号有价格;市场开盘,价格可以在雅虎财经上查看。

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

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

4

3 回答 3

2

请注意,getSymbols带有 source 的函数yahoo返回 index.class 类型Date。如果您从 Tiingo 获取数据,则返回的 index.class 是类型POSIXct,并且您可以按预期获取数据并包括“起始日期”。IE

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

Check: ?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
于 2019-01-04T08:51:21.050 回答
0

对我有用的是:

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

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

于 2019-12-30T22:16:57.140 回答
0

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

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

于 2018-12-24T17:55:22.623 回答