【问题标题】:Quantmod getSymbols systematically returns missing value on Chinese stocksQuantmod getSymbols 系统地返回中国股票的缺失值
【发布时间】:2019-02-27 17:06:41
【问题描述】:

今天(2019-2-27),发现几乎所有在沪/深上市的中国公司的股票价格都无法通过quantmod中的“getSymbols”功能完全下载,总是产生数据缺失的警告信息。然而,美国公司和在美国上市的中国公司均未受到影响。据我所知,这是我第一次遇到这个问题。我在想这个过程的哪些部分出了问题。雅虎金融数据库或getSymbols???我尝试的例子实际上是一些最大的公司,所以我假设他们的股票数据是完全可用的。

> getSymbols("BABA") ### Alibaba listed in US, not affected
[1] "BABA"
> getSymbols("BILI")  
[1] "BILI"
> getSymbols("0700.hk") ### Tencent listed in HK, affected.
[1] "0700.HK"
Warning message:
0700.hk contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 
> getSymbols("601398.SS")
[1] "601398.SS"
Warning message:
601398.SS contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 
> getSymbols("601318.SS")
[1] "601318.SS"
Warning message:
601318.SS contains missing values. Some functions will not work if objects contain missing values in the middle of the series. Consider using na.omit(), na.approx(), na.fill(), etc to remove or replace them. 

【问题讨论】:

    标签: r quantmod yahoo-finance


    【解决方案1】:

    这是一个雅虎问题。如果您查看 yahoo 历史数据选项卡上的december 2011 data from tencent,您可以看到 yahoo 没有 12 月 24 日和 31 日的数据。这是缺少数据的 3 条记录中的两条。另一个是 2008-08-22。

    你知道,getSymbols 对 yahoo 的默认请求从 2007 年 1 月 1 日开始。因此,您可以将其更改为较近的日期。但它是免费数据。您不能期望与其他数据提供者具有相同的数据质量。对于其他代码,雅虎也经常发生这种情况。

    【讨论】:

    • 感谢您的回答!我注意到雅虎数据库实际上维护得很差,至少在我的中国股票案例中,我发现我尝试的几乎所有中国股票都包含缺失值。我设法找到了一种获得更高质量数据的新方法,即 getSymbols.tiingo 函数。因此,我很高兴为这个问题添加我自己的答案。
    【解决方案2】:

    是的,正如@phiver 上面提到的,来自雅虎金融数据库的数据质量并不令人满意。同时,谷歌金融从 2018 年 3 月起就停止了对 quantmod 的支持,因此我在 quantmod 的框架内寻找另一个数据源。

    我发现随着谷歌金融退出,tiingo 数据库开始支持 quantmod。 https://www.r-bloggers.com/goodbye-google-hello-tiingo/

    1. 去tiingo网站创建一个账户,然后你就有你的api了。
    2. 使用 getSymbols.tiingo(ticker,api.key="your key") 下载数据

    顺便说一句,getSymbol.tiingo 中的中国股票代码与 getSymbols 有点不同。您无需指明哪个证券交易所,ss 或 sz。

    getSymbols("000001.SS")
    
    getSymbols.tiingo("000001",api.key="xxxxx")

    您可能还需要存储您的 api.key,我建议您创建一个 sn-p,这是迄今为止我发现的最有效的方法。更多细节可以在我关于如何在 Rstudio 中存储 api.key 的另一个答案中看到。

    【讨论】:

      猜你喜欢
      • 2019-07-04
      • 1970-01-01
      • 2018-05-22
      • 1970-01-01
      • 1970-01-01
      • 2016-05-18
      • 1970-01-01
      • 2017-04-07
      • 1970-01-01
      相关资源
      最近更新 更多