2. 马尔可夫链的数学表达:齐次性与非齐次性、n步转移概率、C-K方程

好,咱们接着聊。上一章我跟你说了马尔可夫链的基本概念,说白了就是「未来只跟现在有关,跟过去没关系」。但光有概念不够,做量化交易你得能算。这一章,我们就来啃啃它的数学骨架。

我个人习惯,学任何模型先搞清楚它的「不变」和「变」。马尔可夫链也一样,核心就两个维度:齐次性非齐次性。搞懂了这两个,n步转移概率和C-K方程就是顺水推舟的事。

2.1 齐次性与非齐次性

先问个问题:你手里的转移概率矩阵,会不会随时间变化?

齐次马尔可夫链,就是转移概率不随时间变化。今天从状态A到状态B的概率是0.3,明天还是0.3,后天也是0.3。用数学话说:

P(X_{n+1} = j | X_n = i) = P(X_1 = j | X_0 = i)  对所有 n 成立

我在做股指期货的趋势跟踪策略时,一开始就默认用了齐次假设。为什么?因为省事啊!你只需要估计一个转移矩阵,后面所有计算都基于它。但后来我发现,市场在牛熊转换期,这个假设会出大问题。

避坑指南: 我曾经在2015年股灾期间用齐次马尔可夫链做状态预测,结果模型完全失效。后来复盘发现,市场波动率结构发生了突变,转移概率早就不是原来的样子了。所以,齐次性只适用于平稳市场

非齐次马尔可夫链,就是转移概率随时间变化。数学上写成:

P(X_{n+1} = j | X_n = i) = p_{ij}(n)

这里的 p_{ij}(n) 是时间 n 的函数。你想想看,在趋势跟踪中,市场处于震荡期和趋势期的转移概率能一样吗?显然不能。所以非齐次模型更贴近真实市场,但代价是——你需要估计的参数太多了,每个时间点都要一套转移矩阵。

特性 齐次链 非齐次链
转移概率 恒定不变 随时间变化
参数数量 少(一个矩阵) 多(每个时间点一个矩阵)
适用场景 平稳市场 结构变化市场
计算复杂度
我的建议: 做趋势跟踪策略时,先用齐次模型快速验证思路。如果效果不错,再考虑引入非齐次性来提升精度。别一上来就搞复杂的,容易把自己绕进去。

2.2 n步转移概率

好,现在假设我们有一个齐次马尔可夫链。你当前在状态 i,想知道 n 步之后到达状态 j 的概率。这就是 n步转移概率,记作:

p_{ij}^{(n)} = P(X_{m+n} = j | X_m = i)

注意,这里 n 是上标,表示步数,不是幂次。我刚开始学的时候老搞混,后来干脆在代码里用 p_ij_n 这种命名,一目了然。

怎么算?最简单的方法就是矩阵乘法。一步转移矩阵是 P,两步转移矩阵就是 P²,三步就是 P³,以此类推。n步转移矩阵就是 P 的 n 次幂。

P^{(n)} = P^n

举个例子。假设我们有个两状态系统:状态0是「震荡」,状态1是「趋势」。一步转移矩阵为:

P = [[0.7, 0.3],
     [0.4, 0.6]]

那么两步转移矩阵就是:

P² = P × P = [[0.7×0.7 + 0.3×0.4, 0.7×0.3 + 0.3×0.6],
              [0.4×0.7 + 0.6×0.4, 0.4×0.3 + 0.6×0.6]]
   = [[0.61, 0.39],
      [0.52, 0.48]]

你看,从震荡状态出发,两步后还在震荡的概率是0.61,进入趋势的概率是0.39。这个信息对做仓位管理很有用——如果你知道未来两步大概率还是震荡,那就不该重仓。

核心要点: n步转移概率刻画的是系统的中期行为。它比一步概率更有预测价值,因为趋势跟踪本质上是在捕捉状态的持续性。

2.3 C-K方程(Chapman-Kolmogorov方程)

说到n步转移概率,就绕不开C-K方程。这玩意儿说白了就是:从 i 到 j 走 m+n 步,等于先走 m 步到某个中间状态 k,再走 n 步到 j,然后把所有可能的 k 加起来

数学形式:

p_{ij}^{(m+n)} = Σ_k p_{ik}^{(m)} × p_{kj}^{(n)}

这个方程看起来简单,但威力巨大。它告诉我们:

  • 高阶转移概率可以分解为低阶的乘积和
  • 不需要每次都重新计算整个矩阵的幂
  • 可以递归地计算任意步数的转移概率

我记得有一次在优化策略的回测速度时,发现每次都要计算 P^100 这种高次幂,计算量很大。后来用C-K方程做了个动态规划版本,把计算复杂度从 O(n³) 降到了 O(n² log k),速度提升了一个数量级。

下面我用Python展示一下C-K方程的实现:

import numpy as np

def ck_step(P_m, P_n):
    """
    使用C-K方程计算 m+n 步转移矩阵
    P_m: m步转移矩阵
    P_n: n步转移矩阵
    """
    return np.dot(P_m, P_n)

# 示例:计算3步转移矩阵
P = np.array([[0.7, 0.3],
              [0.4, 0.6]])

# 先算2步
P2 = ck_step(P, P)
# 再算3步:2步 + 1步
P3 = ck_step(P2, P)

print("3步转移矩阵:")
print(P3)
实用技巧: 在实盘系统中,我通常不会一次性算到100步。而是用C-K方程的递归思想,只缓存最近几个步数的转移矩阵。这样既省内存,又能在市场状态变化时快速更新。

2.4 本章知识体系

说了这么多,我画个图帮你理清思路。下面这张SVG图展示了本章的核心逻辑:

马尔可夫链数学表达 齐次性 vs 非齐次性 n步转移概率 转移概率不随时间变化 适用于平稳市场 转移概率随时间变化 适用于结构变化市场 C-K方程:p(m+n) = p(m) × p(n) 应用:趋势跟踪策略的状态预测与仓位管理

嗯,到这里你应该明白了。齐次性决定了模型的简洁度,n步转移概率决定了预测的深度,而C-K方程则是连接两者的桥梁。在趋势跟踪中,这三者缺一不可。

一句话总结: 齐次性是假设,n步概率是工具,C-K方程是算法。三者合在一起,你就能用马尔可夫链对市场状态做「多步前瞻」了。

我个人觉得,学数学表达不是为了炫技,而是为了在实盘中少踩坑。你想想看,如果你连转移概率怎么算都不清楚,怎么敢用它来指导仓位?所以这一章虽然有点干,但值得你多花点时间消化。


公众号:蓝海资料掘金营,微信deep3321