第3章:金融时间序列基础
做量化这几年,我越来越觉得时间序列分析是基本功。就像盖房子要打地基,时序分析不过关,后面那些花哨的模型都是空中楼阁。今天咱们就聊聊金融时间序列的那些核心概念。
3.1 时间序列的定义
说白了,时间序列就是按时间顺序排列的数据点。股票每日收盘价、每分钟成交量、每笔交易的买卖价差——这些都是时间序列。
一个完整的时间序列包含两个要素:时间戳和观测值。比如:
2024-01-01, 收盘价 100.5
2024-01-02, 收盘价 102.3
2024-01-03, 收盘价 101.8
...
我个人习惯把时间序列分成三类:
- 单变量时间序列:只有一个变量随时间变化,比如仅看收盘价
- 多变量时间序列:多个变量同时观测,比如同时看开盘价、最高价、最低价、收盘价
- 面板数据:多个个体在多个时间点的数据,比如沪深300所有成分股的历史日线
3.2 平稳性与非平稳性
平稳性这个概念,我当年学的时候绕了不少弯路。其实理解起来不难——平稳序列的统计性质不随时间变化。
严格来说,平稳性分两种:
- 严平稳:整个序列的联合分布不随时间平移而变化。这个条件太强,现实中几乎不存在
- 弱平稳:均值恒定、方差恒定、协方差只与时间间隔有关。这是咱们实际用的
为什么非要平稳?因为大多数统计模型都假设数据是平稳的。非平稳数据直接建模,会出现「伪回归」——两个毫无关系的序列,相关系数却很高。
判断平稳性,我常用两种方法:
- ADF检验:原假设是序列存在单位根(非平稳)。p值小于0.05,就拒绝原假设,认为序列平稳
- KPSS检验:原假设是序列平稳。正好和ADF反过来
from statsmodels.tsa.stattools import adfuller, kpss
# ADF检验
result = adfuller(price_series)
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
# KPSS检验
result = kpss(price_series)
print(f'KPSS统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
如果序列非平稳怎么办?差分是最常用的方法。一阶差分后,大多数金融时间序列就平稳了。
3.3 自相关与偏自相关
自相关,就是序列和它自己滞后版本的相关性。比如今天的收盘价和昨天的收盘价有没有关系?
偏自相关呢?它剔除了中间变量的影响。比如今天和3天前的相关性,要去掉今天和昨天、今天和前天的影响。
这两个概念有什么用?
- 自相关函数(ACF):判断MA模型的阶数
- 偏自相关函数(PACF):判断AR模型的阶数
from statsmodels.graphics.tsaplots import plot_acf, plot_pacf
# 画ACF和PACF图
fig, (ax1, ax2) = plt.subplots(2, 1, figsize=(10, 6))
plot_acf(returns, lags=30, ax=ax1)
plot_pacf(returns, lags=30, ax=ax2)
plt.show()
3.4 白噪声检验
白噪声,就是纯随机序列。均值0,方差恒定,不同时间点之间没有相关性。
为什么要检验白噪声?因为如果残差是白噪声,说明模型已经把信息提取干净了。如果残差还有自相关,说明模型没做好。
常用的检验方法是Ljung-Box检验:
from statsmodels.stats.diagnostic import acorr_ljungbox
# Ljung-Box检验
result = acorr_ljungbox(residuals, lags=[10, 20, 30], return_df=True)
print(result)
p值大于0.05,说明残差是白噪声,模型OK。p值小于0.05,说明残差还有信息没被提取,需要改进模型。
3.5 金融数据典型特征
金融时间序列有几个典型特征,和普通时间序列很不一样。你想想看,股票收益率和气温数据,能一样吗?
3.5.1 波动率聚集
大的波动后面跟着大的波动,小的波动后面跟着小的波动。这就是波动率聚集。
为什么会这样?因为信息是成堆来的。一个坏消息引发恐慌,恐慌又引发更多抛售,波动就持续放大。等市场消化完,波动才慢慢变小。
波动率聚集意味着:
- 收益率序列不是独立同分布的
- 方差随时间变化,存在条件异方差
- GARCH类模型就是专门处理这个的
3.5.2 厚尾分布
如果收益率服从正态分布,那极端值出现的概率应该很小。但现实中,金融市场的极端波动比正态分布预测的多得多。
举个例子:正态分布下,超过3个标准差的概率只有0.3%。但在A股市场,这种极端波动几乎每个月都能见到。
厚尾分布意味着:
- 用正态分布做风险管理会低估风险
- VaR模型需要调整,比如用t分布或极值理论
- 回测时要特别关注极端行情下的表现
3.6 本章知识体系
下面这张图是我梳理的本章知识结构,方便你对照复习:
嗯,这一章的内容就这些。时间序列的基础概念虽然看起来简单,但实际用起来门道很多。我建议你拿真实数据跑一遍上面的代码,感受一下平稳性检验、ACF/PACF图是什么样的。光看理论,永远学不会量化。