python 股价实时数据馈送(脚本调试)
python stock price real time data feed (script debug)
我刚刚开始学习编码,如果这个问题很琐碎,我想提前道歉。
我一直在努力寻找一种方法将股市数据实时输入 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]
,但是当我尝试 'print info' 时,没有任何结果。
提前致谢
所以... Google 财务 API has been discontinued。我很惊讶 link 有效,但数据中没有 "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 or yahoo-finance python 模块可能比直接调用 API 地址更好。
值得注意的是 Yahoo API 不是 "realtime"。这是大约 15 分钟的延迟报价。
我刚刚开始学习编码,如果这个问题很琐碎,我想提前道歉。
我一直在努力寻找一种方法将股市数据实时输入 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]
,但是当我尝试 'print info' 时,没有任何结果。
提前致谢
所以... Google 财务 API has been discontinued。我很惊讶 link 有效,但数据中没有 "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 or yahoo-finance python 模块可能比直接调用 API 地址更好。
值得注意的是 Yahoo API 不是 "realtime"。这是大约 15 分钟的延迟报价。