Python Yahoo finance API某些天缺少数据

Python Yahoo finance API某些天缺少数据,python,api,yahoo-finance,Python,Api,Yahoo Finance,我正在编写一个从Yahoo finance API获取信息的脚本,尽管该API速度非常慢,但它仍然适用于我将要使用它的目的。在测试脚本的过程中,我发现我遇到了IndexOutOfBounds异常,经过调查,我发现Yahoo Finance正在返回我持有的股票的股票报价信息,只是其中一只股票缺少一天,我怀疑当使用更宽的时间段时,它会错过更多的时间,因为我以前在使用更宽的时间段时遇到过这种异常,但我认为我的代码中有一些东西,我可以稍后修复 雅虎财经API丢失了整整几天的股票报价信息,这使得该API对

我正在编写一个从Yahoo finance API获取信息的脚本,尽管该API速度非常慢,但它仍然适用于我将要使用它的目的。在测试脚本的过程中,我发现我遇到了IndexOutOfBounds异常,经过调查,我发现Yahoo Finance正在返回我持有的股票的股票报价信息,只是其中一只股票缺少一天,我怀疑当使用更宽的时间段时,它会错过更多的时间,因为我以前在使用更宽的时间段时遇到过这种异常,但我认为我的代码中有一些东西,我可以稍后修复

雅虎财经API丢失了整整几天的股票报价信息,这使得该API对我来说毫无用处。还有其他人经历过这种情况吗?有什么解决办法吗?我想我需要用另一种方法来获取数据

现在我正在使用这个python模块

Yahoo finance是我目前发现的唯一一个包含我需要的信息并支持我需要查询数据的证券交易所的API

更新: 是的,我可以重新生成问题。以下是重新生成的代码:

>>> import datetime as dt
>>> import yahoo_finance as yf
>>>
>>> quote = yf.Share('GJF.OL')
>>> date_from = str(dt.date.today() - dt.timedelta(days=5))
>>> date_to = str(dt.date.today())
>>> quote_his = quote.get_historical(date_from, date_to)
>>> import pprint
>>> pprint.pprint(quote_his)
[{'Adj_Close': '156.50',
  'Close': '156.50',
  'Date': '2016-10-14',
  'High': '156.50',
  'Low': '153.10',
  'Open': '153.50',
  'Symbol': 'GJF.OL',
  'Volume': '487600'},
 {'Adj_Close': '153.60',
  'Close': '153.60',
  'Date': '2016-10-13',
  'High': '153.60',
  'Low': '152.50',
  'Open': '153.30',
  'Symbol': 'GJF.OL',
  'Volume': '508800'}]
>>>
此代码应打印周一(2016-10-17)的股票信息,但不打印。如果我选择另一只股票,我也会在字典里找到周一的股票信息

更新2: 我尝试了另一个名为ystockquote的模块,得到了相同的结果。我得到周四和周五的信息,但不是周一。如果我要求一个不同的报价,我会从这三天里得到信息。当我进入雅虎财经网站时,它有周一的股票信息,如图表等

更新3: 现在可以找到GJF.OL的数据,该数据可能与API中历史表格的股票价格延迟有关,如下所述。然而,在我没有收到GJF.OL股票的股票价格信息的日期,我仍然能够从其他股票收到股票价格信息


当我现在收到GJF.OL股票的股价信息时,我试图从股票中获取最后165天的股价信息,但NAS.OL股票缺少1天,这意味着返回的字典不包含当天的任何数据,而其他股票则有该信息。股票为NAS.OL,日期为2016年8月3日,数据缺失。你知道为什么缺少这些数据吗?

这可能与Python绑定无关,完全是Yahoo数据。如果通读绑定,则运行的命令本质上是

curl -G 'https://query.yahooapis.com/v1/public/yql' \
    --data-urlencode 'env=store://datatables.org/alltableswithkeys' \
    --data-urlencode 'format=json' \
    --data-urlencode 'q=select * from yahoo.finance.historicaldata where symbol = "GJF.OL" and startDate = "2016-10-13" and endDate = "2016-10-18"'
当我为自己咆哮时,我得到了13、14、17和18的数据。您正在访问的表被称为历史数据,因此有24小时的时间显示数据并不是不合理的


如果您看到该端点与Python绑定之间存在差异,您可能会发现一些问题,但这些绑定的定义非常简单,似乎只是传递了日期范围。

这可能与Python绑定无关,完全是Yahoo数据。如果通读绑定,则运行的命令本质上是

curl -G 'https://query.yahooapis.com/v1/public/yql' \
    --data-urlencode 'env=store://datatables.org/alltableswithkeys' \
    --data-urlencode 'format=json' \
    --data-urlencode 'q=select * from yahoo.finance.historicaldata where symbol = "GJF.OL" and startDate = "2016-10-13" and endDate = "2016-10-18"'
当我为自己咆哮时,我得到了13、14、17和18的数据。您正在访问的表被称为历史数据,因此有24小时的时间显示数据并不是不合理的


如果您看到该端点和Python绑定之间存在差异,您可能会发现一些问题,但这些绑定的定义非常简单,似乎只是传递了日期范围。

您能给我们一个关于哪些日期和哪些股票的示例吗?一个API链接或代码片段来重现它将是理想的。如果市场在周末或假日休市,这就可以解释了。是的,我已经更新了答案。API实际上非常聪明,没有在字典中包含周末,因此它们不会显示为空字典,只是从字典中跳过了。您能给我们一个关于哪些天和哪些股票的示例吗?一个API链接或代码片段来重现它将是理想的。如果市场在周末或假日休市,这就可以解释了。是的,我已经更新了答案。API实际上非常聪明,没有在字典中包含周末,因此它们不会显示为空字典,只是从字典中跳过了。是的,我也考虑过这一点,可能会被延迟,但是当我尝试另一种股票报价时,我得到了17日的价格信息,所以我看不出17日从其他股票收到股票报价信息时会出现什么问题。也就是说,当我现在尝试的时候,我确实得到了17号和18号具体报价的股价信息。我真的不明白API会返回其他股票的价格信息,但不会返回GJF.OL报价,因此可能在某个地方出现了某种已经修复的问题。嗯,好吧,基本上还是有些奇怪。如果我试图得到最后165天,我得到117天的市场开放,但对于其中一个报价“NAS.OL”,我只有116天,而我得到117天的其他股票。在检查NAS.OL库存中缺失的2016年8月3日的库存信息后。关于它丢失的原因有什么想法吗?我通过
curl
命令回到了2016-08-03这个日期范围:
startDate=“2016-08-01”和endDate=“2016-08-10”
。这感觉像是雅虎那边的一只虫子。当有东西丢失时,试着调大范围;也许他们在按符号和时间范围缓存结果。嗯,好的。我只想得到2016-08-03到2016-08-03和2016-08-02到2016-08-04,这给了我其他股票的数据,但没有NAS.OL的数据。我可以实现一个回退,直接使用curl命令,但是如果这是模块已经在做的事情,那么我猜它没有任何用处。奇怪的是你收到了这个请求