运用Python进行时间序列平稳检验ADFtest

分类: python |
ADF检验全名叫Augmented Dickey-Fuller Test, 用来检验一个序列是否平稳(Stationarity),
为什么这个和我们的量化交易扯上关系?看下面一段话:

价格序列本身并不是一个均值回归的平稳序列,这个肉眼都能看出来, 但价格的回报return是典型的均值回归平稳序列,除此之外很多其他基于价格基本信息生成的指标等都是平稳序列,当然也有部分不是,我们如何辨识?其中一个工具就是ADF检验

我们关注的一个是ADF,这个数值和critical values比较,越小特征越明显,通常直接拿1%比较,大于的话基本上可以说不是平稳序列,另一个是pvalue,这个数值应该接近0,我们先从随机序列开始

价格序列本身并不是一个均值回归的平稳序列,这个肉眼都能看出来, 但价格的回报return是典型的均值回归平稳序列,除此之外很多其他基于价格基本信息生成的指标等都是平稳序列,当然也有部分不是,我们如何辨识?其中一个工具就是ADF检验
PYTHON, MATLAB等都有现成的工具使用,下面例子以PYTHON为例
首先需要引进的模块是import
statsmodels.tsa.stattools,这个模块里面的adfuller函数就是ADF检验,对np.array,
pd.Series都可以直接拿来套进去使用, 看看这个函数的输出:

我们关注的一个是ADF,这个数值和critical values比较,越小特征越明显,通常直接拿1%比较,大于的话基本上可以说不是平稳序列,另一个是pvalue,这个数值应该接近0,我们先从随机序列开始
先看一个从1-10的序列的输出结果
再看随机生成的一个模拟价格序列如下图
好了,再抽取这个序列里面一段典型的趋势和一段盘整比较观察一下
最后我们看看真实市场的情况,下面根据真实价格的日线数据提取一些基本信息,看看情况
凡是从价格序列直接提取的都不具有平稳特征,而波动率等体现价格变动率的指标具有较为明显的平稳特征,实际上我们肉眼也能分辨出一个序列是否具备平稳的均值回归特征,问题是如果我们要测试几百上千个品种和指标并分析这种特征的强弱程度就需要这个ADF检验,
当然后面还有很多其他的统计学工具帮助我们更深入底了解价格运动,由此引申出各种ADF的后续测试比较就此省略。。。。
后一篇:Wavelets入坑