[英]Calculating Hurst Exponent with energy data (aFRR) - Python
我在计算赫斯特指数时遇到问题。 我的数据是来自 Entsoe 的 aFRR 数据,它们包括正值和负值。
def hurst(ts):
lags = range(1, len(ts)-1)
tau = [numpy.sqrt(numpy.std(numpy.subtract(ts[lag:], ts[:-lag]))) for lag in lags]
poly = numpy.polyfit(numpy.log(lags), numpy.log(tau), 1)
return poly[0]*2.0
对于 poly,我总是得到类似 [-0.06522701, 2.0348634] 的值。 所以我的 hurst Exponente 总是负数,但应该在 0 和 1 之间。如果您需要更多信息,请告诉我。 我是 python 社区的新手,我不确定这些信息是否足以解决我的问题。
测试这段代码:
log(cumsum(random.randn(100000)+1)+1000)
因为上面的线将你的 hurst 保持在 0 和 1 之间。
def hurst(p):
tau = []; lagvec = []
# Step through the different lags
for lag in range(2,20):
# produce price difference with lag
pp = subtract(p[lag:],p[:-lag])
# Write the different lags into a vector
lagvec.append(lag)
# Calculate the variance of the differnce vector
tau.append(sqrt(std(pp)))
# linear fit to double-log graph (gives power)
m = polyfit(log10(lagvec),log10(tau),1)
# calculate hurst
hurst = m[0]*2
# plot lag vs variance
#py.plot(lagvec,tau,'o'); show()
return hurst
if __name__=="__main__":
# Different types of time series for testing
#p = log10(cumsum(random.randn(50000)+1)+1000) # trending, hurst ~ 1
#p = log10((random.randn(50000))+1000) # mean reverting, hurst ~ 0
p = log10(cumsum(random.randn(50000))+1000) # random walk, hurst ~ 0.5
print( hurst(p) )
Timeseries Similarity-Hurst-ADF-Basics-of-Statistical-Mean-Reversion-Testing检查您的数据集,特别是系列平均值。
显然,使用 GM1 和 GM2 计算的 H 对序列平均值(实际上对变异系数)敏感,因此必须在稳健分析中考虑这一事实,因为这意味着随机序列可能明显显示 memory ,当真正发生的是平均值不为零时。 在金融系列中,这意味着在大范围内会有正(如果平均值为负,则为负)增益。
可以观察到三种一般类型的财务数据; 趋势、均值回归或随机游走。 趋势数据是随时间增加或减少的数据(正自相关),而均值回归数据是围绕其长期平衡波动的数据(负自相关)。 随机游走是量化金融的基础,也是从业者首先应该了解的内容之一。 假设财务数据遵循随机游走,这意味着价格变动是随机的,无法预测(零自相关)。 我们的目的是了解这三种类型中的哪一种是我们数据的主要特征,并且可以通过赫斯特指数来回答这个问题。
以下是对它的解释:
H < 0.5 | 均值回归数据。
H = 0.5 | 几何布朗运动。
H > 0.5 | 趋势数据。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.