第 4 章 · 03 卡尔曼滤波与小波去噪 本节摘要:本节讲两种「信号处理」手段,用来从噪声大的价格序列里提取干净信号。原项目 用 PyKalman 与 PyWavelets 两个库,演示了卡尔曼滤波如何动态估计「真实价格」、并与移动平均对比;以及小波变换如何把价格分解成多尺度成分再重构,实现去噪。卡尔曼滤波在第 9 章还会用于配对交易。读完本节,你能理解卡尔曼滤波的「预测-更新」循环与小波变换的「分解-重构」机制,并在 Python 中把它们应用于价格序列。 内容来源:原项目 ,汉化并套用体系化模板。 ⚠️ 学习提示:滤波与去噪是「双刃剑」——用过头会让信号滞后或丢失,回测看着漂亮实盘失真;务必对比「滤波前 vs 滤波后」的统计性质,不要盲目相信平滑后的曲线。
本节摘要:本节讲两种「信号处理」手段,用来从噪声大的价格序列里提取干净信号。原项目
04_alpha_factor_research/03_kalman_filter_and_wavelets.ipynb用 PyKalman 与 PyWavelets 两个库,演示了卡尔曼滤波如何动态估计「真实价格」、并与移动平均对比;以及小波变换如何把价格分解成多尺度成分再重构,实现去噪。卡尔曼滤波在第 9 章还会用于配对交易。读完本节,你能理解卡尔曼滤波的「预测-更新」循环与小波变换的「分解-重构」机制,并在 Python 中把它们应用于价格序列。
内容来源:原项目
04_alpha_factor_research/03_kalman_filter_and_wavelets.ipynb,汉化并套用体系化模板。
⚠️ 学习提示:滤波与去噪是「双刃剑」——用过头会让信号滞后或丢失,回测看着漂亮实盘失真;务必对比「滤波前 vs 滤波后」的统计性质,不要盲目相信平滑后的曲线。
阅读完本节,你应当能够:
pykalman 配置并估计价格序列的隐状态。pywt 对 S&P 500 序列做小波平滑。金融价格序列噪声极大——bid-ask bounce、突发成交、流动性变化都会让真实价格趋势被掩盖。直接用原始价格做信号,信噪比低;但用简单移动平均(SMA)又有一个老问题:滞后——均线必然落后于真实价格,信号触发时已经晚了。
两种「更聪明」的平滑方法:
| 方法 | 核心思想 | 优势 |
|---|---|---|
| 卡尔曼滤波 | 用状态空间模型动态估计隐状态 | 自适应、滞后小 |
| 小波变换 | 把信号分解到不同尺度再重构 | 多尺度、保边缘 |
卡尔曼滤波假设系统有一个隐状态(真实价格),我们只能观测到带噪声的价格。它通过两个方程描述:
w)。v)。每个时刻执行两步:
💡 核心心法:卡尔曼滤波的本质是「用不确定的模型预测 + 用不确定的观测修正」,两者按各自的方差加权融合。模型越准,越信预测;观测越准,越信测量。这种自适应加权是它优于固定窗口均值的根本原因。
notebook 用 PyKalman 库,关键配置:
from pykalman import KalmanFilter # 构造滤波器 kf = KalmanFilter(transition_matrices=[1], # 状态转移(假设真实价格近似随机游走) observation_matrices=[1], # 观测矩阵(直接观测) initial_state_mean=0, initial_state_covariance=1, observation_covariance=1, transition_covariance=0.01) # 估计隐状态 state_means, _ = kf.filter(price_series)
关键超参:
| 参数 | 含义 | 调参方向 |
|---|---|---|
observation_covariance |
观测噪声越大,越信模型预测 | 大 → 平滑但滞后 |
transition_covariance |
过程噪声越大,越信观测 | 大 → 跟随快但噪声多 |
两者权衡决定滤波器的「响应速度 vs 平滑度」。
notebook 把卡尔曼滤波结果与简单移动平均对比,关键差异:
💡 核心心法:SMA 是「用过去 N 天的平均」,本质是滞后滤波器;卡尔曼滤波是「用模型预测 + 当前观测的加权」,能动态调整权重。在趋势转折点,卡尔曼的响应明显快于 SMA——这对配对交易(第 9 章)等对时点敏感的策略至关重要。
小波变换把信号分解到不同时间尺度(频率)上,每个尺度对应不同的细节层次。与傅里叶变换相比,小波保留时域局部性——能告诉你「这个频率成分出现在哪个时刻」。
notebook 列出了 PyWavelets 支持的小波族:
import pywt print(pywt.families()) # ['haar', 'db', 'sym', 'coif', 'bior', ...]
| 小波族 | 特点 | 常用场景 |
|---|---|---|
haar |
最简单,方波 | 离散信号 |
db(Daubechies) |
紧支撑,正交 | 通用 |
sym(Symlets) |
近对称 | 金融时序常用 |
coif(Coiflets) |
更高消失矩 | 平滑信号 |
notebook 用小波对 S&P 500 日频序列做平滑:
result = pywt.swt(price, 'db2', level=4, trim_length=1) # 把高频细节系数阈值化(置零),再用逆变换重构
去噪的核心思想:把信号分解后,高频细节系数往往主要是噪声,对其做阈值化(soft/hard thresholding)再重构,就能在保留趋势的同时去掉抖动。
⚠️ 警告:小波去噪对阈值与分解层数极敏感——阈值太高会丢信号,太低保留噪声。务必用滚动/样本外验证,不要在回测期内调参。
| 用法 | 章节 |
|---|---|
| 价格提纯后作为 ML 特征 | 第 4 章 |
| 配对交易的价差均值跟踪 | 第 9 章 贝叶斯 |
| 因子收益的去噪 | 第 5 章 Alphalens |
滤波/去噪本身不产生 alpha,但它能提高后续所有步骤的信噪比,是上游的「水质净化器」。
observation_covariance 越大越平滑;transition_covariance 越大越跟随。db/sym,层数与阈值要样本外调。下一节,我们看 Alphalens 因子评估 IC——构造完因子后,怎么系统评估它的预测力?