看來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