2. 市场微结构基础
订单流分析的一切结论,最终都要落到一个具体的交易对象上——订单簿。如果不理解订单簿如何组织、限价单与市价单如何相互作用、价差与流动性如何形成,那么后面看到的“买卖不平衡”“价格压力”就只是没有物理意义的数字。本节先把这块地基打牢,并给出可以直接用于观察和计算的参数口径。
一、订单簿:两个方向、两个价格维度
订单簿(Order Book)是某一时刻市场上所有未成交委托的集合,按方向分为买盘(Bid)与卖盘(Ask)。买盘是“愿意买”的委托,卖盘是“愿意卖”的委托。关键约定:买盘价格永远低于卖盘价格,两者之间的空隙就是价差。全文统一采用“买低卖高”的参照系,即买一价 < 卖一价,不做方向翻转。
订单簿有两个价格维度需要区分清楚:
- 最优价(Best Price):买一价(Best Bid)是当前最高的买价,卖一价(Best Ask)是当前最低的卖价。这两个价格构成“盘口”。
- 深度价(Depth Price):买二、买三……卖二、卖三……越往外价格越差。深度反映的是“如果吃掉盘口,下一档在哪里、有多少量”。
每个价位上挂着的数量称为档位量(Level Size)。订单簿的完整状态可以概括为:买盘从高到低排列的(价格,数量)序列,卖盘从低到高排列的(价格,数量)序列。实际系统中通常只保留前 N 档(如 10 档或 20 档),因为更远的档位对短期价格压力的影响迅速衰减。
二、限价单与市价单:谁提供流动性,谁消耗流动性
限价单(Limit Order)指定价格,挂在订单簿上等待成交,提供流动性。市价单(Market Order)不指定价格,立即以对手方最优价成交,消耗流动性。这是理解订单流不平衡的核心二分法。
举例说明:假设某标的盘口为买一 100.00(挂 500 手)、卖一 100.02(挂 300 手)。此时来了一笔 400 手的市价买单,它会先吃掉卖一 300 手,剩余 100 手继续向上吃卖二(假设卖二 100.03 挂 200 手),成交后卖一变为 100.03、挂 100 手。这个过程叫“扫单(Sweep)”,它直接推动了价格上涨,是价格压力的直接来源。
反过来,如果来的是限价买单挂在 100.01,它不会立即成交,而是进入买盘,使买一变为 100.01(挂若干手),价差从 0.02 收窄到 0.01。限价单改变的是“未来可能成交的意愿分布”,市价单改变的是“已经发生的成交”。订单流不平衡指标本质上是在统计这两类行为的净方向。
三、买卖价差与流动性:成本与容量的两面
买卖价差(Bid-Ask Spread) = 卖一价 − 买一价。它是最直接的交易成本度量:市价单穿越价差才能成交,价差越宽,往返成本越高。价差通常用绝对值和相对值两种口径:
- 绝对价差:如 0.02 元;
- 相对价差:绝对价差 ÷ 中间价((买一+卖一)/2),如 0.02 ÷ 100.01 ≈ 2 个基点(bp)。
流动性(Liquidity)不是单一数字,至少包含三个可观察维度:
- 紧度(Tightness):价差有多窄,越窄越“紧”;
- 深度(Depth):盘口各档挂单量有多大,越厚越能承接大单;
- 弹性(Resiliency):被大单冲击后,订单簿多快恢复。这一维需要看时间序列,单帧快照看不出来。
一个常见的误判是“价差窄就等于流动性好”。实际上价差窄但盘口只有几十手,一笔中等市价单就能把价格打穿好几档,这种“薄盘口”在压力测试中会迅速暴露。因此评估流动性要同时看价差和深度,必要时用“冲击成本”来量化:给定一笔市价单,计算其成交均价与下单前中间价的偏离,偏离越大说明流动性越差。
四、把结构关系画清楚
下图把订单簿的买卖两侧、限价单与市价单的作用方向、价差与深度的位置关系整合在一张结构图中,便于对照理解:
五、从结构到可计算字段
把上述概念落到数据字段,是后续构建价格压力特征的前提。以逐笔委托与逐笔成交数据为例,至少需要以下字段:
| 字段 | 含义 | 用途 |
|---|---|---|
| bid_px_1 / ask_px_1 | 买一价 / 卖一价 | 计算价差、中间价 |
| bid_sz_1 / ask_sz_1 | 买一量 / 卖一量 | 盘口不平衡 |
| bid_px_i / ask_px_i(i=1..N) | 第 i 档价格 | 深度与冲击成本 |
| trade_px / trade_sz | 成交价 / 成交量 | 主动买卖判定 |
| side | 主动方向(买/卖) | 订单流不平衡 |
一个可直接使用的中间价与相对价差计算口径如下(示例参数,非实测):
mid = (bid_px_1 + ask_px_1) / 2
spread_abs = ask_px_1 - bid_px_1
spread_bp = spread_abs / mid * 10000
# 盘口不平衡(示例:仅用一档)
obi_1 = (bid_sz_1 - ask_sz_1) / (bid_sz_1 + ask_sz_1)
# 冲击成本示例:400 手市价买,吃卖一300手@100.02、卖二100手@100.03
avg_px = (300*100.02 + 100*100.03) / 400 # = 100.0225
impact_bp = (avg_px - mid) / mid * 10000
以图中盘口为例,mid = 100.01,spread_bp ≈ 2.0 bp,obi_1 = (500−300)/(500+300) = 0.25,说明买盘一档偏厚,短期存在向上支撑的倾向;而 400 手市价买的冲击成本约为 (100.0225−100.01)/100.01×10000 ≈ 1.25 bp,这个数字同时受价差和深度影响,比单看价差更能反映真实交易代价。
六、本节要点回顾
订单簿是买盘与卖盘按价格排列的未成交委托集合,买一与卖一构成盘口,其差为价差;限价单提供流动性、市价单消耗流动性并直接推动价格;流动性需同时看紧度、深度与弹性三个维度。把这些结构转成 bid/ask 价格与数量、成交方向等字段后,才能进一步计算盘口不平衡、订单流不平衡与冲击成本,为价格压力特征提供有物理意义的输入。