21. 订单流分析:订单到达过程、泊松过程、自相关分析
做量化交易这些年,我越来越觉得订单流分析是个绕不开的硬功夫。说白了,市场就是由一笔笔订单堆出来的。你如果看不懂订单是怎么来的、怎么走的,那策略再花哨也容易翻车。今天咱们就聊聊订单到达过程、泊松过程,还有自相关分析这几个核心概念。
订单到达过程:市场的呼吸节奏
订单到达过程,其实就是描述订单什么时候来、来多少。你可以把它想象成市场的呼吸——有快有慢,有深有浅。
我个人习惯把订单到达分成两类:
- 限价单到达:挂在盘口等着成交的订单。这类订单通常比较稳定,但遇到大行情时会突然暴增。
- 市价单到达:直接吃掉盘口的订单。这类订单更激进,往往伴随着价格波动。
我在项目中遇到过一个问题:某只股票平时订单稀疏,但一到财报发布前后,订单就像潮水一样涌来。如果你用固定参数去建模,那肯定要吃亏。所以,理解订单到达的动态特性,是第一步。
泊松过程:一个经典的起点
说到订单到达,很多人第一个想到的就是泊松过程。为什么?因为它简单、好用,而且很多市场微观结构理论都建立在它之上。
泊松过程的核心假设是:订单到达是独立的,且到达率是恒定的。用数学语言说,就是在时间区间 t 内到达 k 笔订单的概率为:
P(N(t) = k) = (λt)^k * e^(-λt) / k!
其中 λ 是平均到达率。举个例子,如果某只股票平均每秒有 5 笔订单到达,那 λ = 5。你算算看,1 秒内恰好来 3 笔订单的概率是多少?
嗯,这里要注意:真实市场很少完全符合泊松过程。为什么?因为订单到达往往有聚集效应——大单来了,后面往往跟着更多订单。这就是所谓的「自相关」。
关键点:泊松过程是一个很好的基准模型,但别指望它能完美拟合真实数据。用它做对比,能帮你发现市场中的异常行为。
自相关分析:订单之间的「记忆」
自相关分析,说白了就是看过去的订单对未来的订单有没有影响。如果自相关系数显著不为零,那就说明订单到达不是独立的——市场有「记忆」。
我记得有一次分析某只高频交易活跃的股票,发现订单间隔的自相关系数在滞后 1-5 阶时都显著为正。这说明什么?说明订单是扎堆来的。你想想看,这背后可能是算法交易在拆单,也可能是大资金在分批进场。
计算自相关的方法很简单:
import numpy as np
def autocorrelation(series, lag):
n = len(series)
mean = np.mean(series)
var = np.var(series)
if var == 0:
return 0
numerator = np.sum((series[:n-lag] - mean) * (series[lag:] - mean))
denominator = (n - lag) * var
return numerator / denominator
# 示例:计算订单间隔的自相关
intervals = [0.2, 0.3, 0.1, 0.5, 0.4, 0.2, 0.3, 0.1]
for lag in range(1, 5):
ac = autocorrelation(intervals, lag)
print(f"Lag {lag}: {ac:.3f}")
实战技巧:我建议你同时计算多个滞后阶数的自相关,然后画成自相关图(ACF)。如果 ACF 衰减缓慢,说明订单过程有长记忆性,这时候用泊松过程就不太合适了。
知识体系总览
下面这张图帮你理清本章的核心逻辑:
实战中的避坑指南
我曾经踩过一个坑:用泊松过程去建模某只 ETF 的订单流,结果回测表现很好,实盘却一塌糊涂。后来一查,发现那只 ETF 的订单到达有明显的日周期模式——早盘密集、午盘稀疏、尾盘又密集。泊松过程的恒定到达率假设,在这里完全不成立。
所以,我建议你这样做:
- 先做描述性统计:看看订单间隔的均值、方差、分布形状。如果方差远大于均值,那泊松过程基本可以排除。
- 再算自相关:如果自相关显著,考虑用自回归条件持续时间(ACD)模型,或者更复杂的 Hawkes 过程。
- 最后做模型诊断:用 QQ 图或者 KS 检验,看看你的模型能不能拟合真实数据。
警告:别以为订单流分析只是学术游戏。我见过有人因为忽略自相关,在策略中错误地假设订单独立,结果在高频交易中连续亏损。订单流的「记忆」效应,直接影响到你的止损、仓位管理和执行算法。
小结
订单流分析,说白了就是读懂市场的语言。泊松过程给了你一个起点,自相关分析帮你发现市场的真实结构。我个人觉得,这两者结合起来,能让你对市场微观结构有一个比较扎实的理解。
下次你盯盘的时候,不妨试试看:随便挑一只活跃股票,算算它的订单间隔自相关。你会发现,市场远比你想象的更有「记忆」。