8.3 频谱分析
频谱分析(Spectral Analysis)通过傅里叶变换将时间序列分解为不同频率成分,量化各频率的贡献大小,是识别金融数据中隐藏周期的核心工具。
时域 vs 频域
| 视角 | 横轴 | 观察什么 | 典型问题 |
|---|---|---|---|
| 时域 | 时间 | 价格 如何随时间变化 | 价格是否趋势上涨? |
| 频域 | 频率 | 不同频率成分的幅度 $ | F(\omega) |
核心直觉:任何看似不规则的时间序列都可以看作多个正弦波的叠加,每个正弦波有其特定的频率、幅度和相位。
功率谱密度(Power Spectrum)
功率谱密度(PSD)定义为幅度谱的平方:
它量化了频率 处的能量贡献——PSD 越高的频率,对原始信号的贡献越大。
频谱的直观理解
- 低频(大周期):长期趋势、商业周期(~3-5 年)、宏观因子
- 中频(中等周期):季节性(~1 年)、财报周期(~3 个月)
- 高频(短周期):市场微观结构噪音、做市商报价跳跃
Python 示例:FFT 合成信号分解
python
import numpy as np
# --- 合成信号:两个正弦波 + 噪音 ---
np.random.seed(42)
fs = 1000 # 采样率(**Hz**——赫兹,频率单位,1 Hz = 每秒 1 个周期。1000 Hz = 每秒采集 1000 个数据点)
T = 2 # 信号时长 (秒)
t = np.linspace(0, T, int(fs * T), endpoint=False)
# 两个频率成分
f1, f2 = 5, 50 # Hz
signal = (1.0 * np.sin(2 * np.pi * f1 * t) +
0.5 * np.sin(2 * np.pi * f2 * t))
# 添加噪音
noise = 0.3 * np.random.randn(len(t))
signal_noisy = signal + noise
# --- FFT ---
N = len(signal_noisy)
fft_vals = np.fft.fft(signal_noisy)
fft_freqs = np.fft.fftfreq(N, 1/fs)
# 取正频率部分并计算幅度谱
pos_mask = fft_freqs > 0
freqs = fft_freqs[pos_mask]
amplitude = 2.0 / N * np.abs(fft_vals[pos_mask])
# 找出主导频率
top_idx = np.argsort(amplitude)[-5:] # 前 5 大幅度
print("主导频率分量:")
for idx in top_idx[::-1]:
print(f" 频率 = {freqs[idx]:.2f} Hz, "
f"幅度 = {amplitude[idx]:.4f}")
# --- 输出示例 ---
# 主导频率分量:
# 频率 = 5.00 Hz, 幅度 = 1.0012
# 频率 = 50.00 Hz, 幅度 = 0.5015
# (其余为噪音引起的小幅度杂散频率)关键结论:FFT 准确地恢复了合成信号的两个主导频率(5 Hz 和 50 Hz),幅度也与真实值(1.0 和 0.5)非常接近。在量化金融中,对收益率序列做 FFT 可以自动识别出显著的周期性模式。
Quant Link:识别商业周期频率
对 GDP 增长率或股票指数收益率序列做傅里叶变换,通常会在以下频率处看到尖峰(显著周期):
| 周期 | 对应频率(月) | 可能来源 |
|---|---|---|
| 3-5 年 | - | 经济周期(扩张/收缩) |
| 1 年 | 季节性(销售旺季、税收效应) | |
| 3 个月 | 财报季节效应 | |
| 1 个月 | 月末效应、结算周期 |
实操示例:用 FFT 分析实际收益率
python
import yfinance as yf
# 下载标普 500 日收益率(示例,需联网)
# spx = yf.download('^GSPC', start='2010-01-01')['Adj Close']
# returns = np.diff(np.log(spx.values)) # 对数收益率
#
# N = len(returns)
# fft_ret = np.fft.fft(returns)
# freqs = np.fft.fftfreq(N, d=1) # d=1 表示日频
#
# 正频率幅度
# pos = freqs > 0
# 周期 = 1/freqs[pos] # 以交易日为单位
# 通过观察哪些周期对应的幅度显著异常,可以识别出季度效应、年度效应等重要注意事项
实际应用中,金融收益率序列通常不是平稳的——FFT 仅适用于弱平稳序列。因此常配合差分或Hodrick-Prescott (HP) 滤波(一种将时间序列分解为趋势成分和周期成分的平滑方法,通过选择平滑参数 控制趋势的光滑程度)预处理后再做频谱分析。
频谱插值与缺口填充
在固定收益中,频谱分析法(Spectral Analysis)用于识别债券收益率曲线中的周期模式,帮助填补流动性不足的期限缺口。
Quant Link:Malliavin 和 Mancino (2002) 提出了用傅里叶变换估计已实现协方差的方法——通过对价格增量做傅里叶变换并乘积,可以得到同步且稳健的波动率和协方差估计,避免了 Epps 效应(不同频率采样导致的相关系数低估)。 \n> 下一步:继续学习 8.4 量化金融应用