- Published on
Fast Fourier Transform (FFT) Filter
- Authors

- Name
- CoresightQuant
NOTE
本文为公开交易策略的技战术复盘,聚焦方法逻辑、交易场景与风险边界。
在技术分析领域,价格序列的平滑与降噪一直是交易者关注的核心问题。从简单移动平均到更复杂的自适应滤波器,每一种方法都在试图从市场噪声中提取有效的周期信息。而快速傅里叶变换(FFT)滤波器提供了一种截然不同的思路——它不直接在时间域上做平均,而是将价格分解为不同频率的周期成分,再通过调整频率权重实现滤波。这种"频域滤波"的方法,能够在保留主周期特征的同时有效抑制噪声,为趋势跟踪和均值回归策略提供独特视角。
本文基于公开交易社区中作者tbtkg发布的策略脚本信息,深入解析该指标的逻辑、使用方法与实战价值,并延伸讨论其背后的数学原理与适用边界。
策略解读
作者tbtkg在公开交易社区发布的这款FFT滤波器,是一种基于频域分析的信号处理工具。它并不像移动平均线那样直接对价格取算术平均,而是借助傅里叶变换这一数学工具,将过去一段时间的价格走势拆解成若干个具有不同频率、振幅和相位的正弦波成分。这就像把一首乐曲分拆成不同音高的音符,然后你可以选择保留低音部分、剔除高音部分,或者只保留某些特定的音阶,最后再重新合成一首经过改编的乐曲。
该脚本的核心参数有两个:Source(数据源) 和 Length(长度)。其中,Source定义了输入序列,通常可以是收盘价、开盘价或最高价等,它决定了滤波对象的价格基准。Length则表示构造滤波窗口所使用的历史K线数量,例如设置为128或256个周期,这个数值决定了一次FFT变换所覆盖的时间范围。窗口越长,所能够分辨的最低频率就越低,意味着可以捕捉到更长的市场周期,但同时也会带来更大的计算量和更明显的滞后效应。
实际使用时,交易者需要根据所分析品种的周期性特征来调整Length。例如,外汇市场常存在明显的4小时或日线周期,而股票市场则可能呈现周线和月线的长期波动。通过合理设置窗口,FFT滤波器能够将价格序列中占据主导地位的周期成分提取出来,生成一条比原始价格更加平滑、且保留了关键转折特征的曲线。
从应用角度而言,这条滤波曲线可以充当一种"动态支撑/阻力"或者"趋势指示器"。当实际价格从下方穿越滤波曲线时,被视为看涨信号;反之,从上方穿越则视为看跌信号。也可以将滤波曲线的斜率作为判断趋势方向的依据,斜率向上时做多,向下时做空。
名词解释
-
快速傅里叶变换(FFT):一种高效计算离散傅里叶变换(DFT)的算法。傅里叶变换能够将一个时间域上的信号分解为若干不同频率的正弦波之和,而FFT通过巧妙的蝶形运算将计算复杂度从O(N²)降低到O(N log N),使得实时处理大量数据成为可能。在金融中,FFT被用来识别价格时间序列中的隐藏周期。
-
频率分量:指信号中包含的各个正弦波成分,每个分量有特定的频率、振幅和相位。例如,一个30日周期的波动频率为1/30(每日)。FFT滤波器通过修改各分量的权重,达到保留或衰减特定频率的目的。
-
逆傅里叶变换(IFFT):与FFT相反,它把频域中的各个频率分量合成为时域信号。在滤波器流程中,先利用FFT获得频域表示,在修改频率成分后,再通过IFFT重新生成价格曲线。
-
截止频率:在滤波器设计中,截止频率是区分通过与衰减的频率边界。例如低通滤波器允许低于截止频率的成分通过,抑制高于该频率的噪声。在FFT滤波器中,通过将高于截止频率的幅度置零,实现去除高频波动的效果。
-
频谱泄漏:当截取的有限长度时间窗口不包含信号的整周期个数时,频谱会扩展到相邻频率,产生拖尾现象,称为频谱泄漏。加窗函数(如汉宁窗)可以缓解该问题。
-
边界效应:因为在窗口边缘附近,可用于计算的数据点很少,滤波结果容易出现异常波动。对交易者来说,最新的K线往往位于窗口最右侧,因此滤波曲线末端可能受边界效应影响,需要结合其他方法处理。
策略思路讲解
FFT滤波器的交易策略并不是直接根据滤波曲线的绝对值进行买卖,而是利用它来识别市场的周期性结构。完整的策略逻辑可以概括为以下几个步骤:
-
构建输入序列:从交易图表选取一个数据源,通常是收盘价,并确定一个固定的回看窗口长度N。N通常是2的幂次,比如64、128、256,以满足FFT算法的效率要求。
-
执行FFT变换:将最近N个价格数据点作为一个离散时间序列,通过FFT得到对应的频谱。频谱中每个频率成分的模长反映了该频率在原始序列中的能量大小,也就是该周期波动的强度。
-
频域滤波:根据策略需求,决定保留或剔除哪些频率成分。常见的做法包括:
- 低通滤波:只保留低于某个截止频率的成分(即周期较长的波动),去掉高频噪声。
- 带通滤波:保留特定频带内的成分,用于捕捉某个已知的市场周期(如20日、60日)。
- 截断谐波:只保留前K个幅度最大的频率分量,忽略能量微弱的成分。
-
逆变换重建信号:对修改后的频谱执行IFFT,得到一条平滑的滤波曲线S(t)。这条曲线代表原始价格中占主导地位的周期信号,其形状比原始价格清晰得多,且没有因移动平均导致的相位滞后(因为FFT变换是线性且零相位的,如果在频域对称修改)。
-
生成交易信号:
- 穿越信号:当价格自下而上穿越S(t)时,视为多头启动;自上而下穿越时,视为空头启动。
- 趋势信号:当S(t)向上倾斜时只持有多头仓位,倾斜向下时只持有空头仓位。
- 均值回归信号:当价格偏离S(t)超过一定阈值时,视为超买或超卖,可进行反向交易。
举例来说,如果当前品种存在明显的5日(高频)和40日(低频)混合周期,而交易者希望专注于40日的主周期,则可以通过低通滤波将5日附近的高频成分衰减掉,得到一条反映中期趋势的曲线。在此基础上,等待价格回踩该曲线并企稳时买入,或跌破该曲线时卖出,即可形成一套完整的趋势跟踪策略。
需要注意的是,FFT滤波的质量高度依赖于窗口长度N。N过小则频率分辨率不足,无法区分相邻频率;N过大则包含过多历史数据,导致滤波结果对当前价格变化反应迟钝。因此,策略设计时通常需要先通过功率谱分析,观察历史数据中哪些频率的功率最大,然后针对性地设置N和截止频率。
优点
-
零相位延迟:与大多数移动平均类指标相比,FFT滤波在理论上是零相位的。即滤波曲线的形状完美保留了原始序列中保留频带的相位特征,不会像简单移动平均那样产生固定的滞后,这对于判断转折点非常有利。
-
强大的周期分离能力:FFT能够将不同周期的波动精确分离,交易者可以只保留关心的周期成分,剔除不相关的噪声和短周期波动,从而获得更纯粹的趋势信号。
-
参数灵活,可定制化:除了窗口长度和数据源,还可以通过设置保留频率的数量或截止频率来控制滤波的"光滑程度"。这种多维度的自由度让该工具可以适配不同品种和不同交易风格。
-
适合研究市场周期特征:通过观察FFT变换后的频谱,交易者可以直观地看到哪些周期在历史中占主导,有助于了解品种的波动规律,为品种选择和时间框架设置提供依据。
缺点
-
计算开销较大:每次K线收盘后,都需要对N个数据点进行一次完整的FFT运算。虽然现代计算机可以轻松处理,但在低延迟环境中,频繁计算可能成为瓶颈,尤其是当N很大且在多个品种上运行时。
-
边界效应显著:FFT假设信号是周期性的,但实际价格并非严格周期。窗口两端的滤波结果严重失真,而交易者最关心的恰恰是最新价格附近的数值,这可能导致信号在关键时刻不可靠。
-
参数高度敏感、易过拟合:窗口长度N和滤波频率的选择对输出曲线形状影响极大。同一段历史数据可以通过不同参数组合生成截然不同的信号,交易者很容易在优化中陷入过拟合,导致实盘表现不佳。
-
对非平稳时间序列适应性差:金融市场的周期结构随时间变化,而FFT滤波器针对整个窗口使用固定的频率权重,无法自动适应市场状态的变化。当市场从趋势转为震荡或反之,滤波效果会大打折扣。
-
因窗口重复计算导致信号闪烁:由于每次新数据到来都会基于新窗口重新计算FFT,滤波曲线在窗口末端附近的数值可能与之前计算结果差异较大,引起交易信号的不稳定,出现频繁开平仓。
起源年份考证
关于"使用傅里叶变换分析金融时间序列"这一类方法的起源,可考证的时间线大致如下:
- 1965年:库利(James Cooley)和图基(John Tukey)发表了著名的FFT算法,将离散傅里叶变换的计算复杂度大幅降低,使得频域分析能够应用于工程和科学各领域。
- 20世纪70年代:经济学家开始利用傅里叶变换(或频谱分析)研究宏观经济与商业周期的波动特征,例如对工业产值、失业率等指标的周期成分进行估计。
- 1980年代~1990年代:随着个人电脑和交易软件的普及,技术分析师开始将频谱分析引入金融图表分析,出现了基于FFT的价格平滑预测工具。这一时期,一些交易软件开始内置FFT滤波器功能。
- 2000年代以后:互联网交易社区逐渐兴起,许多独立开发者上传了各类FFT指标的实现,交易者可以方便地将其用于实时图表。作者tbtkg发布的这一版FFT滤波器,属于该时期社区实践中的一员。
需要说明的是,以上时间线针对的是"该类型方法(FFT在金融时间序列分析中的应用)"的考证结果,而并非指tbtkg个人脚本的具体发布时间,后者目前无从考证。
改进建议
-
引入窗函数以抑制频谱泄漏:在FFT之前对输入序列施加汉宁窗、海明窗或布莱克曼窗,可以显著减少因截断引起的泄漏效应,使频率分量更加集中,从而提高滤波曲线的平滑度和稳定性。
-
自适应窗口长度:不必固定N,而是根据市场波动状态动态调整。例如当价格波动率上升时缩短窗口,使其更快响应;在低波动时延长窗口,以捕捉更长周期。
-
基于功率谱自动识别主周期:在实际使用中,可以计算最近一段时间的频谱功率分布,自动找出能量最高的几个频率分量,然后只保留这些分量做重构。这样便无需人工设定截止频率,更加适应市场变化。
-
对数据进行去趋势或去均值预处理:由于FFT要求信号平稳,直接对价格序列做FFT会因趋势项产生巨大低频分量,压制其他周期信号。建议先对价格做一阶差分或减去线性回归趋势,再进行频域滤波,最后还原趋势,可以有效提升滤波精度。
-
与因果滤波器结合使用以解决边界问题:对于最新数据附近的边界效应,可以结合指数移动平均(EMA)或卡尔曼滤波器,用后者的实时估计对FFT滤波曲线末端进行校准。例如,使用过去N/2个点的数据进行FFT,仅提取中间部分的滤波结果,而把当前信号交给其他因果滤波器处理。
-
设计信号确认机制:为了避免信号闪烁,可以要求价格连续两到三根K线位于滤波曲线同侧时才触发交易,或者加入ATR止损过滤器,防止在滤波曲线走平时频繁交易。
-
组合多窗口FFT:分别使用短、中、长三个窗口的FFT滤波器,并将它们的斜率或位置关系作为综合信号。例如当短周期FFT上穿长周期FFT时做多,类似均线交叉,但利用了频域滤波的零相位特性,可能更为精准。
总结
快速傅里叶变换滤波器将价格分析从时间域带入频率域,为交易者提供了一种全新的周期识别手段。它能够精确地分离不同时间尺度的波动,并在理论上实现无滞后的平滑滤波,从而辅助趋势判断和转折点捕捉。然而,这种技术也并非万能,它的效果严重依赖于参数选择和市场环境的平稳性,边界效应与非平稳适应性问题不容忽视。交易者在应用时,应当将其视作一种分析工具而非圣杯,结合其他指标、严格的风险管理与回测验证,方能发挥其真正的价值。深入理解FFT背后的数理逻辑,将有助于你在复杂多变的市场中,以更清晰的视角看懂价格行为背后的"周期之音"。