时间序列中Hurst指数的计算(python代码)

您所在的位置:网站首页 python做股票指数运算 时间序列中Hurst指数的计算(python代码)

时间序列中Hurst指数的计算(python代码)

2024-07-14 07:44| 来源: 网络整理| 查看: 265

在做时间序列分析时,需要计算Hurst指数,由于Hurst指数计算比较复杂,刚开始懒得自己写,就在github上进行搜索,多是这个代码:

from numpy import std, subtract, polyfit, sqrt, log def hurst(ts): """Returns the Hurst Exponent of the time series vector ts""" # create the range of lag values i = len(ts) // 2 lags = range(2, i) # Calculate the array of the variances of the lagged differences tau = [sqrt(std(subtract(ts[lag:], ts[:-lag]))) for lag in lags] # use a linear fit to estimate the Hurst Exponent poly = polyfit(log(lags), log(tau), 1) # Return the Hurst Exponent from the polyfit output return poly[0] * 2.0

用该代码进行测试时,发现结果跟预期差别较大,理论上为长期趋势时,hurst指数应该接近1,但是对构造好的测试集进行测试时发现hurst指数居然接近与0.5比较多,因此根据查到的Hurst指数构建理论(理论参考为:http://www.360doc.com/content/16/0409/15/20041187_549224354.shtml)自己手写了一个Hurst指数计算代码: 理论部分如下: 这里写图片描述 代码部分如下:

# coding: utf-8 from __future__ import division from collections import Iterable import numpy as np from pandas import Series def calcHurst2(ts): if not isinstance(ts, Iterable): print 'error' return n_min, n_max = 2, len(ts)//3 RSlist = [] for cut in range(n_min, n_max): children = len(ts) // cut children_list = [ts[i*children:(i+1)*children] for i in range(cut)] L = [] for a_children in children_list: Ma = np.mean(a_children) Xta = Series(map(lambda x: x-Ma, a_children)).cumsum() Ra = max(Xta) - min(Xta) Sa = np.std(a_children) rs = Ra / Sa L.append(rs) RS = np.mean(L) RSlist.append(RS) return np.polyfit(np.log(range(2+len(RSlist),2,-1)), np.log(RSlist), 1)[0]

使用该代码对随机数进行计算Hurst指数时,比较趋近与0.5,即符合随机,而排序后的数据进行计算则接近于1,即为长期趋势,不过由于并没有对数据进行全分类,而是分类的最小集合为每个子集中有3个元素,因此理论上会出现大于1的现象,不过超出部分比较小,且出现几率并不是很大,因此可以视为1。



【本文地址】


今日新闻


推荐新闻


CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3