PART4.Modelling
平稳性检验-如果一个时间序列(或随机过程)的联合概率分布在时间或空间平移下不变,则它被定义为强平稳。特别重要的是,对交易员来说,这个过程的均值和方差不会随时间或空间而变化,而且它们都不会跟随趋势。
平稳价格序列的一个重要特征是,序列内的价格从初始值扩散的速度比GBM慢。通过测量这种扩散行为的速率,我们可以确定时间序列的性质,从而检测它是否是均值回归。现在我们将概述一个算法,即赫斯特指数,它帮助我们描述时间序列的平稳性。
赫斯特指数-Hurst指数的目标是为我们提供一个标量值,它将帮助我们识别(在统计估计的范围内)一个序列是均值回归、随机游走还是趋势。
赫斯特指数计算背后的思想是,我们可以使用对数价格序列的方差来评估扩散行为的速率。任意时间滞后τ,τ的方差是由:
大括号中的内容指的是所有t的均值。
其目的是将扩散速率与GBM进行比较。在GBM的情况下,在大的时间(即τ较大时)τ的方差与τ成正比:
如果我们发现与这种关系不同的行为,那么我们就确定了是趋势或均值回归序列。关键的观点是,如果任何连续的价格走势具有非零相关性(称为自相关性),那么上述关系是无效的。相反,可以将其修改为包含一个指数值“2H”,得到Hurst指数值H:
因此,可以看出,如果H = 0.5,我们有一个GBM,因为它只是变成了之前的关系。然而,如果h
0.5,则有趋势或均值恢复行为。特别是:
● H < 0.5 -时间序列为均值回复
● H = 0.5 -时间序列是一个几何布朗运动
● H > 0.5 -时间序列是趋势
除了描述时间序列的特征外,赫斯特指数还描述了范围。以分类的方式表现的系列。例如,接近0的H值是一个高度平均的恢复序列,而接近1的H值则是一个强烈的趋势。
要计算Amazon price系列的Hurst指数,如上文解释ADF时所使用的,我们可以使用以下Python代码:
from __future__ import print_function
from numpy import cumsum, log, polyfit, sqrt, std, subtract
from numpy.random import randn
def hurst(ts):
"""返回时间序列向量t的Hurst指数"""
# 创建滞后值的范围
lags = range(2, 100)
# 计算滞后差的方差数组s
tau = [sqrt(std(subtract(ts[lag:], ts[:-lag]))) for lag in lags]
# 使用线性拟合估计赫斯特指数
poly = polyfit(log(lags), log(tau), 1)
# 从polyfit输出返回Hurst指数
return poly[0]*2.0
# 创建一个Gometric brown Motion, Mean-Reverting and trends序列
gbm = log(cumsum(randn(100000))+1000)
mr = log(randn(100000)+1000)
tr = log(cumsum(randn(100000)+1)+1000)
# 输出上述每个序列的Hurst指数
# 以及亚马逊的价格(调整后的收盘价)
# 本文给出的ADF测试
print("Hurst(GBM): %s" % hurst(gbm))
print("Hurst(MR): %s" % hurst(mr))
print("Hurst(TR): %s" % hurst(tr))
# 假设您已经运行了上面的代码来获得' amzn ' !
print("Hurst(AMZN): %s" % hurst(amzn[’Adj Close’]))
Hurst指数的Python代码输出在下方给出:
Hurst(GBM): 0.502051910931
Hurst(MR): 0.000166110248967
Hurst(TR): 0.957701001252
Hurst(AMZN): 0.454337476553
从这个输出我们可以看到,GBM的赫斯特指数H几乎正好是0.5。回归序列的平均H几乎等于零,而趋势序列的H接近于1。
有趣的是,Amazon的H也接近0.5,这表明它类似于GBM,至少在我们使用的样本期间是这样!
更多内容请关注公众号【火象】~