
实时股票行情API到底怎么选?散户也能看懂的避坑指南
做量化交易或者写策略程序,第一步不是写代码,是找数据。实时股票行情API就是你的数据水管,水管不通、水流太慢、水质太差,后面的一切都是白搭。很多人一上来就盯着“免费”两个字,结果策略跑起来才发现行情延迟三秒,滑点吃掉大半利润。今天咱们把这事掰开揉碎聊清楚。
行情API的三种类型,你该用哪种?
市面上的实时股票行情API大致分三类。第一类是券商提供的交易接口附带行情推送,这类接口通常只对开户客户开放,优点是数据源权威、和交易通道绑定紧密,缺点是接入流程繁琐,而且不同券商的接口协议五花八门。第二类是第三方数据服务商提供的HTTP或WebSocket接口,典型代表有聚宽、米筐、Tushare Pro、万得等,它们把交易所数据清洗后重新分发,接入简单,文档友好,适合个人和中小团队。第三类是交易所直连行情,门槛极高,需要申请席位或通过特定授权,一般只有机构才玩得转。

散户和独立开发者最现实的选择是第二类。但这里有个关键分水岭:免费接口和付费接口的差距不在“有没有数据”,而在“数据什么时候到” 。免费接口通常有15分钟到几秒不等的延迟,对于日内高频策略来说等于废数据。付费接口能提供Level-2逐笔成交甚至毫秒级快照,价格从每月几十块到几千块不等。
延迟和稳定性,API选型的两个硬指标
买行情API跟买网络宽带一个道理,标称100兆和实际下载速度是两回事。看API供应商的指标,重点盯三个数:推送延迟、更新频率、可用性SLA。推送延迟指数据从交易所产生到你的程序收到的时间差,普通付费API能做到几百毫秒以内,好的能做到50毫秒以下。更新频率指每秒推送多少次快照,3秒一笔和500毫秒一笔完全是两个世界。可用性SLA写的是99.9%还是99.99%,别看差一个9,一年下来停机时间差出好几个小时,策略跑实盘的时候正好赶上断线,哭都来不及。
还有一个隐藏坑:流量限制。有些API宣传“免费无限调用”,仔细看文档才发现每分钟限200次请求,全市场五千多只股票轮询一遍要半小时,这种接口只能拿来做收盘后的复盘,做不了实时监控。选之前一定问清楚并发连接数和请求频率上限。
自己搭行情源,值不值?
有人想省钱,自己去交易所买行情授权然后搭服务器分发。算笔账:交易所行情授权费每年几万到几十万不等,加上服务器、带宽、运维人力,一年下来没有十几万打不住。除非你是资管机构或者有几十个客户分摊成本,否则个人开发者完全没必要走这条路。云服务商提供的行情API按需付费,每个月几百块就能拿到稳定的Level-1数据,性价比高得多。
期货行情API的逻辑和股票不一样
做期货的人经常问股票API能不能直接拿来用,答案是两套体系。期货行情的主战场是CTP接口,这是上期技术开发的柜台系统标准,几乎所有期货公司都支持。CTP行情接口是C++写的,通过回调函数推送数据,延迟极低,而且免费——只要你开了期货账户就能拿到授权。但CTP的坑在于文档晦涩、回调机制对新手不友好,而且不同期货公司的CTP版本和前置地址还不一样。市面上有Python封装的CTP库,比如vnpy、ctpbee,把底层复杂度包了一层,让写策略的人不用啃C++代码。
股票和期货的行情API还有一个本质区别:股票是快照模式,期货是推送模式。股票API你请求一次返回当前行情切片,需要自己控制轮询节奏;期货CTP是服务器主动推给你,来一笔推一笔。做跨品种策略的人得把两套数据流对齐时间戳,这个工程量不小。
程序交易场景下的API接入示例
用Python接入第三方行情API通常就是WebSocket长连接的事。下面这段代码演示了订阅实时股票行情的基本逻辑,实际使用时要替换成你选的API供应商的地址和鉴权token。
import websocket
import json
def on_message(ws, message):
data = json.loads(message)
if data.get('type') == 'quote':
symbol = data['symbol']
price = data['last_price']
volume = data['volume']
print(f"{symbol} 最新价 {price} 成交量 {volume}")
def on_open(ws):
subscribe_msg = {
"action": "subscribe",
"symbols": ["600519.SH", "000001.SZ"],
"fields": ["last_price", "volume", "bid", "ask"]
}
ws.send(json.dumps(subscribe_msg))
ws = websocket.WebSocketApp(
"wss://api.example.com/quote",
on_message=on_message,
on_open=on_open
)
ws.run_forever()
这段代码的核心是订阅消息的构造和行情回调的处理。真实策略里还要加上心跳保活、断线重连、数据去重这些脏活累活。行情API的稳定性一半靠供应商,一半靠你自己的容错代码,别指望供应商永远不掉线。
选API之前先想清楚你的策略吃哪种数据
趋势跟踪策略对延迟不敏感,几秒的延迟完全能接受,免费接口加定时轮询就够用。套利策略和做市策略对盘口变化极其敏感,必须上付费低延迟接口,而且最好有备份数据源。事件驱动策略关注的是公告和新闻的推送速度,行情API的延迟反而次要。先把策略的数据需求列清楚,再去看API的参数表,别被供应商宣传页上的“毫秒级”三个字冲昏头。
最后提醒一句:任何行情API都有出故障的概率,实盘跑之前至少并行跑两周模拟盘,对比你收到的数据和行情软件上的数据是否一致。数据错一天,策略亏一年。