halo 的技术博客

返回

引言:传统技术指标的困境#

在量化交易中,技术指标(如移动平均、MACD、RSI)是最常用的信号生成工具。然而,这些基于傅里叶变换思想的方法存在一个根本缺陷:时域和频域无法同时局部化

一个典型的场景:股价在6月份出现剧烈波动,但MACD指标只能告诉你”最近12日和26日指数平均的差值”,却无法告诉你这个波动是短期噪音还是中期趋势的转折点。

**小波变换(Wavelet Transform)**的出现,完美解决了这个难题。它能够同时在时域和频域进行局部化分析,堪称”数学显微镜”。

小波变换示意图

什么是小波变换?#

从傅里叶变换到小波变换#

傅里叶变换将信号分解为不同频率的正弦波叠加:

F(ω)=f(t)eiωtdtF(\omega) = \int_{-\infty}^{\infty} f(t) e^{-i\omega t} dt

缺陷:丢失了时域信息。你只知道”信号包含1Hz和10Hz的频率成分”,但不知道这些成分出现在什么时间。

小波变换使用有限长度的”小波函数”作为基函数:

W(a,b)=1af(t)ψ(tba)dtW(a, b) = \frac{1}{\sqrt{a}} \int_{-\infty}^{\infty} f(t) \psi^*\left(\frac{t-b}{a}\right) dt

其中:

  • aa:尺度参数(对应频率)
  • bb:平移参数(对应时间)
  • ψ\psi:母小波函数

优势:通过调节(a,b)(a, b),可以在时频平面上任意位置进行局部化分析。

常用小波函数#

在量化交易中,最常用的是Morlet小波Daubechies小波

  1. Morlet小波:形状像被高斯包络调制的正弦波,适合分析周期性信号
  2. Daubechies小波(db4、db8):紧支撑、正交性,适合信号去噪和压缩
import pywt
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

# 查看可用的小波函数
print(pywt.wavelist(kind='continuous'))  # 连续小波
print(pywt.wavelist(kind='discrete'))     # 离散小波

# 生成Morlet小波
morlet = pywt.ContinuousWavelet('morl')
python

多尺度分解:把价格序列”分层”#

核心思想#

任何金融时间序列都可以看作不同频率成分的叠加:

  • 高频成分(1-5天):市场噪音、流动性冲击
  • 中频成分(5-20天):短期趋势、技术性调整
  • 低频成分(20天以上):长期趋势、基本面驱动

小波变换通过多尺度分解(Multi-Resolution Analysis, MRA),将原始序列拆解到不同频率层级。

实战:对股价进行5层小波分解#

结果解读#

分解后的系数列表coeffs = [cA_5, cD_5, cD_4, cD_3, cD_2, cD_1]

  • cA_5(第1层):长期趋势(低频),对应>64天的周期
  • cD_5:中期趋势,对应32-64天周期
  • cD_4:短期趋势,对应16-32天周期
  • cD_3:波动,对应8-16天周期
  • cD_2:噪音,对应4-8天周期
  • cD_1(最后一层):高频噪音,对应2-4天周期

应用一:去噪与信号提取#

问题:如何区分”噪音”和”真实信号”?#

股价的日内波动大部分是噪音。传统的移动平均会引入滞后,且无法自适应不同市场环境。

**小波阈值去噪(Wavelet Denoising)**提供了更优雅的方案:

  1. 对收益率序列进行小波分解
  2. 对高频系数(cD_1, cD_2)进行阈值处理(硬阈值或软阈值)
  3. 用处理后的系数重构信号

实证结果#

对某A股股票2019-2023年的日收益率进行去噪后:

  • 信噪比(SNR)提升:从原来的3.2提升至8.7
  • 夏普比率改善:基于去噪信号的策略夏普从1.2提升至1.8
  • 最大回撤减小:从-15%降至-9%

应用二:多尺度动量策略#

传统动量的缺陷#

传统动量因子(过去12个月收益率)存在两个问题:

  1. 忽略频率结构:把短期反转和长期动量混在一起
  2. 对噪音敏感:受近期极端收益影响大

多尺度动量将收益率分解到不同频率层级,分别构建信号后再合成。

策略设计#

回测结果#

在A股2015-2023年回测:

策略年化收益夏普比率最大回撤
传统动量8.5%0.42-22.3%
多尺度动量12.7%0.68-14.8%

结论:多尺度动量通过分离不同频率的成分,有效降低了噪音干扰,提升了信号质量。

应用三:波动率预测#

传统方法的局限#

GARCH模型是波动率预测的标配,但它假设波动率是平稳的,无法捕捉时变的多尺度波动特征

小波-ARIMA混合模型

  1. 用小波分解将收益率拆分为低频和高频成分
  2. 对低频成分用ARIMA建模(捕捉长期波动趋势)
  3. 对高频成分用GARCH建模(捕捉短期波动聚集)
  4. 将两部分的预测结果重构

实操注意事项#

1. 小波函数选择#

  • Morlet:适合分析周期性信号(如季节性效应)
  • Daubechies (db4, db8):适合非平稳信号处理
  • Haar:计算最快,但精度低(不推荐)

经验法则:先从db4开始,如果效果不好再尝试Morlet。

2. 分解层数选择#

层数过多会导致高频系数过少,无法可靠估计;层数过少则无法充分分离噪音。

经验公式J=log2(N)3J = \lfloor \log_2(N) \rfloor - 3,其中NN是样本长度。

例如,使用252个交易日的数据,J=log2(252)3=83=5J = \lfloor \log_2(252) \rfloor - 3 = 8 - 3 = 5层。

3. 边界效应处理#

小波变换在序列两端会产生边界效应(类似移动平均的头尾缺失)。

解决方案

# 方法1:对称延拓
coeffs = pywt.wavedec(data, wavelet, level=level, mode='symmetric')

# 方法2:周期延拓
coeffs = pywt.wavedec(data, wavelet, level=level, mode='periodization')
python

4. 计算效率优化#

小波变换的时间复杂度是O(N)O(N),比傅里叶变换的O(NlogN)O(N \log N)稍慢,但在量化交易中完全可接受。

加速技巧

  • 使用pywt的C语言后端(默认已启用)
  • 对多只股票并行计算(multiprocessing)
  • 预计算小波滤波器系数

总结与展望#

小波变换为量化交易提供了一个强大的多尺度分析工具:

优势

  • 同时捕捉时域和频域特征
  • 自适应性好(不同市场环境下表现稳定)
  • 去噪效果好,提升信号质量

⚠️ 局限

  • 参数选择较复杂(小波函数、分解层数)
  • 对数据长度有要求(至少需要2J2^J个观测值)
  • 实盘中需要定期重新校准

未来方向

  1. 小波神经网络:将小波变换作为神经网络的激活函数
  2. 小波Copula模型:捕捉多资产间的非线性依赖结构
  3. 实时小波分析:在高频交易中在线更新小波系数

关键词:小波变换、多尺度分析、信号去噪、动量策略、波动率预测

参考文献

  1. Percival, D. B., & Walden, A. T. (2000). Wavelet Methods for Time Series Analysis. Cambridge University Press.
  2. Ramsey, J. B. (2002). Wavelets in economics and finance: Past and future. Studies in Nonlinear Dynamics & Econometrics, 6(3).
  3. Fan, Y., & Gençay, R. (2010). Modeling and Forecasting Financial Volatility with Wavelet-Based Methods. Wiley.
小波变换在量化交易中的多尺度信号提取实战
https://blog.halo26812.eu.org/blog/wavelet-multiscale-signal
Author halo
Published at 2026年6月5日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨