加载中…
个人资料
  • 博客等级:
  • 博客积分:
  • 博客访问:
  • 关注人气:
  • 获赠金笔:0支
  • 赠出金笔:0支
  • 荣誉徽章:
正文 字体大小:

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

(2020-01-20 16:20:13)
分类: python
ADF检验全名叫Augmented Dickey-Fuller Test, 用来检验一个序列是否平稳(Stationarity), 为什么这个和我们的量化交易扯上关系?看下面一段话:
运用Python进行时间序列平稳检验ADFtest
价格序列本身并不是一个均值回归的平稳序列,这个肉眼都能看出来, 但价格的回报return是典型的均值回归平稳序列,除此之外很多其他基于价格基本信息生成的指标等都是平稳序列,当然也有部分不是,我们如何辨识?其中一个工具就是ADF检验

PYTHON, MATLAB等都有现成的工具使用,下面例子以PYTHON为例
首先需要引进的模块是import statsmodels.tsa.stattools,这个模块里面的adfuller函数就是ADF检验,对np.array, pd.Series都可以直接拿来套进去使用, 看看这个函数的输出:
运用Python进行时间序列平稳检验ADFtest
我们关注的一个是ADF,这个数值和critical values比较,越小特征越明显,通常直接拿1%比较,大于的话基本上可以说不是平稳序列,另一个是pvalue,这个数值应该接近0,我们先从随机序列开始
先看一个从1-10的序列的输出结果
运用Python进行时间序列平稳检验ADFtest
上图看出在一个递增序列里面adf明显大于critical value, 而pvalue也不是接近0

再看随机生成的一个模拟价格序列如下图
运用Python进行时间序列平稳检验ADFtest
这个随机生成的序列和真实价格在肉眼上观察没有什么不同,我们分别直接计算这个序列和这个序列变化率的adf看看
运用Python进行时间序列平稳检验ADFtest

上图从adf和critical value的比较看出这个随机序列本身并不是平稳序列,adf比10%还大,而且pvalue也不接近0,而这个序列的变化率就是典型的平稳序列
好了,再抽取这个序列里面一段典型的趋势和一段盘整比较观察一下
运用Python进行时间序列平稳检验ADFtest

明显看出趋势中的平稳特征较弱而盘整的特征极强,是趋势的接近4倍, 那么这个ADF是负数不过是代表这个价格序列只少不具备趋势特征而已,并不代表就是平稳序列

最后我们看看真实市场的情况,下面根据真实价格的日线数据提取一些基本信息,看看情况
运用Python进行时间序列平稳检验ADFtest

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

凡是从价格序列直接提取的都不具有平稳特征,而波动率等体现价格变动率的指标具有较为明显的平稳特征,实际上我们肉眼也能分辨出一个序列是否具备平稳的均值回归特征,问题是如果我们要测试几百上千个品种和指标并分析这种特征的强弱程度就需要这个ADF检验, 当然后面还有很多其他的统计学工具帮助我们更深入底了解价格运动,由此引申出各种ADF的后续测试比较就此省略。。。。


0

阅读 收藏 喜欢 打印举报/Report
  

新浪BLOG意见反馈留言板 欢迎批评指正

新浪简介 | About Sina | 广告服务 | 联系我们 | 招聘信息 | 网站律师 | SINA English | 产品答疑

新浪公司 版权所有