时间序列的频域表示:功率谱(基础篇)
📘

时间序列的频域表示:功率谱(基础篇)

第 1/3 篇

◍ 用功率谱把价格序列拆成频率

把一段外汇或贵金属的报价序列直接看 K 线,只能看到时域里的起伏;换到频域,就能知道哪些周期的波动在主导行情。功率谱(Periodogram)就是最直白的工具:它把序列的平方幅值按频率摊开,哪根频率柱高,说明对应周期的成分能量强。 在 MT5 里做这件事不复杂,核心是先去掉序列的均值(去趋势),再做离散傅里叶变换并取模平方。下面这段 MQL5 给出一个最小可跑的功率谱计算骨架,复制进脚本就能对当前图表品种的历史收盘价跑一遍。 外汇与贵金属杠杆高、跳空频繁,频域里看到的‘主周期’只是历史样本的统计倾向,换时间段可能漂移,实盘前务必用不同品种不同周期自行验证。

MQL5 / C++
class="type">class="kw">double CloseBuffer[];
CopyClose(_Symbol,_Period,class="num">0,Bars(_Symbol,_Period),CloseBuffer);
class="type">class="kw">double mean=class="num">0;
for(class="type">int i=class="num">0;i<ArraySize(CloseBuffer);i++) mean+=CloseBuffer[i];
mean/=ArraySize(CloseBuffer);
for(class="type">int i=class="num">0;i<ArraySize(CloseBuffer);i++) CloseBuffer[i]-=mean;
complex c[];
FFT(CloseBuffer,c);
class="type">class="kw">double ps[];
for(class="type">int i=class="num">0;i<ArraySize(c);i++) ps[i]=Re(c[i])*Re(c[i])+Im(c[i])*Im(c[i]);

把报价从时域搬进频域看

MT5 图表上那一根根报价,本质是沿时间轴排布的样本,也就是时域信号。但时间维度并非观察序列的唯一角度,换到频域往往能挖出时域里不显眼的结构。 本文用离散傅里叶变换(DFT)把价格序列拆成不同频率分量,重点看功率谱——它能告诉我们哪段周期在主导行情。外汇与贵金属波动受多周期叠加,这类品种杠杆高、跳空频繁,频域结论只代表历史样本的概率倾向,不能直接当方向押注。 实操上,做 DFT 前要先做去趋势和加窗等预处理,否则低频泄漏会污染谱线。开 MT5 用自定义指标跑一段 DFT,先验证功率谱峰值对应的周期,比盲目看裸 K 更有抓手。

「频域里那条唯一的离散变换」

要把价格序列拆成可量化的频率分量,绕不开离散傅里叶变换(DFT)。它用覆盖整段序列一个周期的正弦波和余弦波作基底,把任意时间序列映射到频域。 DFT 最关键的一点是:同一跨度下,任何时间序列在频域的表示都有唯一定义,不存在两条不同序列映射后长得一样。这意味着你从 MT5 导出的某段 EURUSD 小时线,做 DFT 后得到的频谱是该段数据的硬指纹。 功率谱则是这套变换的延伸视角——它给出各频率上的能量(功率)分布。对交易者来说,这等于告诉你这段行情里,哪些是慢趋势分量、哪些是噪声明细,贵金属与外汇杠杆品种的高波动频段往往对应短期风险放大。

◍ 把行情序列拆成频域分量

要把一段 MT5 上的价格或指标序列送进频域,核心就是离散傅里叶变换(DFT)。公式里每一项都是复数,x 是你在图表上取到的原生数据序列;第 j 项对应一个周期性分量,它在区间内恰好完成 j 次完整往复。 快速傅里叶变换(FFT)只是 DFT 的加速版:它把序列递归对半拆,分别变换两半再合并结果,复杂度从 O(n²) 降到 O(n log n)。在 1 分钟图上取 512 根 K 线做 DFT,朴素算法可能卡顿,FFT 通常能在毫秒级返回。 外汇和贵金属波动受多周期叠加影响,频域里幅值突起的 j 值,往往对应一段真实存在的循环周期;但该周期随时可能失效,高杠杆下误判会造成快速亏损,仅作辅助参考。

从 DFT 绝对值到功率谱的预处理坑

把复数画在笛卡尔平面,x 轴放实部、y 轴放虚部,按毕达哥拉斯定理,某个频率分量的绝对值就是实部平方加虚部平方再开根。由此产生的能量等于该绝对值的平方,功率则是绝对值平方除以时域序列里值数的平方。 但直接拿原始 DFT 去算序列会翻车。DFT 只对有限长度数据段生效,且默认输入信号是周期性的;若实际数值不满足,就会出现频谱泄漏和各类失真。 真实估算某频率功率前,必须先做数据窗口化来缓解这个问题。外汇与贵金属市场高频非平稳,直接裸跑 DFT 功率谱误判概率偏高,开 MT5 验证前请先确认窗口函数已就位。

常见问题

用功率谱把价格序列做离散傅里叶变换后取模平方,按频率画出能量分布,就能看出哪些周期占主导。
未去趋势或去均值会让低频泄漏淹没真实周期,先减均值或做差分再变换,谱形才可信。
可以,小布盯盘的AIGC已内置频域诊断,打开对应品种页就能看到主导周期与功率谱摘要,不用自己写代码。
尖峰表示该频率分量能量高,倾向存在对应周期,但需换窗口长度复算确认,避免采样巧合。
实值行情序列的DFT共轭对称,负频率是镜像,看0到奈奎斯特频率区间即可,功率谱取单边要乘2修正。