滚动相关性(Rolling Correlation)模块说明文档
1. 功能简介
滚动相关性模块用于计算两个时间序列之间的相关性,并以滑动窗口的形式随时间更新。
常见应用:在实盘或回测中,跟踪“标的收益率变化(und_change)”与“隐含波动率变化(vol_change)”的关系。
2. 输入与输出
-
输入
- 两个时间序列 ,按时间顺序排列
- 示例:,
- 窗口长度
window_size(整数,必须 ≥1) - 最小有效样本比例
min_sample_ratio(整数,必须 ≤ window_size) - 缺失值处理策略(跳过/传播 NaN)
- 两个时间序列 ,按时间顺序排列
-
输出
- 对每个时点 ,输出该时点窗口内的相关系数
corr_t - 若有效样本数 <
window_size*min_sample_ratio(向下取整),则输出 NaN(处于 warm-up 阶段)
- 对每个时点 ,输出该时点窗口内的相关系数
3. 状态管理
滚动相关性是一个 滑动窗口统计量,需要维护以下状态:
- 窗口内的有效样本对集合
- 窗口的样本和/平方和/交叉乘和:
- 当前有效样本数
n_eff
这些统计量支持增量更新:
- 加入新样本
- 移除过期样本
- 在线更新上述和与平方和,避免重复遍历整个窗口
4. 计算流程
-
接收新样本对
- 如果其中一方缺失:
- Propagate:本时点输出 NaN。
- 如果其中一方缺失:
-
加入窗口并更新统计量
- 将 添加到滑窗末尾
- 更新和/平方和/交叉乘和
- 若窗口长度超过
window_size,移除最早的样本并同步更新统计量
-
检查有效样本数
n_eff- 若
n_eff < min_samples→ 输出 NaN(warm-up 阶段) - 否则进入相关性计算
- 若
-
计算相关系数
在窗口内:其中:
-
输出结果
- 返回当前时点的相关性
- 存入结果序列,以便下游模块使用(如信号判定)
5. 特点与边界条件
- 窗口独立性:不同到期日(expiration)可各自维护独立的滚动相关性,不会交叉污染。
- warm-up 阶段:若不足
min_samples,输出 NaN;一旦达标,持续输出。 - 缺失值:本策略使用Propagate方法处理。
- 效率:
- 时间复杂度:O(1)(每步只更新增量和移除过期项)
- 空间复杂度:O(window_size)(需存储窗口内样本或统计量)
- 稳定性:在 或 方方差为零时(窗口内全相同),输出 NaN,避免除零。
- 跨日恢复:
- 可落地保存窗口内容或统计量快照;
- 开盘时从快照恢复,拼接昨日尾部数据,避免冷启动。