频域中的滤波和特征提取(基础篇)
◍ 把行情丢进频域做滤波
MT5 里大多数指标都在时域里算,均线、MACD 无非是不同窗口的滑动平均。但价格序列本质是混合信号:低频段是趋势,高频段是噪声与跳空。把报价序列做傅里叶变换,切掉高于某截止频率的分量,再反变换回去,得到的就是一条被‘去噪’的曲线。 这套思路在 2024-08-19 那篇公开示例里被实测过,原文页面显示阅读量 1055,作者 Francis Dube 用 MQL5 直接实现了频域滤波函数。对外汇和贵金属来说,这种处理能压住分钟线上的杂波,但截止频率设错会抹掉真实突破——这类品种杠杆高、滑点猛,频域平滑不等于风险平滑。 想验证很简单:开 MT5 新建一个指标,把收盘价数组做 FFT,滤掉前 20% 高频分量再画回来,和原收盘价叠在一起看。你会发现欧美的 M15 在亚盘窄幅时几乎重合,到美盘数据秒杀时原线刺穿滤波线,那就是被滤掉的真实信息。
把行情丢进频域看滤波
做价格行为的人习惯在时域里数 K 线,但 MT5 里把一段报价做离散傅里叶变换(DFT),能直接拆出周期分量。频域视角的好处是噪声和主周期分得清,缺点是边界泄漏和频域混叠会吃掉短周期信号,样本外容易漂。 本文挑了三类数字滤波器做特征提取:同相、正交、正交镜。同相保留原相位,正交移 90 度抓拐点,正交镜把频带劈成两半降维。三类在 MT5 里都能用 MQL5 直接写,后面给可跑的代码。 外汇和贵金属杠杆高、跳空多,频域滤波只是特征工具,不是信号本身,实盘前务必用历史数据验证周期稳定性。
「把滤波搬进频域怎么玩」
时域里做数字滤波靠的是卷积:一组按滤波器类型和参数生成的唯一权重,在移动窗口内和序列值逐点相乘再求和,移动平均本质也是这套机制。本文换一条路,把序列先丢进频域再做处理,绕开逐点卷积的直观运算。 具体流程是:预处理序列以满足 DFT 输入要求,用快速傅里叶变换(FFT)把它转成频域表示;随后直接操纵频谱波形,相当于在频率维度乘上一组滤波系数;再做逆 DFT 回到时域,并撤销预处理引入的偏移。这和时域卷积在数学上等价,都是序列项乘以滤波器系数。 表面看频域多了好几步,计算开销应该更大,其实未必。处理大型数据集时,FFT 的实际耗时往往低于时域卷积,尤其当你按最佳实践排布内存与变换长度时,加速会很明显。外汇与贵金属行情高频采样下,这种差异可能直接决定策略回测能否跑得动。
◍ 圆角滤波器与高斯函数的频域取舍
滤波器的形状就是它的响应曲线,直接决定在频域里怎么挑频率、怎么压噪声。把操纵函数的输出改一改,响应曲线的弧度就跟着变,这是调滤波器最先碰到的旋钮。 在时间序列分析里,带圆角的滤波器比锐边更受青睐。圆角让频率响应更平滑,分量之间切换时的失真明显更小;而且这类形状基于数学近似,现实里更容易落地,在『分得出有用/无用频率』和『失真够低』之间平衡得更好。 本篇重点用高斯函数做滤波。它的形状在时域更集中,意味着相对于许多其他滤波函数,脉冲持续时间更短、拖尾少。选函数没有免费午餐,应用需求永远排第一:想要时域干净就偏高斯,想要频域边界硬就接受更陡的代价。 外汇与贵金属行情高频噪声重,用圆角滤波可降低假突破触发概率,但任何滤波都不能消除跳空风险,实盘前请在 MT5 用历史数据验证响应延迟。
给滤波器定中心频率和带宽
文中涉及的滤波器都由两个量锁定:中心频率与宽度参数,后者在有些文献里也叫标尺。两者单位都是每抽样点的频率周期,不是时间也不是价格刻度。 中心频率有效区间落在 0 到 0.5 之间,对应奈奎斯特频率以内的一半带宽。超出这个范围滤波器定义就失效,MT5 里若手动算系数也容易溢出。 宽度参数划定通带:以中心频率为轴,上下各延伸一段,这段内的频率成分基本不被衰减。实操里宽度取 0.01 及以上才够稳,太小会让通带过窄、相位失真放大,信号基本被滤没了。 外汇与贵金属波动混杂多频成分,用这类滤波器做频域分离属高风险实验,参数错配可能把真趋势当噪声删掉。