跳到正文

Ornstein-Uhlenbeck 过程:把均值回归做对

OU 过程,它的 SDE,对均值回归序列的校准,以及为什么半衰期是对交易者最有用的参数。

第 9 篇 · 共 12 篇 约 12 分钟

几何布朗运动对股票很棒,但金融中有大量东西不是几何的。相关性资产的价差回归均值。利率均值回归。波动率聚集在长期水平附近。库存头寸被拉回目标。所有这些对的工具是 Ornstein-Uhlenbeck 过程。

OU 过程是 AR(1) 过程的连续时间极限。它是最简单的均值回归扩散。它有平稳分布、高斯转移律、闭式解。它也是 Vasicek 利率模型的基础,我们下一篇文章会涵盖。

这篇文章会走过 SDE,显式求解,推导半衰期公式,并展示怎么校准到数据上。如果你跑过配对交易,你隐式地用过 OU。

SDE

Ornstein-Uhlenbeck 过程 XtX_t 满足

dXt=κ(θ−Xt) dt+σ dWtdX_t = \kappa(\theta - X_t) \, dt + \sigma \, dW_t

三个参数:κ>0\kappa > 0 是均值回归速度,θ\theta 是长期均值,σ>0\sigma > 0 是波动率。漂移 κ(θ−Xt)\kappa(\theta - X_t) 以速率 κ\kappa 把 XtX_t 拉回 θ\theta,远离时拉得快,接近时拉得慢。扩散 σ\sigma 是常数,不随 XtX_t 成比例(那是另一种不同的东西)。

对比 GBM:dSt=μSt dt+σSt dWtdS_t = \mu S_t \, dt + \sigma S_t \, dW_t。GBM 中的漂移与 StS_t 成比例,所以过程非平稳(无界增长)。OU 中的漂移有反向项 θ−Xt\theta - X_t,产生恢复力,得到平稳性。OU 中的扩散是常数,所以 XtX_t 不会爆炸。恢复性漂移加常数扩散的组合让 OU 如此有用。

如果 κ=0\kappa = 0,方程化简为 dXt=σ dWtdX_t = \sigma \, dW_t,即布朗运动(非平稳)。如果 κ\kappa 大,均值回归强,XtX_t 紧贴 θ\theta。无量纲量 κ\kappa 相对于 σ2\sigma^2 控制行为。

显式解

OU 过程是少数有闭式解的非平凡 SDE 之一。对 eκtXte^{\kappa t} X_t 应用 Itô 引理:

d(eκtXt)=κeκtXt dt+eκt dXt=κeκtXt dt+eκt[κ(θ−Xt) dt+σ dWt]d(e^{\kappa t} X_t) = \kappa e^{\kappa t} X_t \, dt + e^{\kappa t} \, dX_t = \kappa e^{\kappa t} X_t \, dt + e^{\kappa t} [\kappa(\theta - X_t) \, dt + \sigma \, dW_t] =κθeκt dt+σeκt dWt= \kappa \theta e^{\kappa t} \, dt + \sigma e^{\kappa t} \, dW_t

从 0 积分到 tt:

eκtXt−X0=κθ∫0teκs ds+σ∫0teκs dWs=θ(eκt−1)+σ∫0teκs dWse^{\kappa t} X_t - X_0 = \kappa \theta \int_0^t e^{\kappa s} \, ds + \sigma \int_0^t e^{\kappa s} \, dW_s = \theta(e^{\kappa t} - 1) + \sigma \int_0^t e^{\kappa s} \, dW_s

解出 XtX_t:

Xt=θ+(X0−θ)e−κt+σ∫0te−κ(t−s) dWsX_t = \theta + (X_0 - \theta) e^{-\kappa t} + \sigma \int_0^t e^{-\kappa(t-s)} \, dW_s

这是显式的 OU 路径。三块:长期均值 θ\theta、初始条件衰减 (X0−θ)e−κt(X_0 - \theta) e^{-\kappa t}、对布朗运动的随机卷积。卷积是均值为零、方差为 σ2(1−e−2κt)/(2κ)\sigma^2 (1 - e^{-2\kappa t}) / (2\kappa) 的高斯随机变量。

因此,条件于 X0X_0,XtX_t 的分布是高斯的:

Xt∣X0∼N(θ+(X0−θ)e−κt,  σ22κ(1−e−2κt))X_t | X_0 \sim \mathcal{N}\left(\theta + (X_0 - \theta) e^{-\kappa t}, \; \frac{\sigma^2}{2\kappa} (1 - e^{-2\kappa t})\right)

均值以速率 κ\kappa 回归 θ\theta。方差收敛到 σ2/(2κ)\sigma^2 / (2\kappa),即平稳方差。

平稳分布

当 t→∞t \to \infty,X0X_0 的影响消失(e−κte^{-\kappa t} 项趋于零)。XtX_t 的分布收敛到

X∞∼N(θ,  σ22κ)X_\infty \sim \mathcal{N}\left(\theta, \; \frac{\sigma^2}{2\kappa}\right)

这就是 OU 过程的平稳分布。它是均值 θ\theta、方差 σ2/(2κ)\sigma^2 / (2\kappa) 的高斯。过程不会爆炸;不会漂走;永远围绕 θ\theta 起伏,波动幅度正比于 σ/2κ\sigma / \sqrt{2\kappa}。

两个重要推论:

  • 无条件均值是 θ\theta。无条件方差是 σ2/(2κ)\sigma^2 / (2\kappa)。
  • κ\kappa 更高(更快回归)或 σ\sigma 更低(更少噪声)意味着更小的平稳方差。过程更紧地贴着均值。

当你听到”均值回归 θ\theta,波动率 σ\sigma“,你应该想到的正是这个平稳分布。它是过程的均衡态。

半衰期

OU 过程最有用的汇总统计量是均值回归的半衰期。由显式解可知,对均值的偏离是 ∣X0−θ∣e−κt|X_0 - \theta| e^{-\kappa t}。半衰期就是这个偏离减半所需的时间:

12=e−κt1/2⇒t1/2=log⁡2κ≈0.693κ\frac{1}{2} = e^{-\kappa t_{1/2}} \quad \Rightarrow \quad t_{1/2} = \frac{\log 2}{\kappa} \approx \frac{0.693}{\kappa}

所以如果 κ=0.5\kappa = 0.5(年化),半衰期大约 1.4 年。如果 κ=2\kappa = 2(年化),大约 0.35 年。回归越快,半衰期越短。

半衰期是交易者在说”这对配对 30 天内回归”或”利率的 5 年半衰期”时引用的数字。它比 κ\kappa 更可解释,因为它直接对应时间。它也给你一条经验法则:如果你看到一个偏离已经持续了好几个半衰期,“均值回归交易”很可能已经失败。

一个常见陷阱:κ\kappa 很小(半衰期很长)的 OU 过程在短期内看起来像随机游走。30 天之内,半衰期 250 天的 OU 朝均值的移动微乎其微。如果你的回看期短而半衰期长,你分不清看到的是均值回归还是只是噪声。

Fokker-Planck 方程

OU 过程有上面给出的高斯转移密度。密度 p(x,t)p(x, t) 随时间的演化受 Fokker-Planck 方程支配:

∂p∂t=∂∂x[κ(x−θ)p]+σ22∂2p∂x2\frac{\partial p}{\partial t} = \frac{\partial}{\partial x}[\kappa(x - \theta) p] + \frac{\sigma^2}{2} \frac{\partial^2 p}{\partial x^2}

第一项是漂移贡献(概率流向 θ\theta)。第二项是扩散贡献(概率扩散开来)。在平稳时 ∂p/∂t=0\partial p / \partial t = 0,上面的高斯就是解。

对 Monte Carlo,你不需要直接用 Fokker-Planck 方程。但它对理解分布如何演化、对验证模拟结果有用。对非 OU 过程(跳跃扩散、Lévy),Fokker-Planck 方程推广为偏积分微分方程。

对数据校准

假设你在等距时刻 Δt\Delta t 观察到时间序列 X0,X1,…,XnX_0, X_1, \ldots, X_n。你想估计 κ\kappa、θ\theta、σ\sigma。

OU 的离散时间类比是 AR(1) 过程:

Xt+1=a+bXt+ϵt,ϵt∼N(0,s2)X_{t+1} = a + b X_t + \epsilon_t, \quad \epsilon_t \sim \mathcal{N}(0, s^2)

到连续时间参数的关系是:

a=θ(1−e−κΔt),b=e−κΔt,s2=σ22κ(1−e−2κΔt)a = \theta(1 - e^{-\kappa \Delta t}), \quad b = e^{-\kappa \Delta t}, \quad s^2 = \frac{\sigma^2}{2\kappa}(1 - e^{-2\kappa \Delta t})

所以你可以用 OLS 回归估计 aa、bb、s2s^2,然后反推 κ\kappa、θ\theta、σ\sigma:

κ^=−log⁡b^Δt,θ^=a^1−b^,σ^=s2κ^1−b^2\hat{\kappa} = -\frac{\log \hat{b}}{\Delta t}, \quad \hat{\theta} = \frac{\hat{a}}{1 - \hat{b}}, \quad \hat{\sigma} = s \sqrt{\frac{2\hat{\kappa}}{1 - \hat{b}^2}}

这是标准校准。它很快(一次 OLS),并在高斯噪声下给出最大似然估计。

一些实战注意事项:

  • 用序列的自相关来抽查 κ\kappa。OU 离散化序列的滞后 1 自相关是 b^=e−κΔt\hat{b} = e^{-\kappa \Delta t}。如果你看到滞后 1 自相关接近 1,κ\kappa 很小。
  • 对慢回归(κΔt≪1\kappa \Delta t \ll 1),bb 的 OLS 估计接近 1,b^\hat{b} 的小偏差会被 −log⁡/Δt-\log / \Delta t 变换放大。要小心。
  • 对快回归(κΔt≫1\kappa \Delta t \gg 1),离散序列几乎独立。半衰期比采样间隔短,你不能可靠地估计 κ\kappa。你需要更高频的数据。
import numpy as np
from scipy import stats

def calibrate_ou(x, dt):
    """Calibrate OU parameters from a time series."""
    x_lag = x[:-1]
    x_now = x[1:]
    slope, intercept, r_value, _, _ = stats.linregress(x_lag, x_now)
    b = slope
    a = intercept
    resid = x_now - (a + b * x_lag)
    s2 = resid.var(ddof=2)
    kappa = -np.log(b) / dt
    theta = a / (1 - b)
    sigma = np.sqrt(s2 * 2 * kappa / (1 - b**2))
    half_life = np.log(2) / kappa
    return kappa, theta, sigma, half_life

这是典型的估计器。在模拟序列上跑它验证它能恢复已知参数。在真实数据上跑它来得到校准的 κ\kappa、θ\theta、σ\sigma 和半衰期。

配对交易

OU 的经典量化用法是配对交易。找到两个协积资产 XX 和 YY。计算价差 St=Xt−βYtS_t = X_t - \beta Y_t,其中 β\beta 是协积系数。把 StS_t 建模为 OU。当 StS_t 偏离 θ\theta 时,赌回归:做多 XX,做空 β\beta 单位的 YY。

OU 参数决定交易。半衰期告诉你预期的持有期。平稳方差告诉你均值回归运动的典型大小。当前对 θ\theta 的偏离,用平稳标准差为单位度量,就是 z-score。只有当 z-score 极端时才交易(比如 ±2\pm 2)。

配对交易的回测需要用校准的参数模拟 OU 路径。OU 假设不可省:没有均值回归,策略没有期望收益,只有回撤。

Vasicek 联系

OU 过程是 Vasicek 短期利率模型的构造块:

drt=κ(θ−rt) dt+σ dWtdr_t = \kappa(\theta - r_t) \, dt + \sigma \, dW_t

短期利率 rtr_t 服从 OU。它可以变负(对大多数货币来说经验上错误,但数学上干净)。Vasicek 下的债券定价公式是闭式的,用到 OU 转移密度。下一篇会详细讲。

OU 也支撑着远期波动率的 Bergomi 模型、随机波动率的 Schöbel-Zhu 模型,以及许多商品价差方面的从业者模型。同一 SDE,穿上不同状态变量的外衣,适合不同市场。

实战中的半衰期

均值回归的半衰期是做均值回归策略的量化最有用的单一数字。三条经验法则:

  1. 长半衰期(年)。 慢回归。仓位应该小,因为每次移动相对偏离来说小。持有期长。融资成本重要。
  2. 中等半衰期(周到月)。 很多配对交易的甜蜜点。移动有意义,持有期可控,融资成本可承受。
  3. 短半衰期(天)。 快回归。仓位可以大。融资成本低。但模型对微观结构更敏感(买卖价差抖动、离散价格)。

如果你校准出 30 天的半衰期,你的策略应该平均持有大约那么久。如果你持有 5 天,你是在回归发生前就退出了。如果你持有 200 天,你早就过了典型均值回归时间,暴露在模型误设之下。

失败模式

OU 是线性、高斯模型。它在以下情况下失败:

  • 过程是非线性的。 漂移以非仿射方式依赖于 XX。解决方案:用不同的 SDE(CIR、CEV、跳跃扩散)。
  • 过程有跳跃。 违反连续性的离散冲击。解决方案:跳跃扩散。
  • 体制切换。 参数本身随时间变化。解决方案:隐马尔可夫模型或分段 OU。
  • 序列非平稳。 均值或方差漂移。解决方案:差分序列或用别的模型。

实际中,金融中很多”OU”序列其实不是 OU。它们在短窗口看起来像 OU,但参数在更长窗口上漂移。谨慎校准,频繁重新估计。

需要带走的要点

Ornstein-Uhlenbeck 过程是最简单的均值回归扩散。它的 SDE 是 dXt=κ(θ−Xt) dt+σ dWtdX_t = \kappa(\theta - X_t) \, dt + \sigma \, dW_t,有闭式转移密度和平稳分布。半衰期 log⁡2/κ\log 2 / \kappa 是最有用的汇总统计量。

对价差、利率、以及任何围绕长期水平波动的序列用 OU。通过对 AR(1) 离散化做 OLS 来校准。当偏离用平稳标准差度量很大时交易,并在大约半衰期时退出。模型简单、稳健、应用广泛。

参考文献:Øksendal (2003),第 5.2 节;Glasserman (2004),第 3.4 节(Cox-Ingersoll-Ross 推广);Hull (2018),第 31 章(利率中的均值回归);Luenberger (1998),第 11 章。ISBN:978-0-19-510809-5。原来的 OU 过程是 1930 年 Leonard Ornstein 和 George Uhlenbeck 作为带摩擦的布朗运动模型提出的。它是最古老的连续时间随机过程之一,至今仍是最有用的之一。

Vasicek 桥梁

OU 过程是让 Vasicek 短期利率模型可处理的原因。如果 rtr_t 是 OU,那么对任何期限 T>tT > t,条件于 rtr_t,rTr_T 的分布是高斯,且均值、方差显式:

rT∣rt∼N(θ+(rt−θ)e−κ(T−t),  σ22κ(1−e−2κ(T−t)))r_T | r_t \sim \mathcal{N}\left(\theta + (r_t - \theta) e^{-\kappa(T-t)}, \; \frac{\sigma^2}{2\kappa}\left(1 - e^{-2\kappa(T-t)}\right)\right)

这是唯一一个有闭式债券价格的高斯短期利率模型。债券价格 P(t,T)P(t, T) 是贴现因子 EQ[exp⁡(−∫tTru du)∣rt]\mathbb{E}^{\mathbb{Q}}[\exp(-\int_t^T r_u \, du) | r_t],OU 过程的积分是正态分布的(高斯过程的线性泛函还是高斯的)。所以我们能闭式计算期望。Vasicek 债券价格公式是

P(t,T)=A(t,T)exp⁡(−B(t,T)rt)P(t, T) = A(t, T) \exp\left(-B(t, T) r_t\right)

其中

B(t,T)=1κ(1−e−κ(T−t))B(t, T) = \frac{1}{\kappa}\left(1 - e^{-\kappa(T-t)}\right)

且 A(t,T)A(t, T) 涉及均值回归漂移的积分。关键事实:债券价格对 rtr_t 是仿射的。这就是仿射期限结构模型的定义性质。

下一篇文章详细涵盖 Vasicek 及其扩展 Cox-Ingersoll-Ross 模型。

协积与 Engle-Granger 两步法

配对交易中,我们通常假设两个资产 XX 和 YY 协积:存在线性组合 β\beta 使得 St=Xt−βYtS_t = X_t - \beta Y_t 平稳。Engle-Granger 步骤:

  1. 把 XtX_t 对 YtY_t 回归(带截距):Xt=α+βYt+ϵtX_t = \alpha + \beta Y_t + \epsilon_t。得到残差 ϵ^t\hat{\epsilon}_t。
  2. 用 Augmented Dickey-Fuller 检验残差的平稳性。
  3. 如果平稳,把 ϵ^t\hat{\epsilon}_t 建模为 OU 并继续。

第 1 步中的系数 β^\hat{\beta} 是协积向量。OU 校准给出的半衰期告诉你回归速度。ϵ^t\hat{\epsilon}_t 的当前值是对均衡的偏离;其 z-score(相对于平稳标准差)是交易信号。

一个常见陷阱:回归的 β\beta 是拟合到历史数据的。如果 XX 和 YY 之间的关系不稳定,β\beta 漂移,你的价差是被误设的。频繁重新估计 β\beta(滚动窗口),或者用更复杂的方法比如多协积资产的 Johansen 步骤。

半衰期估计对回看窗口敏感。窗口长给出稳定估计,但可能包含关系不同的时期。窗口短反应快但噪声大。没有完美答案。大多数配对交易者用 60 到 250 个交易日之间的窗口。

关于均值回归速度的注记

参数 κ\kappa 单位是时间的倒数。如果你对每日数据拟合 OU 得到 κ^=0.005\hat{\kappa} = 0.005,半衰期大约 139 天。但如果你对周数据拟合,你会得到不同的数字,因为 OLS 估计器依赖于采样间隔。具体说,采样间隔 Δt\Delta t 下的滞后 1 自相关是 e−κΔte^{-\kappa \Delta t},所以估计器通过 −log⁡(b^)/Δt-\log(\hat{b})/\Delta t 恢复 κ\kappa。不同 Δt\Delta t 意味着不同 b^\hat{b},于是不同 κ^\hat{\kappa}。

这不是 bug。它反映了连续时间参数尺度不变,而离散估计依赖于采样频率的事实。正确答案是:在你问题自然的单位中校准 κ\kappa,然后把半衰期转换为同一单位。

实际中,多数量化按年表示 κ\kappa,半衰期按年。所以 κ^=0.5\hat{\kappa} = 0.5 对应 0.693/0.5=1.390.693/0.5 = 1.39 年的半衰期。

为什么不直接用高阶 AR 模型?

OU 在连续时间是 AR(1)。你可以想象把 AR(2) 或 AR(p) 拟合到均值回归序列。好处是更灵活;坏处是没有闭式 SDE。对交易来说,OU 的简单性很难超越。大多数均值回归策略可以用 OU 参数表达。

如果序列有复杂自相关结构(振荡、多时间尺度),AR(2) 或体制切换模型可能合理。但你应该总是从 OU 开始,只在有明确误设证据时才让模型复杂化。简洁原则适用。

Ornstein-Uhlenbeck 桥梁:一个优美的恒等式

OU 过程和布朗运动之间有一个干净的联系。具体说,OU 桥梁,即条件于固定终端值 XT=xTX_T = x_T 的 OU 过程,有显式转移律。它是布朗桥梁(本身是带线性均值和二次方差的高斯过程)加上均值回归漂移的修正。

当你需要条件于终端事件时,这对 Monte Carlo 模拟有用。你不必模拟许多完整路径然后拒绝那些不在 xTx_T 终止的,可以直接模拟桥梁。它更快、方差更低。

公式:条件于 X0=x0X_0 = x_0 和 XT=xTX_T = x_T,OU 桥梁在时刻 s∈(0,T]s \in (0, T] 满足

Xs∣X0,XT∼N(μs,σs2)X_s | X_0, X_T \sim \mathcal{N}(\mu_s, \sigma_s^2)

其中 μs\mu_s 和 σs2\sigma_s^2 是 x0x_0、xTx_T、κ\kappa、θ\theta、σ\sigma 的显式函数。表达式通过对高斯转移律用两次并用马尔可夫性质推导得到。

对带终端条件的路径依赖期权定价(比如收益依赖未来某时刻价格的 forward-start 期权),桥梁表示让你只模拟相关的增量。

闲话:OU 与爱因斯坦

OU 过程有物理诠释。带摩擦的布朗运动。爱因斯坦 1905 年关于布朗运动的论文给出扩散方程。Ornstein 和 Uhlenbeck 在速度上加上摩擦项 −κv-\kappa v,产生平稳速度分布(Maxwell-Boltzmann)。同一 SDE 在物理上出现在任何由噪声驱动的阻尼简谐振子上。

金融中,摩擦就是均值回归。一个围绕长期均值上下波动的序列像势井中带摩擦的粒子。平稳分布是势井的玻尔兹曼分布。

这个物理类比对直觉偶尔有用,但主要在审美上。数学哪边都一样。

最后的忠告:一个交易配方

如果你在用 OU 交易均值回归序列:

  1. 在近期数据的滚动窗口上校准 κ\kappa、θ\theta、σ\sigma。
  2. 计算半衰期 t1/2=log⁡2/κt_{1/2} = \log 2 / \kappa。
  3. 计算当前 z-score z=(Xt−θ)/σ2/(2κ)z = (X_t - \theta) / \sqrt{\sigma^2 / (2\kappa)}。
  4. 当 ∣z∣>zthreshold|z| > z_{\text{threshold}}(比如 2)时建仓。
  5. 当 zz 跨过零时退出(均值回归达成),或者经过 k⋅t1/2k \cdot t_{1/2} 时退出(时间止损)。
  6. 仓位大小反比于 t1/2t_{1/2}(半衰期长意味着仓位小,因为每次移动慢)。

这是典型配方。它不是交易 OU 的唯一方式,但最常见。在模拟路径上回测以估计期望盈亏,然后用真实数据在风险限额内交易。优势一半来自模型,另一半来自纪律化执行。模型就是我们这里覆盖的。执行就在你身上。