halo 的技术博客

返回

问题:做市商的敌人不是波动,是信息不对称#

做市商的商业模式是卖流动性收价差:在买一卖一各挂一笔,赚成交价差,祈祷买卖大致平衡。这个模式有一个致命的敌人——知情交易者

当对手方知道你不知道的事(财报泄露、大基金被迫清仓、某个算法坏了),他们只打你的一边:单向吃你的卖单或买单。你的库存迅速偏向错误的方向,等价格反映出那条你不知道的信息时,你抱着一堆买贵了的存货。用期权语言说:你挂的每一笔限价单,都是免费送给知情者的美式期权

这种『对手方知情程度』就是订单流毒性(order flow toxicity)。毒性高到一定程度,理性做市商的最优选择是撤单走人——而所有做市商同时走人,就是 2010 年 5 月 6 日那种闪崩:道指 5 分钟跌 600 点,不是因为卖压大到吃穿了订单簿,而是因为订单簿本身消失了。

问题来了:毒性能实时测量吗?Easley, López de Prado & O’Hara (2012) 的答案是 VPIN——Volume-Synchronized Probability of Informed Trading。

从 PIN 到 VPIN:把结构模型压成可计算的比率#

学术前身是 Easley-O’Hara 的 PIN 模型:知情交易以概率 α 发生,发生时产生单向订单流。PIN 理论优雅但要用极大似然估计三四个结构参数,日频更新都吃力,实时监控无从谈起。

VPIN 的工程化改造有三步,每一步都值得单独理解。

第一步:按成交量切桶,不按时钟#

信息不按时钟到达——这是本专栏美元棒那篇的核心论点,VPIN 把它用到极致。把 tick 流按累计成交量切成等量的桶(bucket),每桶恰好 V 股/张。活跃时段一分钟切好几桶,死寂时段半小时切不满一桶。在『成交量时间』里,知情交易的脚步声被自动放大采样。

第二步:BVC 批量分类买卖量#

每桶内部需要知道多少量是买方发起、多少是卖方发起。逐笔 tick rule 分类(价格上跳算买、下跳算卖)在高频撮合下噪声很大,VPIN 用更钝但更稳的 BVC(Bulk Volume Classification):

Vτbuy=VτZ ⁣(ΔPτσΔP),Vτsell=VτVτbuyV^{buy}_\tau = V_\tau \cdot Z\!\left(\frac{\Delta P_\tau}{\sigma_{\Delta P}}\right), \qquad V^{sell}_\tau = V_\tau - V^{buy}_\tau

其中 (Z) 是标准正态 CDF,(\Delta P_\tau) 是第 τ 桶的价格变化。直觉:桶收益大涨 → CDF 接近 1 → 大部分量归为买方;横盘 → 五五开。它不判断每一笔,只按桶级价格证据做概率性拆分。

BVC 机制与分类结果

左图是 CDF 映射本身,右图是实测 600 个桶的拆分结果——桶标准化收益与买方占比严格落在 CDF 曲线上(BVC 是确定性函数)。

第三步:滚动买卖失衡比率#

VPIN=τ=1WVτbuyVτsellτ=1WVτ\text{VPIN} = \frac{\sum_{\tau=1}^{W} |V^{buy}_\tau - V^{sell}_\tau|}{\sum_{\tau=1}^{W} V_\tau}

滚动窗口 W 通常取 50 桶。VPIN ∈ [0, 1]:均衡双边流时低(买卖拆分五五开,失衡小),单边知情流时高。它就是 PIN 里『知情交易占比』的成交量同步近似——名字里每个词都有着落。

核心实现:

实验:一场有预谋的合成闪崩#

构造 6 万 tick 的合成市场,剧本分三幕:

tick 区间买方占比成交量语义
正常0–35,00050%基准双边均衡做市
毒性积累35,000–45,00036%×1.6知情者持续出货
闪崩45,000–47,00020%×4.0单边倾泻、流动性蒸发

价格由白噪声 + 带符号的成交量冲击驱动。桶大小取总量的 1/600(切出 593 桶),VPIN 窗口 50 桶。

价格与 VPIN 全景

这张图是全文的主证据,三个读法:

  1. 正常期 VPIN 在 0.41 附近呼吸——注意不是 0。双边随机流的 BVC 拆分天然产生非零失衡(有限样本效应),0.41 是这套参数下的『底噪』,绝对水平没有跨市场可比性,只有相对自身历史的分位数有意义
  2. 毒性积累期(橙色区):VPIN 从 0.411 爬到 0.625。用正常期 95 分位(0.454)做报警线,首次越线发生在 tick 36,236——比闪崩(tick 45,000)早 8,764 个 tick。毒性积累是渐进的、可观测的,崩塌是瞬间的、不可交易的,这个时间差就是 VPIN 存在的全部理由;
  3. 闪崩期(红色区):VPIN 冲上 0.9。但此刻报警已无意义——你要么早就撤了,要么已经在崩塌里。

分布视角更直观:

正常期 vs 毒性期 VPIN 分布

正常期(均值 0.411)与毒性期(均值 0.625)的分布几乎可分——这不是尾部重叠里抠信号,是整个分布的平移。

VPIN 预测什么:波动,不是方向#

Easley 等人的原始主张是 VPIN 预测短期波动(毒性 → 做市商撤退 → 价差走阔 → 波动放大)。本实验的复现:按 VPIN 五分位分组,看未来 2000 tick 的已实现波动:

VPIN 分位与未来波动

严格单调:最低分位组未来波动 0.0214,最高分位组 0.0334,全样本相关 0.52。毒性确实领先于波动。

注意这个实验没有声称 VPIN 预测收益方向。高 VPIN 时段在本实验里是下跌的,但那是剧本安排——现实中知情者可能在买也可能在卖,VPIN 取的是绝对值失衡,方向信息在第一步就被扔掉了。它的正确下游是:

  • 做市/执行:VPIN 越线 → 撤单、拉宽报价、降低挂单深度;
  • 风控:高 VPIN 时段收紧仓位限额、暂停均值回复类策略(它们本质上在扮演业余做市商);
  • ML 特征:作为 regime 特征喂给波动率预测或元标注模型——与上一篇 CUSUM 事件采样天然互补(CUSUM 说『行情变了』,VPIN 说『变脸前对手盘已经不对劲』)。

三盆冷水#

第一盆:2010 闪崩『预警』有事后择参之嫌。 VPIN 最著名的卖点是『在 2010 年 5 月 6 日闪崩前一小时达到历史高位』。但 Andersen & Bondarenko (2014) 用不同的桶大小和分类方法复现,发现预警能力大幅缩水,甚至 VPIN 的大部分预测力可以被简单的成交量指标解释;Easley 阵营随后反驳,论战打了好几个回合。诚实的结论是:VPIN 对参数(桶大小、窗口、分类方法)敏感,任何『它预警了某次崩盘』的叙事都要先问一句——参数是崩盘前定的还是崩盘后定的?自己用时必须在样本外固定参数再评估。

第二盆:BVC 的分类误差恰好在最关键处最大。 BVC 假设桶收益与买方占比的关系服从正态 CDF——这在平静市场是不错的近似,但闪崩时价格跳变离散、买卖极端失衡,正好偏离正态假设最远。换句话说,毒性最高、你最需要它准的时刻,恰是 BVC 最不准的时刻。本实验用合成数据(生成机制已知)回避了这个问题,真实数据上这是不可回避的测量误差。这与失衡棒那篇 tick rule 误差集中在知情时段是同一类困境:微观结构指标的测量质量与市场状态负相关。

第三盆:高 VPIN 不可直接反向或顺势交易。 VPIN 是『该不该在场』的指标,不是『该站哪边』的指标。拿高 VPIN 做顺势(跟着知情者)你不知道方向;做反向(赌过度反应)你在接知情者的飞刀。学术检验里 VPIN 对收益方向的预测力基本为零——这不是缺陷,是设计使然:绝对值运算扔掉方向是为了换取对『知情概率』的稳健估计。想要方向,回到签名失衡棒或订单簿不平衡(OFI)那条线。

在工具链中的位置#

把本专栏微观结构线索串起来:美元棒证明信息以量到达(采样论)→ 失衡棒追踪签名流检测知情方向活动(事件论)→ VPIN 把知情活动压缩成 [0,1] 的毒性概率并证明它领先波动(风控论)。三者共享『成交量时间』这一个世界观,分别回答何时采样、何事发生、何时离场。

一句话总结:VPIN 不会告诉你市场要往哪走,它告诉你牌桌上出现了比你懂的玩家——而扑克的第一定律是:看不出谁是鱼,你就是鱼。

参考文献#

  • Easley, D., López de Prado, M., & O’Hara, M. (2012). Flow Toxicity and Liquidity in a High-frequency World. Review of Financial Studies, 25(5), 1457–1493.
  • Easley, D., López de Prado, M., & O’Hara, M. (2011). The Microstructure of the “Flash Crash”. Journal of Portfolio Management, 37(2), 118–128.
  • Andersen, T. G., & Bondarenko, O. (2014). VPIN and the Flash Crash. Journal of Financial Markets, 17, 1–46.
VPIN 订单流毒性:用成交量同步的知情概率预警闪崩
https://blog.halo26812.eu.org/blog/vpin-toxicity
Author halo
Published at 2026年7月30日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨