2、时域分析基础:时间序列的表示方法、均值与方差、自相关函数、平稳性概念

各位同学,欢迎来到时域分析的第一课。

我个人习惯把时域分析看作是信号处理的「原汤」。为什么这么说?因为所有频域、小波域的花活,最终都要回到时间轴上来验证。你想想看,交易数据本质上就是一根时间轴上的价格跳动,搞不懂时域,后面那些高级工具用起来心里会发虚。

2.1 时间序列的表示方法

时间序列,说白了就是按时间顺序排好的一串数字。比如某只股票每分钟的收盘价:

# 一个简单的时间序列示例
price_series = [100.5, 100.8, 101.2, 100.9, 101.5, 102.0, 101.8]
time_index = ['09:31', '09:32', '09:33', '09:34', '09:35', '09:36', '09:37']

嗯,这里要注意:时间序列的「顺序」就是一切。你不能像处理普通数组那样随意打乱它。我在项目中遇到过有人把数据按价格排序后做分析,结果完全失去了时间信息,那叫一个惨。

常见的表示方法有三种:

  • 列表/数组形式:最直接,索引对应时间点
  • 时间戳索引形式:每个数据点带一个时间标签,适合不规则采样
  • 滑动窗口形式:用固定长度的窗口截取子序列,做特征提取
我的小技巧:做量化回测时,我习惯用 pandas 的 DatetimeIndex 做索引。它天然支持时间切片、重采样,省去很多手写循环的麻烦。

2.2 均值与方差:信号的「重心」和「抖动」

均值,就是信号的平均水平。方差,衡量信号围绕均值波动的剧烈程度。

公式很简单:

均值 μ = (1/N) * Σ x_i
方差 σ² = (1/N) * Σ (x_i - μ)²

但实战中,我建议你用「滚动均值」和「滚动方差」——也就是只取最近 N 个数据点算。为什么?因为金融数据是非平稳的,全局均值可能毫无意义。比如某股票十年前均价 50 块,现在 200 块,你用全局均值去判断当前价格高低,那不是扯淡吗?

统计量 物理含义 交易中的应用
均值 信号的直流分量 判断价格中枢、布林带中轨
方差 信号的波动能量 衡量市场波动率、设置止损宽度
避坑指南:我曾经用全样本方差去设定一个策略的止损线,结果市场波动率突然放大,连续被扫止损。后来改用滚动方差(窗口期 20 根 K 线),情况才好转。记住:方差是会变的,别用死参数。

2.3 自相关函数:信号「记得」自己吗?

自相关函数,听起来高大上,其实就一个问题:当前价格和过去某个时刻的价格有没有关系?

公式:

自相关系数 ρ(k) = Cov(x_t, x_{t-k}) / σ²

其中 k 是滞后阶数。ρ(k) 接近 1,说明正相关强;接近 -1,说明负相关强;接近 0,说明没啥关系。

我举个例子。你观察某只股票,发现今天涨了,明天也容易涨——这就是正自相关。反过来,今天涨了明天就跌——这是负自相关。如果今天涨跌对明天没影响——那就是白噪声,自相关接近 0。

实战中怎么看?我一般画个自相关图(ACF plot):

import numpy as np
import matplotlib.pyplot as plt
from statsmodels.graphics.tsaplots import plot_acf

# 模拟一个具有正自相关的序列
np.random.seed(42)
data = np.random.randn(100)
# 加入一阶自相关
for i in range(1, len(data)):
    data[i] = 0.7 * data[i-1] + np.random.randn() * 0.5

plot_acf(data, lags=20)
plt.show()

如果前几个滞后阶数的柱子明显超出蓝色置信区间,说明存在自相关结构。这时候你就可以考虑用 AR 模型去捕捉它。

核心要点:自相关函数是判断「趋势性」和「均值回归性」的利器。正自相关 → 趋势策略;负自相关 → 反转策略。

2.4 平稳性概念:信号「老实」吗?

平稳性,是时域分析里最绕不开的概念。说白了,一个平稳的时间序列,它的统计性质(均值、方差、自相关)不随时间变化。

严格来说有两种:

  • 严平稳:所有统计性质完全不变。太严格,现实中几乎不存在。
  • 弱平稳(宽平稳):均值恒定、方差恒定、自相关只依赖于时间间隔(滞后阶数),不依赖于具体时间点。这是实战中常用的。

为什么这么重要?因为大多数时间序列模型(ARIMA、GARCH 等)都假设数据是平稳的。你用非平稳数据去建模,结果就是伪回归——看着拟合得很好,一预测就崩。

我的经验:金融价格序列几乎都是非平稳的。但收益率序列(对数差分后)通常是平稳的。所以我做策略时,第一件事就是把价格转成收益率。这是基本功,别偷懒。

检验平稳性,常用 ADF 检验(Augmented Dickey-Fuller test):

from statsmodels.tsa.stattools import adfuller

# 假设 price 是价格序列
result = adfuller(price)
print(f'ADF 统计量: {result[0]}')
print(f'p-value: {result[1]}')
# p-value < 0.05 通常认为序列平稳

如果 p-value 大于 0.05,说明序列非平稳。这时候你需要做差分,直到它平稳为止。

注意:我曾经犯过一个错误——对已经平稳的序列过度差分。结果引入了额外的负自相关,模型反而变差了。记住:差分到刚好平稳就停,别多差。

2.5 本章知识体系总览

下面这张图,是我自己梳理的时域分析基础框架。你可以把它当作一张地图,随时回来对照:

时域分析基础:知识体系 时间序列 表示方法 均值与方差 自相关函数 平稳性概念 列表/数组 时间戳索引 滑动窗口 滚动均值 滚动方差 ACF 图 趋势/反转判断 严平稳 弱平稳 ADF 检验

这张图把四个核心概念串起来了。你从「时间序列」出发,往四个方向延伸,每个方向都有对应的工具和实战要点。我个人建议你把它打印出来贴在工位上,做分析时瞄一眼,思路会清晰很多。


好了,时域分析的基础就讲到这里。均值、方差、自相关、平稳性——这四个概念是后续所有信号提取技术的基石。别急着往下赶,先把它们吃透。下一章我们会聊频域分析,到时候你会发现,时域和频域其实是同一枚硬币的两面。

课后小作业:找一段你熟悉的股票价格数据,计算它的滚动均值和滚动方差,再画一下 ACF 图,看看它是不是平稳的。动手做一遍,比看十遍书都管用。

专注资料整理