5.7 从时域到频域:用量化回测的频谱分析拆解策略

📅 2026/7/16 22:06:26
5.7 从时域到频域:用量化回测的频谱分析拆解策略
2020年春天一个在B站做音视频编解码的工程师给我发来一张图。是他过去三年股票账户的净值曲线。那条曲线整体是向上的看起来不错年化收益大概有十几个点。他自己对这个结果也颇为满意觉得自己在选股和择时上确实有一套。然后他做了一件只有工程师才会做的事。他把这三年的日收益率序列导出来用Python调了一个FFT库做了频谱分析。频谱图出来之后他在电话那头沉默了很长时间。那条曲线的频谱上除了零频附近有一个明显的直流分量之外在大概对应一年周期的频率位置有一个极高的尖峰在更高频段几乎全是平坦的噪底。他告诉我那个一年周期的尖峰比噪底高出了将近二十分贝。这意味着什么意味着他过去三年大部分的超额收益不是均匀分布在每一个决策上的而是几乎全部来自他在某一种市场风格——具体说是大盘成长风格——上的持续暴露。那一波大盘成长股的牛市持续了两年多他的策略在那两年多里表现好得让他误以为是自己的选股能力。当风格切换的迹象开始出现时频谱图上其实早就有了预警信号——他全部的超额收益都集中在一个频率分量上而这个分量随时可能衰减。“我感觉我这三年不是在投资”他说“我是把一个信号发生器调到了一个频率上然后运气好那两年市场刚好也在这个频率上共振。”傅里叶变换你的收益β是直流α是特定谱线噪底是运气你过去三年或者五年的投资收益率不管你是用手工记录的Excel还是用券商软件导出的交割单本质上是一个离散时间序列。这个序列里的每一个采样点是你某一天或者某一个月相对于上一个采样点的资产净值变化百分比。你在时域上看这个序列看到的是一条起伏的曲线——有时候涨有时候跌有时候剧烈波动有时候平稳得像心跳停止。但这条曲线在频域里是完全不同的一副面貌。傅里叶变换告诉你任何时间序列都可以被分解成一系列不同频率的正弦波的叠加。每一个频率分量有一个幅度代表这个频率的波动对总波形的贡献有多大。把你的收益序列做傅里叶变换你得到的不再是“去年赚了15%”这种笼统的描述而是一张精确到频率分量占比的频谱图。频谱图最左边接近零频率的那个分量对应的是你的收益序列里最慢变、最持久的那部分趋势。在投资里这个分量就是β——你从市场整体增长里获得的收益。如果你过去几年一直持有宽基指数基金那你的频谱图几乎只有一个直流分量和一堆低幅度的噪底。直流分量占了绝大部分功率说明你的收益来源是市场的长期增长不是择时不是选股不是任何高频操作。这个频谱极其朴素但它在工程上意味着最稳定、最可复现、最不依赖运气的信号结构。如果你的频谱图上在某些特定频率出现了远高于噪底的尖峰——比如在对应一年周期的频率上或者在对应某个特定行业轮动节奏的频率上——那这些尖峰对应的是你的α来源。α不是坏东西拥有正的α意味着你在市场之外创造了超额收益。但频谱分析强迫你面对一个你通常不会主动去思考的问题你的α是在一个频率上还是分布在多个频率上如果它只集中在一个频率那说明你的所有超额收益都来自某一种特定的市场环境或者某一种特定的风格因子。这种环境什么时候结束你根本不知道。它可能已经结束了而你还在重复原来的操作因为你还在时域上盯着那条净值曲线自我感觉良好却不知道曲线的频谱上那个曾经贡献了绝大部分收益的尖峰已经悄无声息地衰减到了噪底以下。噪底本身也包含信息。频谱里那些平坦的、没有明显尖峰的低幅度分量对应的就是你收益序列里无法归因于β也无法归因于任何持续策略的随机波动。这部分功率占你的总功率比例越高说明你的投资业绩里运气的成分越大。今天运气好你在噪底上坐了一趟向上的顺风车。明天运气不好噪底还在方向反了。你如果分不清频谱上哪根是尖峰、哪片是噪底你就会把噪底上的随机起伏也当成自己策略有效性的证据然后在噪底向下的时候陷入自我怀疑。怀疑的不是策略是噪底。但你看不到频谱所以你在怀疑自己。周期识别你的超额收益有没有被风格频率绑架频谱上那个对应一年周期的尖峰不是虚构出来的数学幻影。它背后有真实的市场机制。A股在过去十几年里存在极其显著的大小盘风格轮动和成长价值风格轮动。这些风格的切换周期不是精确的十二个月但在年度频率附近有一个明显的频谱峰值。如果你的策略在过去几年持续跑赢指数频谱上一年周期频率附近有一根不容忽视的尖峰那极高的概率说明你的超额收益主要来自你在某种风格上的持续暴露而不是来自你选出来的每一只个股独立于风格的超额能力。区分这两件事是频谱分析在投资复盘里最核心的价值。同样的超额收益如果是因为你的选股能力分布在多个频率上——有些来自季度级别的基本面判断有些来自年度级别的行业配置有些来自更长期的结构性认知——那它的频谱上会有多个中等幅度的尖峰分散在不同的频率位置。这种频谱结构对应的是真正的选股α它不是赌对了一次风格而是在不同的时间尺度和不同的决策维度上持续做出了超过市场平均的判断。但如果你的超额收益几乎全部集中在某一个频率分量上——你三年的α其实只有那一波核心资产重估那一年多贡献的其他时间你只是和市场同步波动——那你必须重新评估自己是否真的有持续创造α的能力。这件事你不需要找专业的量化团队帮你做。你只需要把你的月收益率序列减去同期市场基准指数的月收益率得到超额收益序列然后对这个序列做一次快速傅里叶变换。任何一个能跑Python的环境几行代码就能把频谱画出来。如果你的超额收益频谱上出现了明显的少数尖峰记下这些尖峰的频率然后回到时域去检查在这些频率对应的那段时间里市场到底发生了什么。你大概率会发现你的超额收益和某种风格因子——大盘成长、小盘价值、新能源、半导体——的爆发周期高度重叠。在这段周期之外的时间你的超额收益曲线几乎是一条在零轴附近随机游走的线。这个发现不会让你赚钱但它会阻止你在风格已经切换之后还反复用原来的策略去抄底。你会在风格尖峰开始衰减的时候从频谱上提前看到信号功率正在从那个频率向别的频率转移而你的策略还死死锁在原来的频率上。避免陷波滤波器心态有些亏损不是故障是系统设计的必然代价在信号处理里陷波滤波器是一个用来滤除某个特定频率干扰的窄带阻滤波器。电力线噪声在50赫兹你就设计一个中心频率精确在50赫兹的陷波器把嗡嗡声滤掉其他频率的信号正常通过。陷波器的带宽极窄只切除干扰频率不伤及邻近的频谱分量。很多工程师在发现自己策略在某些市场环境下持续亏损之后第一反应就是给自己的策略加一个陷波器——把导致亏损的那种行情“精准切除”。“如果每次熊市我的策略都亏那我能不能设计一个信号在熊市开始的时候自动空仓在牛市开始的时候自动满仓”这句话翻译成频域语言就是我能不能设计一个自适应陷波滤波器当市场频率切换到熊市频率时自动激活把熊市频率的成分全部滤掉这是投资里最危险的一种工程学傲慢。陷波器在电路里能工作是因为50赫兹干扰的频率是精确的、稳定的、永远不变的。但市场的“熊市频率”在每一次下跌中都不一样。2008年是金融危机驱动的流动性枯竭2015年是杠杆踩踏2018年是去杠杆叠加贸易战阴跌2022年是全球央行加息潮。它们在频谱上的特征完全不同你不可能提前设计好一个能覆盖所有熊市类型的陷波器。你以为自己加了一个陷波器实际上你在频谱图上随机地挖洞每挖一个洞你不仅滤掉了一些你以为的“熊市噪声”也同时滤掉了那些和熊市频率相近但本质完全不同的“低位建仓信号”。陷波器心态对你的投资系统造成的最大伤害是把“在某些市场环境下必然出现亏损”这个事实当成了一个可以被优化掉的Bug。它不是Bug。它是在你在5.2节设计低通滤波器、在5.5节锁定导频信号的时候就已经被你内置于整个系统通带特性里的带阻区。你在那几节已经接受了你的策略不是为了在所有频率上都赚钱而设计的。你设计的是一个只在你懂的信息差、你等得起的时间窗口、你承受得了的波动幅度这个特定频段内提取信号的系统。在这个频段之外系统输出亏损不是系统坏了是系统正在按照你设计的阻带衰减特性正常工作。一个允许30%误码率的串行链路不会在每次检测到误码的时候就重写整个物理层。它知道这些误码在链路预算里已经预留了裕量。你的心态也应该如此。你应该知道你的策略在什么市场频率上是有效的在什么频率上必然衰减。当衰减发生时你不是去修改滤波器你是去检查仪表——看频谱上衰减的频率是不是你早就写在设计文档里的那个阻带区。如果是继续运行。如果不是出现了你设计文档里没有预先定义的新谱峰或者新陷落那才是在下一季度架构评审上需要深入分析的信号。把收益曲线做一次傅里叶变换需要的不是复杂的数学需要的是一种你愿意面对真相的态度。时域上的曲线会骗你它会让你为一次运气好的共振自我膨胀也会让你为一次设计内的阻带衰减惊慌失措。频谱图不会。它把你策略里每一分每一毫的真实功率来源拆得干干净净摊在你面前。β归βα归α噪声归噪声。这一节结束第五章也就结束了。我们从信号采样的混叠失真一路走到匹配滤波器的模板设计用六节内容把你从一个被市场噪声淹没的裸采工程师变成了一个配备了全套信号处理链路的接收机设计者。但这套接收机能不能在实际运行中稳定工作不仅取决于你处理信号的能力还取决于你怎么选择你要接收的信号来源。下一章我们要把信号处理链路从通用的价格序列聚焦到你最独特的一个信号源上——你作为技术从业者每天浸泡其中的科技行业。你是继续在消费股上用通用滤波器听别人都在听的广播节目还是回到你自己的专业波段上用你在这一章搭建的信号处理体系接收那些只有你这个频率范围内才能解调的信号这是第六章要回答的问题。