2016-05-13 64 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时,数据是否也不正确? –