1. 课程导入与微价格定义
在订单簿交易与做市策略中,我们每天都会看到买一价、卖一价、买一量、卖一量这几个数字。最直观的“公允价”是中间价(Mid Price),即买一价与卖一价的算术平均。但如果你真的用中间价去挂单或判断方向,很快会发现一个问题:当买一量远大于卖一量时,价格往往更容易向上走,而中间价对此毫无反应。微价格(Microprice)正是为了解决这个“量不平衡”问题而提出的。
本课程以实战计算为核心,30 节内容会从定义、公式推导一路走到代码实现、参数调优与回测验证。本节作为导入,先把三个容易混淆的概念摆清楚:中间价、加权中间价、微价格,并说明它们各自在订单簿中的角色,最后给出整门课的学习路径。
三个价格概念的分工
设买一价为 P_b、卖一价为 P_a、买一量为 Q_b、卖一量为 Q_a。三个价格的定义如下:
- 中间价:
Mid = (P_b + P_a) / 2。只用到价格,完全忽略挂单量,是最“钝”的参考价。 - 加权中间价:
WAP = (P_b·Q_b + P_a·Q_a) / (Q_b + Q_a)。把量作为权重,但注意它加权的是“价格”,量大的那一侧会把价格往自己方向拉,方向感与直觉相反。 - 微价格:
Micro = (P_b·Q_a + P_a·Q_b) / (Q_b + Q_a)。关键差异在于交叉加权——买一价配卖一量、卖一价配买一量。买一量越大,微价格越靠近卖一价,即向上偏移。
这个交叉加权不是数学游戏。它的经济含义是:买一量代表买方在该价位的“承接意愿”,意愿越强,价格越可能被推高。因此微价格可以看作“考虑量不平衡后的即时公允价估计”。
用一组示例数据看清差异
假设某时刻订单簿快照为:买一价 100.00、买一量 800;卖一价 100.02、卖一量 200。这是一个明显的买方强势盘口。我们分别计算:
Mid = (100.00 + 100.02) / 2 = 100.0100
WAP = (100.00×800 + 100.02×200) / (800+200)
= (80000 + 20004) / 1000 = 100.0004
Micro = (100.00×200 + 100.02×800) / (800+200)
= (20000 + 80016) / 1000 = 100.0016
结果很说明问题:中间价 100.0100 居中不动;加权中间价 100.0004 反而被大量买单“拉低”到接近买一价,方向感是错的;微价格 100.0016 高于中间价,正确反映了买方压力。若把买卖量对调(买 200、卖 800),微价格会变成 100.0184,低于中间价,反映卖方压力。这就是微价格的核心价值:把盘口量的不平衡翻译成价格的偏移量。
实际工程中,我们通常不直接比较绝对价格,而是看微价格相对中间价的偏移,即 Micro - Mid,称为微价格偏移(Microprice Deviation)。它是有符号量:正值表示买方压力,负值表示卖方压力。很多做市策略直接把这个偏移作为报价中心调整项。
为什么不用加权中间价代替微价格
从上面的示例已经能看出,加权中间价在买方强势时反而下移,方向与真实压力相反。原因在于它把“量”加在了“同侧价格”上:买一量越大,买一价在加权中的比重越大,结果被拉向买一价。而微价格的交叉加权恰好把“量”映射到“对侧价格”,使偏移方向与压力方向一致。这是两者最本质的区别,也是本课程后续所有公式推导和代码实现的出发点。
需要提醒的是,微价格并不是“预测未来价格”的模型,它只是对当前盘口状态的一个更敏感的即时估计。当盘口量快速变化时,微价格会随之跳动,因此实际使用中通常要做平滑处理,或结合多档盘口数据。这些内容会在后续章节展开。
本课程的学习路径
整门课按“定义—计算—实现—验证”四段推进,你可以对照下面的结构安排自己的学习节奏:
| 阶段 | 核心内容 | 产出 |
|---|---|---|
| 概念与公式 | 中间价、加权中间价、微价格的定义与推导,偏移量的符号约定 | 能手工算出任意盘口的微价格 |
| 计算实战 | 多档盘口扩展、量纲处理、异常盘口(空档、零量)的边界处理 | 一套可复用的计算函数 |
| 工程实现 | 用 Python 实现快照解析、批量计算、偏移量平滑 | 可运行的脚本与输出样例 |
| 验证与调优 | 用历史盘口回测偏移方向的有效性,调整平滑参数 | 参数对比表与判断依据 |