1. 马尔可夫过程基础:定义、核心性质、状态空间与转移概率矩阵

大家好,欢迎来到这门课的第一讲。

咱们开门见山。马尔可夫过程,说白了就是研究「下一步怎么走」的数学工具。我最早接触它是在做高频交易策略回测的时候,当时被一堆随机过程搞得头大,后来发现马尔可夫过程反而是最「讲道理」的那一个——它不跟你玩弯弯绕,只关心你现在在哪,不管你怎么来的。

1.1 什么是马尔可夫过程?

先给个定义,别怕,我尽量说人话。

马尔可夫过程,是一种随机过程。它满足一个核心条件:未来的状态只依赖于当前状态,与过去的状态无关

嗯,这就是所谓的「马尔可夫性」,也叫「无后效性」。

核心定义:

对于任意时刻 t,以及任意状态 s₁, s₂, ..., sₜ,有:

P(Xₜ₊₁ = sₜ₊₁ | Xₜ = sₜ, Xₜ₋₁ = sₜ₋₁, ..., X₁ = s₁) = P(Xₜ₊₁ = sₜ₊₁ | Xₜ = sₜ)

翻译成人话:给定现在,未来与过去条件独立。

你想想看,这像不像做交易?

我个人的经验是,很多趋势跟踪策略本质上就假设了「当前价格走势已经包含了所有历史信息」。你不需要知道三天前发生了什么,只需要知道现在处于什么状态——是上涨趋势、震荡整理还是下跌趋势。这就是马尔可夫性在量化交易中的朴素体现。

1.2 核心性质:马尔可夫性

咱们再深入一点。马尔可夫性到底意味着什么?

  • 记忆只有一步:系统只记得「上一刻」的状态,更早的历史被遗忘。
  • 状态决定一切:只要知道当前状态,未来演化的概率分布就完全确定了。
  • 路径无关:不管你是从天堂跌落到当前状态,还是从地狱爬上来,未来的概率都一样。

我曾经在开发一个CTA策略时,犯过一个低级错误:把过去10天的价格数据全部塞进模型,结果过拟合得一塌糊涂。后来改用马尔可夫链,只保留当前状态(比如用MACD金叉/死叉作为状态),效果反而更稳健。说白了,有时候「忘记」比「记住」更重要。

避坑指南:

我曾经以为所有金融时间序列都满足马尔可夫性,结果在波动率聚类明显的品种上吃了大亏。记住:马尔可夫性是一个假设,不是真理。使用前一定要检验。

1.3 状态空间

状态空间,就是系统所有可能状态的集合。用数学符号表示就是 S = {s₁, s₂, ..., sₙ}。

在趋势跟踪中,我习惯把状态空间设计成离散的、有限的。比如:

  • 状态1:强势上涨(涨幅 > 2%)
  • 状态2:温和上涨(0% < 涨幅 ≤ 2%)
  • 状态3:震荡(-1% ≤ 涨幅 ≤ 0%)
  • 状态4:温和下跌(-2% ≤ 涨幅 < -1%)
  • 状态5:强势下跌(涨幅 < -2%)

你可能会问:为什么是5个状态?不是3个,也不是10个?

嗯,这里有个经验之谈。状态太少,区分度不够;状态太多,转移概率矩阵会变得稀疏,估计不准。我个人建议,对于日线级别的趋势跟踪,3到7个状态是比较舒服的范围。

1.4 转移概率矩阵

这是马尔可夫过程的核心工具。转移概率矩阵 P 是一个 n×n 的方阵,其中 Pᵢⱼ 表示从状态 i 转移到状态 j 的概率。

数学上:Pᵢⱼ = P(Xₜ₊₁ = sⱼ | Xₜ = sᵢ)

矩阵的每一行之和必须等于1,因为从某个状态出发,总要转移到某个状态(包括自身)。

举个例子,假设我们统计了某只股票过去1000个交易日的状态转移情况:

从\到 强势上涨 温和上涨 震荡 温和下跌 强势下跌
强势上涨 0.40 0.30 0.15 0.10 0.05
温和上涨 0.20 0.35 0.25 0.15 0.05
震荡 0.10 0.25 0.30 0.25 0.10
温和下跌 0.05 0.15 0.25 0.35 0.20
强势下跌 0.05 0.10 0.15 0.30 0.40

看到没?对角线上的概率普遍较高。这说明趋势有「惯性」——强势上涨之后,更可能继续上涨;强势下跌之后,更可能继续下跌。这就是趋势跟踪能赚钱的数学基础。

注意:

转移概率矩阵是静态的,它假设转移规律不随时间变化。但在真实市场中,市场状态会发生变化(比如牛转熊),转移概率也会漂移。我建议每3-6个月重新估计一次矩阵。

1.5 用Python实现一个简单的马尔可夫链

光说不练假把式。咱们写几行代码,把上面的矩阵用起来。

import numpy as np

# 定义状态
states = ['强势上涨', '温和上涨', '震荡', '温和下跌', '强势下跌']

# 转移概率矩阵
P = np.array([
    [0.40, 0.30, 0.15, 0.10, 0.05],
    [0.20, 0.35, 0.25, 0.15, 0.05],
    [0.10, 0.25, 0.30, 0.25, 0.10],
    [0.05, 0.15, 0.25, 0.35, 0.20],
    [0.05, 0.10, 0.15, 0.30, 0.40]
])

# 当前状态(假设当前是温和上涨,索引为1)
current_state = 1

# 预测下一步状态
next_state_probs = P[current_state]
next_state = np.random.choice(len(states), p=next_state_probs)

print(f"当前状态: {states[current_state]}")
print(f"预测下一步状态: {states[next_state]}")
print(f"各状态概率: {dict(zip(states, next_state_probs))}")

这段代码很简单,但它是整个马尔可夫过程在趋势跟踪中应用的基础。你想想看,如果我们能准确估计出转移概率,就能知道当前趋势持续的概率有多大,从而决定是持仓还是平仓。

1.6 知识体系总览

为了让你对本章内容有个整体印象,我画了一张图:

马尔可夫过程基础 定义 随机过程 + 马尔可夫性 核心性质 无后效性 / 马尔可夫性 状态空间 离散 / 有限状态集合 转移概率矩阵 P Pᵢⱼ = P(下一步到 j | 当前在 i),每行和为1 趋势跟踪应用 状态划分 → 估计矩阵 → 预测趋势 → 制定策略

这张图把本章的知识结构串起来了。从定义出发,理解核心性质,然后构建状态空间,最后用转移概率矩阵量化状态之间的转换规律。每一步都是下一步的基础。

1.7 小结

这一章我们聊了:

  • 马尔可夫过程的定义——未来只依赖现在
  • 马尔可夫性——无后效性,忘记过去
  • 状态空间——系统所有可能的状态
  • 转移概率矩阵——状态之间跳转的概率

我个人觉得,理解马尔可夫过程的关键不在于数学公式,而在于思维方式:把复杂的时间序列问题,简化为状态之间的跳转问题。这种「化繁为简」的思路,在量化交易中非常实用。

下一章,我们会讨论如何用马尔可夫链来建模趋势跟踪策略。不过在那之前,建议你把上面的代码跑一跑,亲手感受一下转移概率矩阵是怎么工作的。


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