1. 课程导入与数据认知
在A股高频与量化研究中,Level-1快照(每3秒一个切片)和Level-2十档行情只能看到“结果”,却看不到“过程”。逐笔成交与逐笔委托这两张表,正是把撮合过程还原到“每一笔”粒度的原始数据。本课程要解决的核心问题只有一个:如何把同一只股票、同一时刻的成交记录与委托记录正确关联起来,从而判断一笔成交是主动买入还是主动卖出、由哪一笔委托驱动、又消耗了哪些挂单。
一、两张表分别记录什么
逐笔成交(Trade)记录的是撮合引擎每达成一次成交就产生的一条记录,核心字段通常包括:成交时间(精确到毫秒或微秒)、证券代码、成交编号、成交价格、成交数量、成交方向标识(部分交易所提供买卖方向或内外盘标志)、买方委托序号、卖方委托序号。它回答的是“发生了什么成交”。
逐笔委托(Order)记录的是每一笔进入撮合队列的委托,核心字段包括:委托时间、证券代码、委托序号(交易所唯一)、买卖方向、委托价格、委托数量、委托类型(限价/市价/本方最优等)。它回答的是“谁在什么价位挂出了多少量”。
关键点在于:成交表中的买方委托序号与卖方委托序号,正是委托表中委托序号的外键。这条“看不见的线”就是跨表关联的物理基础。没有它,两张表只是各自独立的流水;有了它,才能重建订单的生命周期。
二、交易所披露规则带来的差异
不同市场的披露粒度并不一致,这直接决定了关联策略的写法。上交所与深交所在逐笔数据上的字段命名、委托序号编码方式、是否提供成交方向、是否包含撤单记录等方面存在差异;部分行情源还会对委托序号做脱敏或重排。因此在实际工程中,第一步不是写SQL,而是核对数据字典:确认委托序号是否全局唯一、成交表是否携带对手方委托序号、时间戳精度是否一致、是否存在集合竞价阶段的特殊记录。
三、跨表关联的分析价值
把两张表按委托序号连接后,可以得到三类高价值信息:
- 主动方向判定:若一笔成交的买方委托序号对应的委托在成交前刚进入队列且价格不低于卖一,通常可判定为主动买入(外盘);反之则为主动卖出。这比依赖行情商给出的方向标志更可控。
- 订单生命周期还原:同一委托序号在委托表出现一次,在成交表可能出现多次(部分成交),差额即为未成交部分,再结合撤单记录可算出撤单量与撤单率。
- 大单拆解与行为识别:通过关联可识别“一笔大委托被拆成多笔成交”或“多笔小委托汇聚成一笔大成交”,用于刻画机构挂单、扫单、冰山单等行为。
典型应用场景包括:微观流动性度量(有效价差、价格冲击)、订单流不平衡(OFI)因子构建、大单资金流向监控、交易成本分析(TCA)以及异常交易行为排查。
四、一个可动手的最小关联示例
假设已从行情文件读入两张表,字段分别为 order_seq, side, price, qty, ts 与 trade_id, price, qty, buy_seq, sell_seq, ts。最直接的关联写法是:
-- 以成交为主表,左连接买方委托,还原主动买入方向
SELECT t.trade_id, t.price, t.qty,
o.side AS buyer_side, o.price AS buyer_price,
CASE WHEN t.price >= o.price THEN '主动买' ELSE '被动' END AS aggressor
FROM trade t
LEFT JOIN "order" o
ON t.buy_seq = o.order_seq
WHERE t.ts BETWEEN '2024-06-03 09:30:00' AND '2024-06-03 09:35:00';
执行后应重点观察三件事:一是连接命中率,若大量 buy_seq 在委托表中找不到,说明序号编码或时间范围不一致;二是同一 order_seq 在成交表中出现的次数,用于识别部分成交;三是 aggressor 的分布是否与行情商给出的内外盘比例大致吻合,作为交叉验证。