2016-05-13 12 views
6

Tôi đang sử dụng yahoo_finance trong python để lấy dữ liệu cổ phiếu và vì một lý do nào đó, phương thức get_prev_close() không trả về cùng dữ liệu với mọi cuộc gọi.Dữ liệu đóng không đúng từ yahoo_finance trong python

Dưới đây là một ví dụ đơn giản:

from yahoo_finance import Share 
from time import sleep 

while True: 
    stock = Share('XLV') 
    prevClose = float(stock.get_prev_close()) 
    print prevClose 

    sleep(1) 

Đối với một số lý do này sẽ in hai số khác nhau dường như một cách ngẫu nhiên. Vì vậy, hôm nay tôi nhận được 69.369.71 được in ra. Nhưng vì đây là dữ liệu đóng của các ngày hôm qua, nên chỉ có một giá trị duy nhất.

Đây có phải là lỗi đã biết và có cách nào đó không?

+0

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. –

+0

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

Trả lời

2

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 
+0

Tôi đã thực sự chạy điều này trong giờ mở cửa thị trường. Nhưng đó là một điều tốt mà những người giá cả là hai ngày khác nhau, tôi sẽ cố gắng sử dụng lịch sử. –

+0

@TheNightman: Thú vị.Tôi sẽ cố gắng nhân rộng vào ngày mai trong giờ giao dịch. Tôi chỉ quét phần thập giá của cổ phiếu và hóa ra có một số ít trường hợp 'đóng trước' như được báo cáo trong tập dữ liệu thời gian thực không trùng lặp với dữ liệu được báo cáo trong dữ liệu lịch sử. Ví dụ. [dữ liệu thời gian thực] (http://finance.yahoo.com/q?s=DNB) hiện ghi rõ mức đóng trước của DNB là 119,76 trong khi [dữ liệu lịch sử] (http://finance.yahoo.com/q/hp? s = DNB + Lịch sử + Giá) cho giá trị chính xác là 120,43. Tôi chắc chắn sẽ đi với các dữ liệu lịch sử ở đây. – Noyer282

+0

@TheNightman. Thực tế vấn đề không thực sự liên quan đến sự thay đổi giá trị trong cơ sở dữ liệu sau khi mở cửa thị trường mới. Xem kết quả trong câu trả lời đã chỉnh sửa của tôi – Noyer282

4

Sự cố này không có gì với thư viện python yahoo_finance. Kết quả không nhất quán từ Yahoo Finance đã được nhiều người dùng quan sát. Bạn có thể tìm thấy khiếu nại tại đây forums.developer.yahoo và tại đây different result. Tôi đã chạy vài truy vấn ngay hôm nay và cũng nhận được các kết quả khác nhau. Có lẽ bạn nên tìm một nguồn khác cho dữ liệu tài chính.

+0

Trang bạn đã liên kết đến được chỉnh sửa lần cuối hơn 3 năm trước vì vậy có thể không có liên quan ngay bây giờ, bạn đã chạy truy vấn nào hôm nay không thành công? –

+0

@PadraicCunningham Tôi chạy truy vấn 'select * từ yahoo.finance.quotes nơi biểu tượng trong (" XLV ")' và kết quả không phù hợp – algor

+0

Bạn đang chạy 'select * từ yahoo.finance.quotes nơi biểu tượng trong (" XLV ") '? Dữ liệu cũng không chính xác khi bạn truy cập trang web tài chính yahoo hay chỉ thông qua api? –

Các vấn đề liên quan