平滑带噪序列并找出节奏
滤波器通过把每个值与邻近的值混合,把一个序列变成另一个序列。N 日移动平均是最简单的滤波器:每个输出是最近 N 个输入的平均,噪声减小,但输出也会滞后。指数移动平均(EMA)给近期的日子更大权重:yt=αxt+(1−α)yt−1,其中 α=2/(N+1) 是平滑权重。signal.lfilter(b, a, x) 只用过去和当前的值在序列上运行这样的滤波器。EMA 的平均滞后为 (1−α)/α 天,N 日移动平均的滞后为 (N−1)/2 天,所以 19 日平均和 α=0.1 的 EMA 都滞后约 9 天。
第二项任务是找周期。signal.periodogram(x) 把序列的方差分配到各个频率上,频率以每天的周期数计。频率 f 处的峰值表示周期为 1/f 天的重复模式。每天一个观测时,只能看到不超过每天 0.5 个周期的频率,即奈奎斯特极限,因为更快的周期无法与更慢的周期区分。有一个对交易极其重要的警告:signal.filtfilt 先正向再反向运行滤波器,消除了滞后,但每个输出因此使用了未来的值。用 filtfilt 构造的信号在回测中看起来完美,却无法交易,因为明天的数据今天还拿不到。凡是打算交易的东西,只能用 lfilter 这类因果滤波器。
yt=αxt+(1−α)yt−1,α=N+12,lag=α1−α (moving average: 2N−1),period=f1(1) 三个数和一个周期取序列
10,12,11,
α=0.5,EMA 从第一个值开始。则
y0=10,
y1=0.5⋅12+0.5⋅10=11,
y2=0.5⋅11+0.5⋅11=11。
10,12,11,13 的 3 日移动平均先得
11 再得
12。19 日窗口意味着
α=2/20=0.1,滞后
(1−0.1)/0.1=9 天。每天重复
0.05 次的纯周期,周期为
1/0.05=20 天,周期图恰好在那里出现峰值。在真实数据上,SPY 日收益的一阶自相关只有
−0.10,但其平方在滞后 1 为
0.27,滞后 5 为
0.30:大波动日之后还是大波动日,这就是波动率聚集。用权重
α=0.06(RiskMetrics 的
λ=0.94)对收益平方做 EMA,2026 年 8 月 21 日为每天
0.75%(年化
11.9%),远低于全样本的
1.20%。这正是对过去做慢速平均、不看未来所能告诉你的信息。
- 平滑要付出滞后的代价:窗口越长或 α 越小,噪声去得越多,信号也越滞后。
- 由峰值读周期:频率 f 处的峰值表示 1/f 天的周期,上限为每天 0.5 个周期。
- 交易只用因果滤波器:
filtfilt 使用了未来,只能用于分析,绝不能用于实盘信号。
实验:评分内容
- EMA 一步10 分
- 移动平均10 分
- 窗口对应的权重10 分
- 由频率求周期10 分
- EMA 的滞后10 分
- 各例程的作用15 分
- 为什么 filtfilt 不能用于交易35 分