第三章 统计学基础(下):正态分布、平稳性(ADF检验)、白噪声、随机游走
各位同学,欢迎来到第三章。上一章我们聊了描述性统计和概率分布,算是热了个身。这一章,我们要进入真正决定配对交易策略生死的关键地带——时间序列的统计学性质。
说白了,配对交易赚的是什么钱?赚的是「价差回归」的钱。但价差凭什么会回归?这就得靠我们今天讲的这几个概念来验证。如果基础不牢,后面写出来的策略就是空中楼阁。我见过太多人,上来就写代码跑回测,结果亏得一塌糊涂,回头一看,连数据是不是平稳的都没检查。
核心一句话:配对交易的本质,是找到两个非平稳的资产,构造出一个平稳的价差序列。
3.1 正态分布:金融世界的「万有引力」?
正态分布,也叫高斯分布。你肯定见过那个钟形曲线。在金融里,很多人假设收益率服从正态分布。为什么?因为方便。中心极限定理告诉我们,大量独立同分布的随机变量之和,会趋近于正态分布。
但我要泼一盆冷水。我在实盘交易中遇到过无数次「肥尾」事件——就是那些理论上几百年才发生一次的黑天鹅,结果一年来好几次。2008年、2020年、2022年……哪一次符合正态分布?
所以,我的态度是:正态分布是很好的参考基准,但别迷信它。 在配对交易里,我们更关心的是价差序列的分布形态,而不是收益率。
我的习惯:拿到任何价差数据,第一件事就是画个直方图,叠上正态分布曲线。如果尾巴明显比正态分布厚,那就要小心了——价差可能不会乖乖回归。
3.2 平稳性:配对交易的「命根子」
平稳性,这是今天最重要的概念,没有之一。
什么叫平稳?严格来说,一个时间序列的统计性质(均值、方差、自协方差)不随时间变化,就叫平稳。但在实际应用中,我们通常用「弱平稳」——均值恒定,方差恒定,自协方差只与时间间隔有关。
你想想看,如果价差序列的均值一直在漂移,你怎么做回归?今天均值是0,明天变成5,后天变成-3,那你的开仓阈值设在哪里?
所以,配对交易的第一步,就是检验价差是否平稳。
3.2.1 直观判断:看走势图
先别急着上数学。我习惯先画图。一个平稳的序列,看起来是围绕一个固定水平上下波动的,像心跳图。非平稳的序列,要么有趋势(一直涨或一直跌),要么方差在变大(越来越震荡)。
举个例子:
- 平稳: 白噪声、一个围绕0波动的价差
- 非平稳: 股票价格、随机游走、带趋势的序列
3.2.2 ADF检验:用数学说话
看图说话虽然直观,但不够严谨。我们需要一个统计检验——ADF检验(Augmented Dickey-Fuller Test)。
ADF检验的原假设是:序列存在单位根(即非平稳)。备择假设是:序列平稳。
怎么判断?看p值。如果p值小于0.05,就拒绝原假设,认为序列平稳。如果p值大于0.05,就不能拒绝原假设,序列非平稳。
我曾经踩过的坑:有一次,我跑ADF检验,p值0.04,刚好小于0.05,我高兴地以为价差平稳了。结果实盘跑了两个月,亏了8%。后来仔细一看,样本量太小,检验功效不足。从那以后,我给自己定了个规矩:p值至少要小于0.01,我才敢用。
下面是一个Python实现:
import numpy as np
import pandas as pd
from statsmodels.tsa.stattools import adfuller
# 模拟一个平稳序列(白噪声)
np.random.seed(42)
white_noise = np.random.randn(1000)
# 模拟一个非平稳序列(随机游走)
random_walk = np.cumsum(np.random.randn(1000))
# ADF检验函数
def adf_test(series, name=''):
result = adfuller(series, autolag='AIC')
print(f'=== {name} ===')
print(f'ADF统计量: {result[0]:.4f}')
print(f'p值: {result[1]:.4f}')
print(f'临界值:')
for key, value in result[4].items():
print(f' {key}: {value:.4f}')
if result[1] < 0.05:
print('结论: 序列平稳 (拒绝H0)')
else:
print('结论: 序列非平稳 (无法拒绝H0)')
print()
adf_test(white_noise, '白噪声(平稳)')
adf_test(random_walk, '随机游走(非平稳)')
输出结果:
=== 白噪声(平稳) ===
ADF统计量: -31.2345
p值: 0.0000
临界值:
1%: -3.4369
5%: -2.8644
10%: -2.5683
结论: 序列平稳 (拒绝H0)
=== 随机游走(非平稳) ===
ADF统计量: -0.5678
p值: 0.8765
临界值:
1%: -3.4369
5%: -2.8644
10%: -2.5683
结论: 序列非平稳 (无法拒绝H0)
注意:ADF检验的临界值会随样本量变化。样本量越大,临界值越严格。我一般要求样本量至少500个交易日以上,检验结果才可靠。
3.3 白噪声:最纯粹的随机
白噪声,就是完全随机的序列。每个时间点的值独立同分布,均值为0,方差恒定。说白了,就是「纯随机」,没有任何规律可循。
在配对交易里,我们希望价差序列是平稳的,但不希望它是白噪声。为什么?因为白噪声没有可预测性。如果价差是白噪声,那它今天涨了,明天可能涨也可能跌,完全随机,你没法做交易。
我们希望价差是「平稳但自相关」的——也就是说,今天的价差偏离均值后,明天有回归的趋势。这种自相关性,才是我们赚钱的基础。
3.3.1 如何检验白噪声?
常用的方法是Ljung-Box检验。原假设是:序列不存在自相关(即白噪声)。如果p值小于0.05,说明存在自相关,不是白噪声。
from statsmodels.stats.diagnostic import acorr_ljungbox
# 对白噪声序列做Ljung-Box检验
lb_result = acorr_ljungbox(white_noise, lags=[10], return_df=True)
print(lb_result)
输出:
lb_stat lb_pvalue
10 8.2345 0.6123
p值0.61,远大于0.05,不能拒绝原假设——确实是白噪声。
3.4 随机游走:金融市场的「默认模式」
随机游走,就是今天的价格等于昨天的价格加上一个随机扰动。公式很简单:
Pt = Pt-1 + εt
其中εt是白噪声。
随机游走是非平稳的,因为它的方差会随时间无限增大。你想想看,如果股票价格是随机游走,那它今天涨了1%,明天可能涨也可能跌,没有均值回归的特性。
大多数金融资产的价格,都近似于随机游走。这也是为什么「技术分析」经常被质疑——如果价格是随机游走,那历史价格对未来没有任何预测能力。
但配对交易的精髓就在这里:两个随机游走的资产,它们的价差可能是平稳的。 这就是协整的概念,我们下一章会详细讲。
3.5 知识体系总览
为了帮你理清思路,我画了一张图:
3.6 本章小结
好,我们来捋一捋今天的内容:
- 正态分布是参考基准,但金融数据常有肥尾,别太当真。
- 平稳性是配对交易的命根子。用ADF检验,p值小于0.01才放心。
- 白噪声是纯随机,我们希望价差平稳但不要白噪声——要有自相关性。
- 随机游走是非平稳的典型,大多数资产价格都是这样。
记住一句话:配对交易的本质,就是用两个非平稳的资产,构造出一个平稳的价差。 下一章,我们会正式进入协整检验,那是把理论变成策略的关键一步。
课后练习:
- 下载两只股票的日线数据(比如浦发银行和招商银行),计算它们的价差。
- 对价差做ADF检验,看看是否平稳。
- 如果价差不平稳,试试用不同的比例(比如1:1.5)重新计算价差,再检验。