hurstjit is a small Python module for analysing random walks and evaluating the Hurst exponent (H).
H = 0.5 — Brownian motion,
0.5 < H < 1.0 — persistent behavior,
0 < H < 0.5 — anti-persistent behavior.
Install hurstjit module with
pip install git+https://github.com/maxisoft/hurstjit
This is a fork from Mottl/hurst which use numba jit in order to get great performance boost.
Exemple code is more than 100x time faster (timeit from 1.67 sec to 12.2 ms)
import numpy as np
import matplotlib.pyplot as plt
from hurstjit import compute_Hc, random_walk
# Use random_walk() function or generate a random walk series manually:
# series = random_walk(99999, cumprod=True)
np.random.seed(42)
random_changes = 1. + np.random.randn(99999) / 1000.
series = np.cumprod(random_changes) # create a random walk from random changes
# Evaluate Hurst equation
H, c, data = compute_Hc(series, kind='price', simplified=True)
# Plot
f, ax = plt.subplots()
ax.plot(data[0], c * data[0] ** H, color="deepskyblue")
ax.scatter(data[0], data[1], color="purple")
ax.set_xscale('log')
ax.set_yscale('log')
ax.set_xlabel('Time interval')
ax.set_ylabel('R/S ratio')
ax.grid(True)
plt.show()
print("H={:.4f}, c={:.4f}".format(H, c))
H=0.4964, c=1.4877
The kind
parameter of the compute_Hc
function can have the following values:
'change'
: a series is just random values (i.e. np.random.randn(...)
)
'random_walk'
: a series is a cumulative sum of changes (i.e. np.cumsum(np.random.randn(...))
)
'price'
: a series is a cumulative product of changes (i.e. np.cumprod(1+epsilon*np.random.randn(...)
)
You can generate random walks with random_walk()
function as following:
brownian = random_walk(99999, proba=0.5)
persistent = random_walk(99999, proba=0.7)
antipersistent = random_walk(99999, proba=0.3)