2、Level2行情数据源与获取方式
做量化交易,第一关就是数据。没有数据,策略就是空中楼阁。
Level2行情的数据源,说白了就四个方向:交易所授权、券商API、第三方数据服务商、以及实时流和轮询。我这些年每个都折腾过,踩过的坑能写满一个笔记本。今天咱们一个一个捋清楚。
核心观点:没有最好的数据源,只有最适合你的数据源。选错了,轻则多花钱,重则策略跑偏。
2.1 交易所授权——最正统,也最贵
上交所和深交所是Level2数据的源头。它们把数据授权给信息公司,信息公司再往下分发。
我个人习惯把这条路叫做「官方渠道」。优点是数据最全、最准、延迟最低。缺点嘛,一个字:贵。
我记得2019年帮一家私募做方案,光上交所Level2的年费就要十几万。这还不算深交所的。小团队和个人基本扛不住。
| 交易所 | 授权方式 | 年费参考 | 适合人群 |
|---|---|---|---|
| 上交所 | 通过上证信息公司 | 10-20万/年 | 机构、私募 |
| 深交所 | 通过深圳证券信息公司 | 8-15万/年 | 机构、私募 |
注意:交易所授权通常要求你具备证券经营资质。个人投资者基本拿不到一手授权。别想了。
2.2 券商API——散户的性价比之选
大部分券商都提供Level2行情API。你开个户,入金达到一定门槛,就能申请。
我建议新手先从这条路入手。为什么?因为门槛低,成本可控。很多券商只要资产达到50万,就能免费送Level2。
举个例子,华泰的xtquant、国信的iQuant、中信的QMT,都支持Level2数据获取。代码写起来也不复杂。
# 以华泰xtquant为例
from xtquant import xtdata
# 订阅个股的Level2行情
xtdata.subscribe_quote('000001.SZ', period='tick', count=100)
# 获取实时tick数据
tick_data = xtdata.get_market_data(
field_list=['lastPrice', 'volume', 'amount', 'ticker'],
stock_list=['000001.SZ'],
period='tick',
count=10
)
print(tick_data)
小技巧:券商API的实时性其实不错,延迟通常在100-300ms。做日内策略完全够用。但要注意,券商API通常有频率限制,别太贪心。
2.3 第三方数据服务商——省心但花钱
如果你不想跟券商和交易所扯皮,第三方服务商是很好的选择。
市面上主流的几家:万得(Wind)、聚宽(JoinQuant)、Tushare、RiceQuant。它们把Level2数据封装好,你直接调接口就行。
我曾在项目中用过Tushare的Level2数据。说实话,方便是真方便,但数据质量偶尔会出问题。有一次我发现某只股票的逐笔成交数据少了十几笔,排查了半天才发现是服务商那边丢包了。
| 服务商 | 数据覆盖 | 价格 | 我的评价 |
|---|---|---|---|
| 万得(Wind) | 全市场 | 3-5万/年 | 机构标配,贵但稳 |
| 聚宽(JoinQuant) | 全市场 | 按量计费 | 适合回测,实时数据一般 |
| Tushare | 全市场 | 积分制 | 个人开发者首选,性价比高 |
避坑指南:我曾经遇到过第三方服务商在盘中突然断流的情况。做实盘交易时,一定要有备用数据源。别把所有鸡蛋放在一个篮子里。
2.4 WebSocket实时流 vs HTTP轮询
这是数据获取方式的核心区别。很多新手搞不清楚,我简单说清楚。
WebSocket实时流
建立一条长连接,服务端主动推送数据给你。延迟低,效率高。
我建议做高频策略或者日内T+0的,必须用WebSocket。为什么?因为HTTP轮询的延迟会让你错过最佳买卖点。
# WebSocket订阅示例(伪代码)
import websocket
def on_message(ws, message):
# 收到实时tick数据
tick = parse_tick(message)
process_tick(tick)
ws = websocket.WebSocketApp(
"wss://level2.example.com/ws",
on_message=on_message
)
ws.run_forever()
HTTP轮询
每隔几秒发一次HTTP请求,拉取最新数据。实现简单,但延迟高,浪费带宽。
说实话,HTTP轮询只适合做盘后分析或者低频策略。做实时交易?别想了。
# HTTP轮询示例
import requests
import time
while True:
resp = requests.get('https://api.example.com/level2/tick?code=000001')
data = resp.json()
print(data)
time.sleep(3) # 每3秒轮询一次
我的建议:实时交易用WebSocket,盘后分析用HTTP。别混着用,否则你会被延迟搞疯。
2.5 知识体系总览
下面这张图,是我自己总结的Level2数据源选择逻辑。你照着这个思路走,基本不会跑偏。
2.6 我的最终建议
如果你问我怎么选,我的答案是:
- 个人做研究:用Tushare或券商API,成本低,够用。
- 做实盘交易:券商API + WebSocket,延迟可控。
- 机构级别:交易所授权 + 万得,别省钱。
嗯,数据源这块就讲这么多。记住一句话:数据质量决定策略上限。别在数据上省钱,否则策略跑出来你都不敢信。
最后提醒:不管用哪个数据源,一定要做数据校验。我见过太多人因为数据问题,策略回测漂亮,实盘一塌糊涂。