2016-05-13 66 views
6

我在python中使用yahoo_finance來拉取股票數據,由於某種原因,get_prev_close()方法在每次調用時都沒有返回相同的數據。從python中的yahoo_finance關閉不正確的數據

下面是一個簡單的例子:

from yahoo_finance import Share 
from time import sleep 

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

    sleep(1) 

出於某種原因,這看似隨意打印兩個不同的號碼。所以今天我得到69.369.71打印出來。但由於這是昨天收盤的數據,因此應該只有一個值。

這是已知的錯誤,有沒有解決這個問題的方法?

+0

我不知道這是否會工作對你更好,但我發現這個包似乎做了類似的事情 - https://github.com/cgoldberg/ystockquote/blob/master/ystockquote.py。我發現它也有一個get_previous_close函數,但我沒有測試它。今天晚些時候我會再試一次,讓你知道。 –

+0

我只是想在這裏提出一個建議。如果您正在反覆使用股票價格,則可以觀察到yahoo_finance有時不正確(我不是說15分鐘慢)。爲了拉動當前的股票價格,谷歌理財更受青睞,並拉動歷史數據,yahoo_finance具有更好的功能。希望能幫助別人。 – Bhargav

回答

2

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

我實際上是在開放的市場時間運行這個。但這是一個很好的結果,那些價格是兩個不同的日子,我會嘗試使用歷史。 –

+0

@TheNightman:有趣。我會在交易時間內嘗試複製那個明天。我剛剛對股票的橫截面進行了掃描,結果發現有不少實例報告的實時數據集中的「上一次收盤」與歷史數據中報告的數據沒有重疊。例如。 [實時數據](http://finance.yahoo.com/q?s=DNB)目前陳述DNB的前一次收盤價爲119.76,而[歷史數據](http://finance.yahoo.com/q/hp?s = DNB +歷史+價格)給出了正確的值120.43。我肯定會在這裏與歷史數據。 – Noyer282

+0

@TheNightman。事實上,這個問題並不是真的與新市場開放後數據庫中的價值變化有關。在我編輯的答案中看到結果 – Noyer282

4

此問題與yahoo_finance python庫沒有任何關係。許多用戶觀察到雅虎財務的結果不一致。你可以在這裏找到投訴forums.developer.yahoo和這裏different result。 我今天運行了幾個查詢,也得到了不同的結果。 也許你最好找到財務數據的另一個來源。

+0

您鏈接的頁面是3年前上次編輯的,因此現在可能無關緊要,您今天運行的哪些查詢失敗了? –

+0

@PadraicCunningham我跑的查詢'選擇yahoo.finance.quotes其中(「XLV」)'符號和結果是不一致* – algor

+0

你從哪兒yahoo.finance.quotes運行'選擇*凡在符號(「XLV」) '?當您訪問雅虎財務網頁或僅通過api時,數據是否也不正確? –