跳转到内容

OU 过程与半衰期

本页在侧边栏中位于协整之后,见 协整与价差构造。

Ornstein–Uhlenbeck 过程是价差的标准模型:

dxt=θ (μ−xt) dt+σ dWt,dx_t = \theta\,(\mu - x_t)\,dt + \sigma\, dW_t,

xtx_t 为(对数)价差,μ\mu 为均衡水平,θ\theta 为回归速度,σ\sigma 为扩散。离散化后与 AR(1) 等价:Δxt=θ(μ−xt−1)Δt+εt\Delta x_t = \theta(\mu - x_{t-1})\Delta t + \varepsilon_t,可直接用 OLS 估计。

t1/2=ln⁡2θ.t_{1/2} = \frac{\ln 2}{\theta}.

偏离均衡回归一半所需的时间,直接决定一切:

半衰期含义
数天日频可交易,容量小、成本敏感
数周经典配对交易的区间
长于一个月资金占用过久、事件风险累积,通常不值得做
接近零估计的是微观结构噪声,非真实回归
ou-fit.py
import numpy as np
def ou_params(spread: np.ndarray, dt: float = 1/252) -> dict:
"""用 AR(1) 离散化估计 OU 参数;spread: 对数价差"""
x, dx = spread[:-1], np.diff(spread)
b0, b1 = np.polyfit(x, dx, 1) # Δx = b0 + b1·x
theta = -b1 / dt
mu = b0 / (-b1)
resid = dx - (b0 + b1 * x)
sigma = resid.std() / np.sqrt(dt)
return {"theta": theta, "mu": mu, "sigma": sigma,
"half_life_years": np.log(2) / theta,
"half_life_days": np.log(2) / theta * 252}

不要固定用 2σ2\sigma。入场阈值应在两个方向上权衡:

  • 阈值越远,单笔期望利润越大,但交易频率越低;
  • 阈值越近,交易越多,成本占比越高。

Bertram (2010) 在 OU 假设下解析求解了最大化单位时间期望收益的阈值:入场阈值 b∗b^* 与 θ,σ,μ\theta, \sigma, \mu 及成本 cc 有关——半衰期越长、成本越高,最优阈值越远。实践中以解析解为起点,再用蒙特卡洛(含成本)校验,见自助法与蒙特卡洛。

OU 参数会随时间漂移:θ\theta 变小(回归变慢)或 μ\mu 漂移(均衡移动)都意味着配对关系在退化。监控:

  • 滚动窗口(如 60 日)重估参数,半衰期超过上限即踢出池;
  • μ\mu 的漂移速度本身是配对质量的一部分,见协整与价差构造。
  • 半衰期长于一个月的价差不入池;
  • 阈值由 OU 参数与成本共同决定,滚动更新;
  • 时间止损:3∼53 \sim 5 倍半衰期未回归即离场。
  • 半衰期长于一个月的价差通常不值得做
  • 入场阈值应随波动率与成本调整,而非固定 2σ
  • OU 假设下可解析求解最优阈值(Bertram 2010)