4. 泊松过程:从定义到实战
泊松过程,说白了就是用来描述「随机事件在时间轴上怎么发生」的数学模型。我最早接触它是在做高频交易策略的时候——订单流到达交易所的时间间隔,居然完美符合泊松分布。嗯,这玩意儿比我想象中实用得多。
4.1 泊松过程的定义
先给个严谨定义,别怕,我马上用人话解释。
一个计数过程 {N(t), t ≥ 0} 被称为泊松过程,如果它满足:
- N(0) = 0
- 独立增量性:不相交的时间区间内事件数相互独立
- 平稳增量性:在任意长度为 t 的区间内,事件数只与 t 有关
- P(N(t) = 1) = λt + o(t),P(N(t) ≥ 2) = o(t)
第四条看着吓人,其实意思很简单:在极短的时间 dt 内,最多发生一个事件。λ 就是强度,代表单位时间内平均发生多少次。
核心公式:在时间 t 内发生 k 个事件的概率为
P(N(t) = k) = (λt)^k * e^(-λt) / k!
这就是泊松分布,k = 0, 1, 2, ...
我在做订单簿建模时,就用这个公式预测每秒的订单到达数量。实测下来,低流动性时段拟合得特别好,高流动性时段嘛...后面会讲怎么修正。
4.2 到达间隔分布
这个知识点特别重要。你想想看,如果事件是随机到达的,那两次事件之间的时间间隔服从什么分布?
答案是:指数分布。
设 T₁ 为第一个事件到达时间,T₂ 为第一个与第二个事件之间的间隔,以此类推。那么 T₁, T₂, ... 独立同分布,且
P(T > t) = e^(-λt)
概率密度函数为 f(t) = λe^(-λt),t ≥ 0。
我的经验:指数分布有个「无记忆性」——不管你已经等了多久,剩余等待时间的分布不变。这特性在交易中意味着:如果你在等一个信号出现,过去等了多久都不影响未来还要等多久。别因为等得久就觉得「快来了」。
我曾经用这个性质优化过止损策略。当时做的是「等待最佳入场点」的算法,利用指数分布的无记忆性,避免了「已经等了很久所以不舍得放弃」的心理偏差。效果还不错。
4.3 复合泊松过程
现实交易中,事件不光有「到达」这个属性,还有「大小」。比如每笔订单的成交量、每次价格跳动的幅度。这时候就需要复合泊松过程了。
定义很简单:
X(t) = Σ_{i=1}^{N(t)} Y_i
其中 N(t) 是泊松过程,Y₁, Y₂, ... 是独立同分布的随机变量,代表每次事件的大小。
举个例子:
- N(t) = 每分钟到达的订单数量(泊松过程)
- Y_i = 第 i 笔订单的成交量(比如服从对数正态分布)
- X(t) = 到时间 t 为止的总成交量
这个模型我用来做过成交量预测。当时有个策略需要预估未来5分钟的总成交量,用复合泊松过程拟合历史数据,预测误差控制在15%以内。当然,遇到突发新闻时模型会失效——那是另一个故事了。
避坑指南:复合泊松过程的方差计算要小心。
E[X(t)] = λt * E[Y]
Var[X(t)] = λt * (E[Y²])
我曾经在计算风险敞口时忘了考虑 Y 的方差,结果低估了实际波动。嗯,那次回撤挺疼的。
4.4 知识体系总览
下面这张图把泊松过程的核心逻辑串起来了。我建议你多看几遍,理解每个模块之间的关联。
4.5 实战小贴士
最后分享几个我在项目中积累的经验:
- 参数估计:λ 直接用样本均值估计就行。但要注意,如果数据有自相关性(比如订单到达在短时间内会聚集),那泊松过程就不太适用了。这时候可以考虑自激过程(Hawkes过程),那是后面章节的内容。
- 检验方法:拿到数据后,先画个到达间隔的直方图,看它像不像指数分布。我一般用 Kolmogorov-Smirnov 检验做验证。
- 代码实现:Python 里用
numpy.random.poisson生成泊松随机数,用numpy.random.exponential生成间隔时间。模拟复合泊松过程就是先模拟 N(t),再模拟 N(t) 个 Y_i。
一个小技巧:如果你需要模拟高频交易中的订单到达,可以用两个泊松过程叠加——一个代表「正常订单流」(低强度),一个代表「突发订单流」(高强度)。这样能模拟出市场平静期和活跃期的交替。我管这叫「双泊松模型」,虽然不完美,但比单泊松强多了。
好了,泊松过程就聊到这儿。记住三个核心:定义是基础,间隔分布是钥匙,复合过程是实战利器。下次遇到随机到达的事件,先想想能不能用泊松过程来建模——十有八九能行。