python股票价格实时数据馈送(脚本调试)

Posted

技术标签:

【中文标题】python股票价格实时数据馈送(脚本调试)【英文标题】:python stock price real time data feed (script debug) 【发布时间】:2016-02-24 19:30:05 【问题描述】:

我刚刚开始学习编码,如果这个问题是微不足道的,我想提前道歉。

我一直在尝试找到一种将股市数据实时输入 python 的方法,并偶然发现了这个博客 http://www.quantatrisk.com/2015/05/07/hacking-google-finance-in-pre-market-trading-python/

下面是我复制粘贴的脚本。

import urllib2  # works fine with Python 2.7.9 (not 3.4.+)
import json
import time

def fetchPreMarket(symbol, exchange):
    link = "http://finance.google.com/finance/info?client=ig&q="
    url = link+"%s:%s" % (exchange, symbol)
    u = urllib2.urlopen(url)
    content = u.read()
    data = json.loads(content[3:])
    info = data[0]
    t = str(info["elt"])    # time stamp
    l = float(info["l"])    # close price (previous trading day)
    p = float(info["el"])   # stock price in pre-market (after-hours)
    return (t,l,p)


p0 = 0
while True:
    t, l, p = fetchPreMarket("AAPL","NASDAQ")
    if(p!=p0):
        p0 = p
        print("%s\t%.2f\t%.2f\t%+.2f\t%+.2f%%" % (t, l, p, p-l,
                                                 (p/l-1)*100.))
    time.sleep(60)

这似乎是一个很棒的代码,但当我运行它时,我收到以下错误消息

---------------------------------------------------------------------------
KeyError                                  Traceback (most recent call last)
<ipython-input-11-012ec6dc7b0c> in <module>()
     18 p0 = 0
     19 while True:
---> 20     t, l, p = fetchPreMarket("AAPL","NASDAQ")
     21     if(p!=p0):
     22         p0 = p

<ipython-input-11-012ec6dc7b0c> in fetchPreMarket(symbol, exchange)
     10     data = json.loads(content[3:])
     11     info = data[0]
---> 12     t = str(info["elt"])    # time stamp
     13     l = float(info["l"])    # close price (previous trading day)
     14     p = float(info["el"])   # stock price in pre-market (after-hours)

KeyError: 'elt'

我尝试修改 fetchPreMarket,使其仅输出 info = data[0],但是当我尝试“打印信息”时,没有任何结果。

提前致谢

【问题讨论】:

打印data。它看起来像什么? 如果我在函数中抑制 t,l,p 并执行 data = fetchPreMarket("AAPL","NASDAQ") print(data) time.sleep(60) ,那么我得到 [u'c': u'+0.95', u'ccol': u'chg', u'e': u'NASDAQ', u'ltt': u'2:40PM EST', u'cp_fix': u'1.00', u'c_fix': u'0.95', u'l': u'95.64', u's': u'0', u'lt': u'Feb 24, 2:40PM EST', u'pcls_fix': u'94.69', u't': u'AAPL', u'lt_dts': u'2016-02-24T14:40:36Z', u'l_fix': u'95.64', u'cp': u'1.00', u'id': u'22144', u'l_cur': u'95.64'] @stratofortress Edit 你的问题,而不是在评论中发布一堆代码和数据。 @EdCottrell 我很抱歉 【参考方案1】:

所以... Google 财经 API has been discontinued。我很惊讶链接有效,但数据中没有"etl"(或"el")键。

因此,您将在info["elt"] 获得KeyError: 'elt'

供参考,


"id": "22144"
,"t" : "AAPL"
,"e" : "NASDAQ"
,"l" : "95.52"
,"l_fix" : "95.52"
,"l_cur" : "95.52"
,"s": "0"
,"ltt":"2:34PM EST"
,"lt" : "Feb 24, 2:34PM EST"
,"lt_dts" : "2016-02-24T14:34:54Z"
,"c" : "+0.83"
,"c_fix" : "0.83"
,"cp" : "0.88"
,"cp_fix" : "0.88"
,"ccol" : "chg"
,"pcls_fix" : "94.69"

使用googlefinance 或yahoo-finance python 模块可能比直接调用 API 地址更好。

值得注意的是,Yahoo API 不是“实时的”。这是大约 15 分钟的延迟报价。

【讨论】:

看起来l_cur是当前价格,pcls_fix是前收盘价,lt_dts是日期时间戳 @stratofortress - 你可以使用"lt" 代替"etl""pcls_fix" 代替"el"。这些似乎与博客提取的数字相同 @cricket_007 将"elt" 更改为"lt""el""pcls_fix" 更改为"pcls_fix" 有效。

以上是关于python股票价格实时数据馈送(脚本调试)的主要内容,如果未能解决你的问题,请参考以下文章

Python做一个“盯盘机器人”,实时监控股票价格并通知你!

python 脚本从股票价格创建音符

用 Python 做 "盯盘机器人",股票价格实时监控并邮件通知你!

谁知道现在啥软件能提供比较稳定的股票实时行情数据,像数畅,网际风等,想找一个稳定的价格无所谓

使用 JSP 提取实时股票价格

AnyChart - 实时流媒体股票图表