Dường như dữ liệu YQL thời gian thực mà gói yahoo_finance sử dụng đã cũ. 69.71 đóng cửa vào ngày 11 tháng 5. Giá trị chính xác phải là 69.3.
Các giải pháp dễ dàng là một trong hai truy cập vào bảng dữ liệu lịch sử của gói tương tự như trong
>>> from yahoo_finance import Share
>>> stock = Share('XLV')
>>> data, = stock.get_historical('2016-05-12','2016-05-12')
>>> data['Close']
69.300003
Ngoài ra, lấy các dữ liệu gần trực tiếp từ trang web/Tài chính Yahoo. (Nhanh hơn và linh hoạt hơn nhiều) Khi cố gắng tái tạo tình hình của bạn, tôi không nhận được các giá trị nhấp nháy mà bạn báo cáo, nhưng tôi có một sự đóng cửa cũ (vào ngày 20 tháng 5 thay vì ngày 23 tháng 5). Có lẽ các nhấp nháy bạn thấy là kết quả của YQL đôi khi đi đến một máy chủ với dữ liệu cũ, đôi khi không. Đây là mã được đóng trước đó từ dữ liệu lịch sử của yahoo_finance (a), từ dữ liệu thời gian thực của yahoo_finance (b), trực tiếp từ báo giá thời gian thực tài chính yahoo (c) và trực tiếp từ dữ liệu lịch sử tài chính yahoo (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)
Mức giá đóng cửa từ stock.get_prev_close() trong cột thứ 3 là một cách nhất quán cũ, trong khi số khác là chính xác theo đầu ra sau đây:
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
Tôi không biết nếu điều này sẽ làm việc tốt hơn cho bạn, nhưng tôi thấy gói này dường như làm một điều tương tự - https://github.com/cgoldberg/ystockquote/blob/master/ystockquote.py. Tôi thấy rằng nó có một hàm get_previous_close, nhưng tôi chưa thử nghiệm nó. Tôi sẽ cho nó một shot sau ngày hôm nay và cho bạn biết. –
Tôi chỉ muốn đưa ra một gợi ý ở đây. Nếu bạn đang sử dụng để kéo giá cổ phiếu nhiều lần, bạn có thể quan sát rằng yahoo_finance là không chính xác đôi khi (tôi không nói về là 15 phút chậm). Để kéo giá cổ phiếu hiện tại, tài chính google được ưa thích hơn nhiều và để lấy dữ liệu lịch sử, yahoo_finance có các tính năng tốt hơn. Hy vọng rằng sẽ giúp một ai đó. – Bhargav