看来yahoo_finance包使用的实时YQL数据是陈旧的。 69.71即将于5月11日收盘。正确的价格应为69.3。
的简单的解决方案是要么访问同一包的历史数据表作为在
>>> from yahoo_finance import Share
>>> stock = Share('XLV')
>>> data, = stock.get_historical('2016-05-12','2016-05-12')
>>> data['Close']
69.300003
或者,直接从雅虎/金融网站抓住关闭数据。 (更快,更灵活)当试图复制你的情况时,我没有得到你报告的价值观的闪烁,但我确实接近了(5月20日而不是5月23日)。也许你看到的闪烁是YQL有时会到达带有过时数据的服务器的结果,有时不会。这里的代码从yahoo_finance(a)的历史数据,yahoo_finance(b)的实时数据,直接从雅虎财务实时报价(c)以及直接从雅虎财务历史数据( d)。
import csv
import time
import datetime
import requests
import pytz
from yahoo_finance import Share
hist_url = 'http://real-chart.finance.yahoo.com/table.csv?s=XLV&a=4&b=23&c=2016&g=d&ignore.csv'
realtime_url = 'http://download.finance.yahoo.com/d/quotes.csv?s=XLV&f=p&e=.csv'
eastern = pytz.timezone('US/Eastern')
while True:
stock = Share('XLV')
a = stock.get_historical('2016-05-23','2016-05-23')[0]['Close']
b = stock.get_prev_close()
r = requests.get(hist_url)
reader = csv.DictReader(r.iter_lines())
c = float(next(reader)['Close'])
d = float(requests.get(realtime_url).text)
print datetime.datetime.now(eastern).time(), a, b, c, d
time.sleep(120)
从stock.get_prev_close()在第3列的收盘价一致陈旧,而其他数字是按照下面的输出正确的:
09:24:51.582532 69.410004 69.69 69.410004 69.41
09:26:52.749902 69.410004 69.69 69.410004 69.41
09:28:54.589506 69.410004 69.69 69.410004 69.41
09:30:56.681914 69.410004 69.69 69.410004 69.41
09:32:58.255181 69.410004 69.69 69.410004 69.41
我不知道这是否会工作对你更好,但我发现这个包似乎做了类似的事情 - https://github.com/cgoldberg/ystockquote/blob/master/ystockquote.py。我发现它也有一个get_previous_close函数,但我没有测试它。今天晚些时候我会再试一次,让你知道。 –
我只是想在这里提出一个建议。如果您正在反复使用股票价格,则可以观察到yahoo_finance有时不正确(我不是说15分钟慢)。为了拉动当前的股票价格,谷歌理财更受青睐,并拉动历史数据,yahoo_finance具有更好的功能。希望能帮助别人。 – Bhargav