2016-05-13 10 views
6

私はyahoo_financeをpythonで使用して在庫データを取得していますが、何らかの理由でget_prev_close()メソッドが呼び出しごとに同じデータを返していません。これは一見ランダムに二つの異なる数字が印刷されますいくつかの理由Pythonのyahoo_financeからのcloseデータが正しくありません

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が印刷されています。しかし、これは昨日の近いデータなので、ただ1つの値しかないはずです。

これは既知のバグで、これには方法がありますか?

+0

これが機能するかどうか私は知りませんあなたにはそれなりの利点がありますが、このパッケージはhttps://github.com/cgoldberg/ystockquote/blob/master/ystockquote.pyと似ているようです。私はそれもget_previous_close関数を持っていることがわかりますが、私はそれをテストしていません。私は今日後でそれを打ち明けて、あなたに知らせるでしょう。 –

+0

私はちょうどここに提案を与えたかった。株価を繰り返し引っ張っていると、yahoo_financeが時々間違っていることがわかります(私は15分遅いと言っているわけではありません)。現在の株価を引き上げるには、Googleファイナンスの方がはるかに好ましく、過去のデータを引き出すには、yahoo_financeの方が優れています。誰かを助けることを願っています。 – Bhargav

答えて

2

yahoo_financeパッケージが使用するリアルタイムのYQLデータは古くなっているようです。 5月11日には69.71が締め切りです。正しい値は69.3です。

簡単な解決策は、また

>>> from yahoo_finance import Share 
>>> stock = Share('XLV') 
>>> data, = stock.get_historical('2016-05-12','2016-05-12') 
>>> data['Close'] 
69.300003 

と同じパッケージの履歴データテーブルにアクセスするヤフー/金融Webサイトから直接近いデータをつかむのいずれかにあります。あなたの状況を再現しようとすると、あなたが報告する値のちらつきは得られませんが、5月23日ではなく5月20日の終わりに近いです。たぶん、あなたが見ているちらつきは、時にはYQLが古いデータを持つサーバーに行くことがあります。 yahoo_finance(a)の履歴データ、yahoo_finance(b)のリアルタイムデータ、yahoo-financeリアルタイムの見積もり(c)、yahoo-finance履歴データから直近のコードを取得するコードです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から近い()は、一貫して古いです:

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

私は実際に営業時間外にこれを実行していました。しかし、それは価格が2つの異なる日であることを私は歴史的なものを使って試してみることが良いキャッチです。 –

+0

@ TheNightman:興味深い。明日は取引時間中にそれを再現しようとします。私は株式の断面をスキャンしただけで、リアルタイムデータセットで報告された「前回の終了」が履歴データで報告されたものと重複しないケースがかなりあることが判明しました。例えば。 [リアルタイムデータ](http://finance.yahoo.com/q?s=DNB)では、DNBの前回締め切りは119.76となっていますが、[historical data](http://finance.yahoo.com/q/hp?s = DNB + Historical + Prices)は、120.43という正しい値を示します。私は間違いなくここで歴史的なデータに行きます。 – Noyer282

+0

@ TheNightman。確かに、この問題は、新しい市場開拓後のデータベースの価値の変化と実際には関係していません。私の編集した答えの結果を参照してください – Noyer282

4

この問題は、yahoo_finance pythonライブラリでは何もありません。 Yahoo Financeからの一貫性のない結果が多くのユーザーによって観察されています。あなたはここでforums.developer.yahooとここにdifferent resultの苦情を見つけることができます。 私は今日いくつかのクエリを実行し、異なる結果も得ました。 おそらく、財務データの別の情報源を見つけることをお勧めします。

+0

あなたがリンクしたページは3年以上前に最後に編集されたので、今は関係ないかもしれませんが、今日実行したクエリは失敗しましたか? –

+0

@PadraicCunningham私は質問を実行しました 'select * from yahoo.finance.quotesどこのシンボル(" XLV ")と結果が一貫していません – algor

+0

ここであなたは' select * from yahoo.finance.quotes where symbol in( "XLV") '?ヤフーファイナンスのウェブページにアクセスしたとき、またはAPI経由でデータが間違っていますか? –

関連する問題