2、基础数据准备:行情数据获取与订单簿结构
做量化交易,数据就是你的弹药库。弹药不行,再好的策略也白搭。
这一节,我们来聊聊最基础的东西——行情数据怎么拿、订单簿长什么样、成交量和成交额到底有啥区别。嗯,这些看似简单,但我在项目里见过太多人在这上面栽跟头了。
2.1 行情数据的三种粒度:Tick / 分钟 / 日线
我个人习惯把行情数据分成三个层级:Tick级、分钟级、日线级。每个层级干的事不一样,存储和处理的成本也天差地别。
Tick级数据(逐笔成交)
说白了,就是每一笔真实成交的记录。交易所每撮合一次,就产生一条Tick。在A股市场,Tick数据通常包含:
- 成交时间(精确到毫秒甚至微秒)
- 成交价格
- 成交数量(手)
- 成交金额
- 买卖方向(主动买还是主动卖)
我曾经帮一家私募搭建高频回测系统,他们拿到的Tick数据一天就有好几个GB。你想想看,光是存储和清洗就够喝一壶的。所以我的建议是:不是做高频策略,别轻易碰Tick数据。
分钟级数据
这是最常用的数据粒度。1分钟、5分钟、15分钟、30分钟、60分钟,各有各的用处。
一条标准的分钟K线包含:
- 开盘价、最高价、最低价、收盘价(OHLC)
- 成交量
- 成交额
- 开始时间、结束时间
我个人做流动性预判时,最喜欢用1分钟和5分钟的数据。为什么?因为太粗的粒度(比如日线)会丢失盘中细节,太细的粒度(比如Tick)又太吵。1分钟刚好能捕捉到订单簿的微观变化,又不会引入太多噪声。
日线数据
日线是大家最熟悉的。但我要提醒一点:日线数据做流动性分析,基本只能看个大概。
举个例子,某只股票今天成交了10亿,日线告诉你「量很大」。但到底是开盘那10分钟砸出来的,还是尾盘慢慢堆起来的?日线完全看不出来。所以,日线更适合做趋势判断,而不是流动性预判。
| 数据粒度 | 典型大小(单只股票/天) | 适合场景 | 不适合场景 |
|---|---|---|---|
| Tick | 几百MB ~ 几GB | 高频策略、订单簿重建 | 长周期回测、存储受限 |
| 1分钟 | 几MB ~ 几十MB | 流动性预判、日内策略 | 超高频交易 |
| 日线 | 几KB | 趋势分析、选股 | 日内流动性分析 |
2.2 订单簿数据结构
订单簿(Order Book),就是交易所用来记录所有未成交买单和卖单的「大账本」。做流动性预判,订单簿是绕不开的核心数据。
一个标准的订单簿包含两部分:
- 买盘(Bid):按价格从高到低排列,显示谁愿意出多少钱买
- 卖盘(Ask):按价格从低到高排列,显示谁愿意以多少钱卖
每条挂单记录通常包含:
- 价格
- 数量(手)
- 委托单编号(可选)
- 时间戳
我记得有一次做回测,发现策略在模拟环境里跑得风生水起,一上实盘就亏成狗。后来排查了半天,问题出在订单簿的「快照」和「增量」上。很多数据商提供的订单簿是快照模式——每隔几毫秒给你拍一张照片。但如果你用快照做回测,会漏掉中间发生的撤单和改单,导致流动性被高估。
collections.OrderedDict来维护一个本地的订单簿副本,每来一条增量就更新一次。
2.3 成交量 vs 成交额
这个问题,我面试量化研究员时几乎必问。很多人张口就来:「成交量就是成交的股数,成交额就是成交的金额。」对,但不够。
两者的核心区别在于:
- 成交量:反映的是「活跃度」——有多少人在交易
- 成交额:反映的是「资金量」——有多少钱在流动
举个例子:
- 股票A,价格10元,成交了100万股 → 成交量100万股,成交额1000万元
- 股票B,价格100元,成交了10万股 → 成交量10万股,成交额1000万元
你看,成交额一样,但成交量差了10倍。如果你只看成交量,会觉得股票A更活跃。但如果你关心的是资金进出规模,成交额才是更靠谱的指标。
在流动性预判中,我通常两个指标一起看:
- 用成交量判断市场的「拥挤度」——是不是很多人挤进来交易
- 用成交额判断市场的「深度」——大资金能不能顺利进出
成交额 = 成交量 × 成交均价
但要注意,这里的「成交均价」不是简单的(最高+最低)/2,而是成交量加权平均价(VWAP)。我习惯用逐笔成交数据来计算VWAP,精度更高。
2.4 知识体系总览
下面这张图,是我自己整理的基础数据准备知识框架。你可以把它当成一个「地图」,后面讲到具体指标时,随时回来对照。
这张图从数据来源开始,一路向下到具体的指标和应用。你会发现,数据粒度越细,能提取的流动性信息就越丰富,但代价是存储和计算成本也越高。怎么取舍?我的建议是:先想清楚你要解决什么问题,再选数据粒度。别一上来就上Tick,也别为了省事只用日线。
公众号:蓝海资料掘金营,微信deep3321