3、行情数据源接入实战(上):Level-1与Level-2行情区别、WebSocket实时行情接入(以聚宽为例)、行情数据字段解析
3.1 为什么做市商必须搞懂行情数据源?
做可转债做市,说白了就是跟行情赛跑。
你比别人快0.1秒看到价格变化,就可能多赚几个tick。我刚开始做量化交易时,一直用免费行情,结果回测跑得挺漂亮,实盘一上去就亏钱。后来才发现,问题出在行情数据源上——免费数据延迟高、字段少,根本不够用。
所以这一章,咱们重点聊聊行情数据源接入。我会以聚宽为例,带你走一遍WebSocket实时行情的接入流程。同时把Level-1和Level-2的区别讲清楚,再拆解一下行情数据里那些关键字段到底是什么意思。
核心观点:做市策略的命根子是行情数据。数据源选不对,策略再牛也白搭。
3.2 Level-1 vs Level-2:到底差在哪?
很多新手会问:Level-1和Level-2行情,不都是看价格吗?
嗯,还真不是一回事。我简单给你拆解一下。
| 对比维度 | Level-1 行情 | Level-2 行情 |
|---|---|---|
| 数据频率 | 约3秒快照一次 | 逐笔推送,毫秒级 |
| 盘口深度 | 5档买卖盘口 | 10档(甚至更多) |
| 逐笔成交 | 无 | 有,能看到每笔成交明细 |
| 委托队列 | 无 | 有,能看到前50笔委托 |
| 费用 | 免费或低价 | 按年付费,几千到几万不等 |
| 适用场景 | 长线投资、日频策略 | 高频做市、T+0套利 |
你看,Level-2行情比Level-1多了不少东西。尤其是逐笔成交和委托队列,对做市商来说太重要了。
我个人习惯是:做回测和策略研究时用Level-1就够了,但实盘做市必须上Level-2。为什么?因为做市拼的是微观结构,你看到的是3秒前的快照,对手方看到的是毫秒级的逐笔数据,那你还怎么玩?
避坑指南:我曾经在回测时用Level-1数据,实盘用Level-2,结果发现策略在回测里年化30%,实盘只有5%。后来排查发现,Level-1的3秒延迟让策略信号滞后了太多。所以,回测和实盘的数据源最好保持一致。
3.3 WebSocket实时行情接入(以聚宽为例)
好了,理论说完了,咱们直接上代码。
聚宽(JoinQuant)是国内比较成熟的量化平台,它提供了WebSocket接口来获取实时行情。WebSocket的好处是:建立一次连接,后续数据主动推送过来,不用反复轮询。
3.3.1 准备工作
首先,你得有个聚宽账号,然后在个人中心拿到API密钥。这个密钥相当于你的身份证,别泄露出去。
# 安装聚宽SDK
pip install jqdatasdk
# 导入并登录
import jqdatasdk as jq
jq.auth('你的账号', '你的密码')
3.3.2 WebSocket连接示例
聚宽的WebSocket接口封装得比较友好。下面这个例子,我用来订阅可转债的实时行情。
from jqdatasdk import *
import time
# 登录
auth('your_account', 'your_password')
# 订阅可转债行情
# 注意:聚宽的可转债代码格式为 '110044.XSHG' 或 '123456.XSHE'
bonds = ['110044.XSHG', '123456.XSHE']
# 获取实时行情(WebSocket方式)
def on_data(data):
"""回调函数,每次推送数据时触发"""
print(f"收到行情: {data}")
# 启动实时行情订阅
get_price(bonds, count=1, end_date='2024-01-01', frequency='minute',
fields=['open', 'close', 'high', 'low', 'volume', 'money'],
skip_paused=True, fq='pre', panel=True)
嗯,这里要注意:聚宽的WebSocket接口在SDK里封装成了get_price,但底层其实是WebSocket推送。你只要设置好回调函数,数据就会源源不断地过来。
警告:WebSocket连接是长连接,如果网络不稳定,可能会断连。我建议你在代码里加上重连机制,比如每5秒检查一次连接状态,断了就自动重连。
3.3.3 实战中的坑
我记得有一次,我写了一个做市策略,跑在聚宽的WebSocket上。刚开始一切正常,但运行了半小时后,行情突然停了。排查了半天,发现是聚宽对免费用户的WebSocket连接数有限制——最多同时订阅50只标的。
所以,如果你要订阅大量可转债,建议升级到付费版,或者自己搭建一个数据中台,把行情数据缓存到本地数据库。
3.4 行情数据字段解析
拿到行情数据后,你得知道每个字段是什么意思。不然一堆数字摆在你面前,你也不知道该用哪个。
3.4.1 核心字段一览
| 字段名 | 含义 | 做市中的用途 |
|---|---|---|
| open | 开盘价 | 判断当日跳空缺口 |
| close | 收盘价 | 计算日内涨跌幅 |
| high | 最高价 | 设置止损/止盈参考 |
| low | 最低价 | 判断支撑位 |
| volume | 成交量(手) | 衡量流动性 |
| money | 成交额(元) | 计算资金流向 |
| bid1~bid5 | 买一到买五价格 | 判断买方力量 |
| ask1~ask5 | 卖一到卖五价格 | 判断卖方力量 |
| bid_vol1~bid_vol5 | 买一到买五挂单量 | 计算买卖压力 |
| ask_vol1~ask_vol5 | 卖一到卖五挂单量 | 计算买卖压力 |
3.4.2 做市中最重要的两个字段
我个人觉得,做市商最该盯的两个字段是:买卖盘口价差和成交量。
- 买卖盘口价差:就是卖一价减去买一价。价差越小,说明流动性越好,做市商越容易赚钱。我一般设定一个阈值,比如价差超过0.5元就暂停做市,等市场恢复平静再说。
- 成交量:成交量突然放大,往往意味着有大资金进场或离场。这时候做市商要小心,别被大单吃掉。
实战技巧:我曾经用Level-2的逐笔成交数据,发现某只可转债在3秒内连续成交了1000手,但价格没怎么动。这说明有大户在偷偷吸筹。我立刻调整了做市策略,把买卖价差收窄,结果当天多赚了2个tick。
3.5 本章知识体系图
下面这张图,帮你把本章的核心逻辑串起来。从数据源选择到字段解析,再到实战接入,每一步都环环相扣。
3.6 本章小结
这一章我们聊了三个核心问题:
- Level-1 vs Level-2:Level-2多了逐笔成交和委托队列,做市商必须用Level-2。
- WebSocket接入:以聚宽为例,代码很简单,但要注意连接稳定性和订阅数量限制。
- 字段解析:买卖盘口价差和成交量是做市商最该盯的两个指标。
说实话,行情数据接入是量化交易里最基础但也最容易踩坑的环节。我见过太多人花大把时间优化策略,结果数据源没选对,全白干了。所以,这一章的内容虽然基础,但值得你反复琢磨。
个人建议:如果你刚开始做可转债做市,可以先从Level-1行情入手,把策略逻辑跑通。等实盘验证没问题了,再升级到Level-2。别一上来就追求最贵的数据源,性价比也很重要。