第七章 订单簿动态建模:从随机过程到高频预测
做市商这行,说白了就是跟订单簿谈恋爱。你得懂它的脾气,知道它下一秒想干嘛。我个人习惯把订单簿看作一个活物——它有呼吸(订单到达),有心跳(价格跳动),偶尔还会抽风(大单砸盘)。
这一章我们聊聊怎么给订单簿建模。别被「随机过程」四个字吓到,其实没那么玄乎。我刚开始做量化时也觉得这玩意儿是数学家的玩具,直到有一次实盘被连续吃掉三层深度...嗯,从那以后我老老实实把Poisson过程啃完了。
核心观点:订单簿的动态本质是「事件驱动」的随机过程。每个订单的到达、撤单、成交,都是一个随机事件。我们要做的,就是找到这些事件背后的统计规律。
7.1 订单到达过程:Poisson过程及其变种
先问个问题:订单到达是随机的吗?答案是:是,也不是。
说「是」,因为微观上你确实无法预测下一秒会不会来一个买单。说「不是」,因为宏观上订单到达率有明显的日内模式——开盘密集、午盘稀疏、收盘前又密集。
最简单的模型是齐次Poisson过程。假设订单到达率λ是常数,那么时间t内到达k个订单的概率是:
P(N(t) = k) = (λt)^k * e^(-λt) / k!
我在项目中遇到过一个问题:用齐次Poisson拟合某币种订单流,结果残差大得离谱。后来发现,这币种在新闻发布时段订单率能飙到平时的20倍。所以实际中我几乎不用齐次Poisson,而是用非齐次Poisson过程——让λ(t)随时间变化。
| 模型类型 | λ是否恒定 | 适用场景 | 我的经验 |
|---|---|---|---|
| 齐次Poisson | 是 | 流动性极好的成熟市场 | 基本不用,太理想化 |
| 非齐次Poisson | 否 | 有日内效应的市场 | 常用,配合时间函数 |
| Cox过程 | 随机 | 波动率剧烈变化时 | 复杂但精准 |
避坑指南:我曾经用齐次Poisson做回测,策略表现好得离谱。一上实盘就崩。为什么?因为回测时订单到达均匀,实盘时订单扎堆来。记住:金融数据几乎没有「均匀」这回事。
7.2 订单簿的马尔可夫模型
马尔可夫模型的核心假设是:未来只跟现在有关,跟过去无关。你想想看,订单簿是不是这样?
其实不完全对。一个限价单挂在那里,它的命运(成交、撤单、被越过)确实只取决于当前的市场状态。但订单簿的「状态」本身包含了很多历史信息——比如深度、价差、订单密度。
我常用的做法是把订单簿离散化。比如把价格分成若干个bin,每个bin记录挂单量。这样订单簿就变成了一个高维向量。然后假设这个向量服从马尔可夫过程:
P(S_{t+1} | S_t, S_{t-1}, ...) = P(S_{t+1} | S_t)
这里S_t是t时刻的订单簿状态。听起来简单,但实际做起来有两个坑:
- 维度灾难:如果价格分100个bin,每个bin有10种可能挂单量,状态空间就是10^100。根本算不了。
- 非平稳性:订单簿的统计特性随时间变化,马尔可夫链的转移矩阵不是固定的。
怎么解决?我个人的经验是:
- 只关注关键价格位(买一卖一、买二卖二)
- 用隐马尔可夫模型(HMM),把订单簿的「模式」作为隐状态
- 定期重估转移矩阵
注意:马尔可夫模型在订单簿上的应用有个致命弱点——它假设状态转移是「无记忆」的。但大单拆单时,后续订单跟前面订单明显相关。这时候马尔可夫模型会失效。我曾经因为这个亏过不少手续费。
7.3 限价订单簿的随机控制
做市商的核心问题是什么?说白了就是:我该在什么价格挂单?挂多少?什么时候撤单?
这本质上是一个随机控制问题。你的动作(挂单、撤单、改单)会影响订单簿的状态,而订单簿的状态又反过来影响你的收益。
经典的框架是Avellaneda-Stoikov模型。它把做市商问题建模成:
最大化:E[最终现金 + 库存清算价值 - 风险惩罚]
控制变量:买卖价差、挂单深度
约束:库存不能爆仓
我在项目中实现过这个模型。说实话,原始版本太理想化了。它假设订单到达率是常数,但实际中订单到达率跟价差高度相关——价差越小,订单来得越快。
所以我做了两个改进:
- 让订单到达率随价差指数衰减
- 加入库存惩罚项,防止单边持仓过大
效果怎么样?嗯,至少没爆仓。而且夏普比率从原来的0.8提升到了1.3。虽然不算惊艳,但在实盘中已经够用了。
关键公式:最优报价价差 ≈ 库存风险项 + 订单流不平衡项 + 常数项。这个公式我每次做策略都会默念一遍。
7.4 高频订单流预测
最后聊聊预测。很多人觉得高频预测是玄学,其实不然。订单流中确实存在可预测的模式,只是信噪比极低。
我常用的预测方法有三类:
| 方法 | 原理 | 预测时长 | 我的评价 |
|---|---|---|---|
| 自回归模型 | 利用订单流的历史自相关性 | 1-5个事件 | 简单有效,但容易过拟合 |
| LSTM/Transformer | 捕捉长程依赖 | 10-50个事件 | 效果好,但训练慢 |
| 点过程模型 | 用Hawkes过程建模事件簇 | 1-10个事件 | 我最喜欢,解释性强 |
我个人最推荐Hawkes过程。它假设一个事件的发生会增加后续事件的发生概率——这不就是订单流的真实写照吗?一个大买单进来,往往后面跟着更多买单。
# 简单的Hawkes过程模拟
λ(t) = μ + Σ α * e^(-β(t - t_i))
# μ: 背景强度
# α: 触发强度
# β: 衰减速度
我曾经用Hawkes过程预测某加密货币的订单流方向。准确率只有55%,但已经足够赚钱了。为什么?因为高频交易中,55%的胜率配合合适的赔率,就是印钞机。
实战技巧:预测订单流时,别只看方向。还要预测「强度」——下一波订单会有多猛?这比单纯预测买卖方向更有价值。我习惯把预测结果分成三档:弱、中、强,然后对应不同的做市策略。
知识体系总览
下面这张图是我自己整理的订单簿动态建模知识体系。每次做新策略前,我都会对照这张图检查自己有没有遗漏。
这张图把四个模块串起来了。你想想看:订单到达过程告诉你「事件怎么来」,马尔可夫模型告诉你「状态怎么变」,随机控制告诉你「怎么应对」,高频预测告诉你「未来怎么走」。四者缺一不可。
最后说一句:模型再漂亮,也要经得起实盘检验。我见过太多人在回测里赚得盆满钵满,一上实盘就原形毕露。所以我的建议是——先跑模拟,再跑小资金,最后才上量。每一步都要验证你的订单簿模型是否跟真实市场一致。
本章核心:订单簿动态建模不是学术游戏,而是做市商的生存工具。Poisson过程帮你理解订单流,马尔可夫模型帮你刻画状态,随机控制帮你做决策,高频预测帮你抢跑。把这四样东西吃透了,你就能在订单簿的波涛中游刃有余。
交易系统化学习资料 微信Strategy888888