Skip to main content

滚动相关性(Rolling Correlation)模块说明文档

1. 功能简介

滚动相关性模块用于计算两个时间序列之间的相关性,并以滑动窗口的形式随时间更新。
常见应用:在实盘或回测中,跟踪“标的收益率变化(und_change)”与“隐含波动率变化(vol_change)”的关系。


2. 输入与输出

  • 输入

    • 两个时间序列 {xt},{yt}\{x_t\}, \{y_t\},按时间顺序排列
      • 示例:xt=und_changet1x_t = \text{und\_change}_{t-1}yt=vol_changet1y_t = \text{vol\_change}_{t-1}
    • 窗口长度 window_size(整数,必须 ≥1)
    • 最小有效样本比例 min_sample_ratio(整数,必须 ≤ window_size)
    • 缺失值处理策略(跳过/传播 NaN)
  • 输出

    • 对每个时点 tt,输出该时点窗口内的相关系数 corr_t
    • 若有效样本数 < window_size*min_sample_ratio(向下取整),则输出 NaN(处于 warm-up 阶段)

3. 状态管理

滚动相关性是一个 滑动窗口统计量,需要维护以下状态:

  • 窗口内的有效样本对集合 (xi,yi)(x_i,y_i)
  • 窗口的样本和/平方和/交叉乘和:
    • xi, yi, xi2, yi2, xiyi\sum x_i,\ \sum y_i,\ \sum x_i^2,\ \sum y_i^2,\ \sum x_i y_i
  • 当前有效样本数 n_eff

这些统计量支持增量更新

  • 加入新样本 (xt,yt)(x_t,y_t)
  • 移除过期样本 (xtw,ytw)(x_{t-w},y_{t-w})
  • 在线更新上述和与平方和,避免重复遍历整个窗口

4. 计算流程

  1. 接收新样本对 (xt,yt)(x_t,y_t)

    • 如果其中一方缺失:
      • Propagate:本时点输出 NaN。
  2. 加入窗口并更新统计量

    • (xt,yt)(x_t,y_t) 添加到滑窗末尾
    • 更新和/平方和/交叉乘和
    • 若窗口长度超过 window_size,移除最早的样本并同步更新统计量
  3. 检查有效样本数 n_eff

    • n_eff < min_samples → 输出 NaN(warm-up 阶段)
    • 否则进入相关性计算
  4. 计算相关系数
    在窗口内:

    ρ=(xixˉ)(yiyˉ)(xixˉ)2(yiyˉ)2\rho = \frac{\sum (x_i - \bar{x})(y_i - \bar{y})}{\sqrt{\sum (x_i - \bar{x})^2 \cdot \sum (y_i - \bar{y})^2}}

    其中:

    • xˉ=xi/n\bar{x} = \sum x_i / n
    • yˉ=yi/n\bar{y} = \sum y_i / n
  5. 输出结果

    • 返回当前时点的相关性 ρt\rho_t
    • 存入结果序列,以便下游模块使用(如信号判定)

5. 特点与边界条件

  • 窗口独立性:不同到期日(expiration)可各自维护独立的滚动相关性,不会交叉污染。
  • warm-up 阶段:若不足 min_samples,输出 NaN;一旦达标,持续输出。
  • 缺失值:本策略使用Propagate方法处理。
  • 效率
    • 时间复杂度:O(1)(每步只更新增量和移除过期项)
    • 空间复杂度:O(window_size)(需存储窗口内样本或统计量)
  • 稳定性:在 xxyy 方方差为零时(窗口内全相同),输出 NaN,避免除零。
  • 跨日恢复
    • 可落地保存窗口内容或统计量快照;
    • 开盘时从快照恢复,拼接昨日尾部数据,避免冷启动。