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数据源选择逻辑。你照着这个思路走,基本不会跑偏。

Level2行情数据源选择逻辑 你的需求是什么? 机构/私募 交易所授权(最贵最稳) 万得/聚宽(省心但花钱) 个人/小团队 券商API(性价比之选) Tushare(个人开发者首选) 数据获取方式 WebSocket实时流(推荐) HTTP轮询(不推荐实时)

2.6 我的最终建议

如果你问我怎么选,我的答案是:

  • 个人做研究:用Tushare或券商API,成本低,够用。
  • 做实盘交易:券商API + WebSocket,延迟可控。
  • 机构级别:交易所授权 + 万得,别省钱。

嗯,数据源这块就讲这么多。记住一句话:数据质量决定策略上限。别在数据上省钱,否则策略跑出来你都不敢信。

最后提醒:不管用哪个数据源,一定要做数据校验。我见过太多人因为数据问题,策略回测漂亮,实盘一塌糊涂。

专注资料整理