The Hurst Exponent does not tell you when to buy or sell. It tells you which type of strategy is mathematically valid in the current market regime — trending, mean-reverting, or random — before you commit to any indicator at all.
Section 1: Core Mechanics
The Hurst Exponent was developed by hydrologist Harold Edwin Hurst in 1951 while studying the Nile River's flood cycles. Benoit Mandelbrot introduced it to financial markets in the 1960s. It measures the long-range dependency of a time series — specifically whether the series has memory (persistence) or anti-memory (anti-persistence).
Three regimes:
- H > 0.5: Persistent (trending) — past trends tend to continue. Momentum strategies are valid.
- H = 0.5: Random walk — no predictable structure. No strategy has mathematical edge.
- H < 0.5: Anti-persistent (mean-reverting) — price movements tend to reverse. Mean reversion strategies are valid.
Method 1: Rescaled Range (R/S) Analysis
The classical calculation developed by Hurst himself.
Step 1: Divide the price series of length N into sub-periods of length n.
Step 2: For each sub-period, compute the range R (max minus min of cumulative deviations from mean) and the standard deviation S.
Step 3: Compute the ratio R/S for each sub-period.
Step 4: Average R/S across all sub-periods of length n.
Step 5: Repeat for multiple values of n (e.g., n = 8, 16, 32, 64, 128).
Step 6: Plot log(R/S) against log(n). The slope of the regression line is the Hurst Exponent H.
In log space:
Where H is the slope and C is a constant. Estimate H via linear regression of log(R/S) on log(n).
Method 2: Detrended Fluctuation Analysis (DFA)
DFA is more robust for financial time series because it explicitly removes polynomial trends before measuring fluctuation — reducing the risk of overestimating H in trending series.
Key DFA formula for fluctuation F at scale n:
Where is the cumulative sum of the return series and is the local polynomial fit within each window of size n. Plot log(F(n)) vs log(n) — slope = H.
Inputs
- Price series: Close prices (log returns for DFA; raw or log prices for R/S)
- Length: 500 bars minimum; 1,000+ bars preferred for R/S accuracy
- Sub-period sizes (R/S): Standard sequence: 8, 16, 32, 64, 128 (powers of 2)
- Rolling window: 252 bars (1 trading year) for a rolling H estimate
Parameters
| Parameter | Default | Range | Impact |
|---|---|---|---|
| Total series length | 500+ | 252–2000 | Shorter = statistically unreliable H estimate |
| Rolling window | 252 | 126–504 | Shorter rolling window = more responsive but noisier |
| Sub-period sizes (R/S) | Powers of 2 | 8–N/4 | More sub-periods = smoother regression, more compute |
| Method | R/S or DFA | — | DFA preferred; R/S is classic and simpler |
Output Range and Meaning
H is always between 0 and 1:
- 0.55 to 1.0: Persistent — trend-following strategies (MA crossovers, momentum, breakouts)
- 0.45 to 0.55: Near-random — no reliable directional edge; reduce position sizes
- 0.0 to 0.45: Anti-persistent — mean reversion strategies (Z-Score, DPO, Bollinger Bands, ConnorsRSI)
Typical equity indices on daily data fall between 0.50 and 0.60 — slightly persistent overall. Individual stocks vary significantly.
Visual Behavior
Hurst does not plot as an intraday line overlay. It is computed as a single scalar value for a time window, then updated as the window rolls forward. On a chart, it appears as a slowly-moving indicator line between 0 and 1 with horizontal reference lines at 0.45 and 0.55.
Section 2: Interpretation & Signals
H Value Trading Map
| H Value | Market Type | Valid Strategy Family |
|---|---|---|
| 0.55 to 0.70 | Weakly to moderately persistent | Moving average crossovers, ADX-filtered breakouts, momentum |
| 0.70 to 1.00 | Strongly persistent | Trend-following, trailing stops, pyramiding |
| 0.45 to 0.55 | Near-random walk | Reduce all positions — no statistical edge for any strategy |
| 0.30 to 0.45 | Weakly anti-persistent | Bollinger Bands, Z-Score, DPO, StochRSI |
| 0.00 to 0.30 | Strongly anti-persistent | Aggressive mean reversion — very rare, usually post-crash conditions |
Regime Switching Application
The most powerful application is rolling Hurst as a strategy selector:
- Calculate H on a rolling 252-day window, updated daily
- When H rises above 0.55: activate trend-following indicators (SMA crossovers, MACD, ADX)
- When H falls below 0.45: activate mean reversion indicators (Z-Score, DPO, ConnorsRSI)
- When H is between 0.45 and 0.55: reduce position sizes to 25-50% of normal — no clear edge
Divergence
Hurst does not produce price divergence. Instead, watch for H regime transitions: H crossing from above 0.55 to below 0.55 signals a shift from persistent to random/anti-persistent. This is not a buy/sell signal — it is a strategy-switch signal. Position size reduction at the transition is prudent.
Best Application
Hurst is not a standalone trading signal. Use it as a meta-indicator — a filter that decides which other indicators are valid in the current regime. Before applying any indicator from this course, calculate the rolling H on daily data and select the indicator family that matches the current H reading.
Chart Setup — Hurst Regime Identification
Rolling 252-Day Hurst Exponent — Regime Transitions
Section 3: Pass vs. Live — Real-Time Reliability
Hurst Exponent is a slowly-evolving indicator. On daily data with a 252-bar window, it updates once per day and changes slowly. This means it identifies regimes that have already been established — not emerging ones. It is best used weekly to assess whether the current regime justifies the strategy family you are using.
Do not use Hurst on intraday data. The computational requirements (500+ bars) mean intraday Hurst calculations are based on hours or minutes of data — statistically unreliable and practically useless for signal generation.
Section 4: Practical Use Cases
Setup: Hurst is NOT used for intraday scalping — insufficient data for reliable calculation Alternative approach: Use ADX as a proxy: ADX < 20 approximates anti-persistence (mean reversion); ADX > 25 approximates persistence (trend-following) If calculated anyway: Use 500+ 15m bars (5+ trading days) for a rough R/S estimate — treat result as directional guidance only, not precise H values Key rule: Always prefer daily-bar Hurst over intraday Hurst for regime classification
Setup: Calculate rolling Hurst(252) on daily close prices — update weekly Signal use: H > 0.55 → use MACD, SMA crossovers, ADX breakouts for swing entries. H < 0.45 → use Z-Score(20), DPO(20), ConnorsRSI for mean reversion entries. H 0.45-0.55 → reduce position size to 50%, avoid new entries Review frequency: Check H value every Friday close — adjust strategy allocation for the next week Key rule: Never apply a mean reversion indicator when H > 0.55 and vice versa
Setup: Calculate Hurst on weekly closes over 104-week window (2 years) Signal use: Weekly H < 0.45 over 4 consecutive weeks = confirmed mean-reverting regime for multi-month position trades. Average into Z-Score or DPO-guided positions over 3-4 weeks. Exit: Weekly H rises above 0.50 for 4 consecutive weeks — regime shifting toward random/persistent, exit mean reversion positions Key rule: Weekly Hurst is the slowest and most reliable estimate — use for asset allocation decisions, not individual trade entries
Real-world application: A systematic fund using rolling Hurst on SPX daily data 2010-2023 switched between a 3-SMA trend system (when H > 0.55) and a Z-Score(20) mean reversion system (when H < 0.45) with neutral positioning (H 0.45-0.55). Backtested Sharpe ratio was 1.4 vs 0.9 for trend-only or mean-reversion-only approaches. The regime-aware switching avoided the worst drawdowns of both systems by staying out of their worst regime.
Section 5: Pseudo Code
INPUT: close_prices[], method="RS", window=252, min_series=500
# METHOD 1: Rescaled Range (R/S) Analysis
PROCESS (R/S):
Step 1: Compute log returns: returns[i] = log(close[i] / close[i-1])
Step 2: Define sub-period sizes: n_values = [8, 16, 32, 64, 128]
(all n must be <= len(returns) / 2)
Step 3: For each n in n_values:
rs_values = []
for each non-overlapping sub-window of size n in returns:
mean_r = mean(sub_window)
deviations = cumulative_sum(sub_window - mean_r)
R = max(deviations) - min(deviations)
S = std(sub_window)
if S > 0:
rs_values.append(R / S)
avg_rs[n] = mean(rs_values)
Step 4: Fit log(avg_rs) ~ H * log(n_values) via least-squares regression
H = slope of the regression line
# METHOD 2: Detrended Fluctuation Analysis (DFA)
PROCESS (DFA):
Step 1: Compute cumulative sum of log returns: Y[k] = sum(returns[0:k])
Step 2: For each scale n in [8, 16, 32, 64, 128]:
F_values = []
for each segment of size n in Y:
fit a polynomial (degree 1) to segment
residuals = segment - polynomial_fit
F_values.append(sqrt(mean(residuals^2)))
F[n] = mean(F_values)
Step 3: H = slope of log(F) vs log(n_values) via linear regression
OUTPUT:
H — single float between 0 and 1
interpretation: "TREND" if H > 0.55, "RANDOM" if 0.45 <= H <= 0.55, "MEAN_REVERT" if H < 0.45
# ROLLING HURST:
For each day i starting at i = window:
hurst[i] = calculate_hurst(close_prices[i - window : i], method)
EDGE CASES:
- len(close_prices) < 500: raise warning "insufficient data for reliable Hurst estimate"
- All returns identical (flat price): S = 0 in R/S — skip that sub-window
- H estimate outside [0, 1]: data quality issue — check for price gaps or errors
- Method="RS" with series < 128 bars: n_values cannot reach 128 — reduce to available powers of 2
Section 6: Parameters & Optimization
Standard Lookback Conventions
| Series Length | Reliability | Use Case |
|---|---|---|
| Below 252 | Unreliable (±0.15 error) | Not recommended |
| 252–500 | Low reliability (±0.10) | Rough directional guidance only |
| 500–1000 | Moderate reliability (±0.06) | Practical trading application |
| 1000–2000 | Good reliability (±0.04) | Institutional regime analysis |
| 2000+ | Best reliability (±0.02) | Research and model development |
Parameter Impact
| Change | Effect | When to Apply |
|---|---|---|
| Shorter rolling window (126 bars) | More responsive H — faster regime detection | Faster-moving markets, active traders |
| Longer rolling window (504 bars) | More stable H — fewer false regime switches | Institutional, low-turnover portfolios |
| DFA vs R/S | DFA more robust; R/S easier to compute | Prefer DFA for actual trading use |
| Wider regime bands (0.40/0.60) | Fewer regime switches, longer in each regime | Conservative regime switching |
How does Hurst relate to the Autocorrelation Function?
Negative lag-1 autocorrelation in daily returns confirms mean reversion (anti-persistence). Positive lag-1 autocorrelation confirms trend/persistence. H < 0.5 corresponds to negative autocorrelation structure; H > 0.5 corresponds to positive autocorrelation structure. They are measuring the same underlying property from different angles. ACF is faster to compute; Hurst aggregates across multiple lags for a single summary statistic.
Is H calculated on prices or returns?
R/S analysis can use either raw prices or log returns — returns are preferred because they are stationary (constant variance over time), while price levels are not. DFA requires returns (cumulative sum of returns gives the integrated price path). Always compute H on log returns for financial applications: returns[i] = log(close[i] / close[i-1]).
What Python library calculates Hurst?
pip install hurst provides compute_Hc(series, kind='price', simplified=True) — returns (H, C, data). For more control: use the nolds library (pip install nolds) which provides both DFA and R/S implementations with configurable parameters. For production, implement from scratch using numpy — the library implementations vary in their sub-period selection and regression methodology.
Market-Specific H Characteristics
- S&P 500 daily: H approximately 0.53-0.58 in bull markets — slight persistence
- Gold (XAU/USD) daily: H approximately 0.50-0.56 — near-random to slightly persistent
- Bitcoin daily: H approximately 0.57-0.68 in trending phases — strongly persistent when trending
- Forex (EUR/USD) daily: H approximately 0.48-0.54 — near-random, occasional mean reversion
- Individual large-cap stocks: High variance (0.40-0.70) depending on sector and news cycle
Section 7: Synergies & Conflicts
| Works Well With | Avoid Combining With | |
|---|---|---|
| ADX | ADX is a fast, real-time proxy for persistence (ADX > 25 ≈ H > 0.55). Use ADX for daily decisions and Hurst for weekly regime classification — they confirm each other well | — |
| Z-Score(20) | When H < 0.45, activate Z-Score mean reversion — the Hurst reading gives the statistical justification for the strategy choice | — |
| ConnorsRSI | H < 0.45 on SPY daily data + CRSI below 10 = double confirmation that mean reversion conditions are present at both regime and signal level | — |
| Autocorrelation Function | ACF negative lag-1 confirms anti-persistence measured by H — use both to validate the regime before committing capital | — |
| Short-term momentum indicators (MACD, RSI crossovers) | — | Do not apply momentum indicators when H < 0.45 — they will generate losing trend signals in an anti-persistent market |
| Mean reversion indicators in H > 0.55 regimes | — | Do not apply Z-Score or DPO when H > 0.55 — trend persistence defeats reversion assumptions |
| Low-data estimates of H | — | H calculated on fewer than 252 bars has so much statistical noise that acting on it is equivalent to trading on random numbers |
Section 8: Common Mistakes
| Mistake | Root Cause | Solution |
|---|---|---|
| Calculating H on fewer than 252 bars | Impatience — wanting a fast result | Accept that Hurst requires 500+ bars; use ADX as a fast proxy below 252 bars |
| Acting on H = 0.51 vs H = 0.49 as meaningfully different | Ignoring statistical error bounds | Only act on clear deviations: H < 0.45 or H > 0.55 — the ±0.05 noise renders smaller differences meaningless |
| Using intraday Hurst for intraday signals | Misapplying the indicator's data requirement | Hurst is a daily or weekly instrument — never use on intraday data for signal generation |
| Treating H as constant | Not re-computing rolling Hurst as markets change | Roll H on 252-bar window, update weekly — regimes do shift over months |
| Using R/S on trending data without adjustment | R/S overestimates H in the presence of drift | Prefer DFA which explicitly detrends before measuring fluctuation |
Section 9: Cheat Sheet
USE WHEN: Deciding which strategy family (trend vs mean reversion) applies to the current asset regime; weekly regime review; validating other indicators before deployment; institutional portfolio allocation between momentum and mean reversion factors
AVOID WHEN: You have fewer than 252 bars; intraday decisions; need real-time signal; asset has had major structural change (delistings, mergers, splits) in the lookback window
ENTRY SIGNAL: Not a direct entry signal — use H to ENABLE or DISABLE other indicators. H < 0.45 → enable Z-Score, DPO, ConnorsRSI. H > 0.55 → enable SMA crossovers, MACD, ADX breakouts.
EXIT SIGNAL: H crosses the 0.45/0.55 threshold → switch strategy family; reduce position size to 50% during transition (H 0.45-0.55 zone)
PARAMETERS: Minimum series: 500 bars | Preferred: 1000+ bars | Rolling window: 252 daily bars | Method: DFA preferred over R/S
CONFLUENCE: H < 0.45 + ADX < 20 + negative lag-1 autocorrelation = highest-confidence mean reversion regime confirmation
RISK: Statistical estimation error ±0.05-0.10 with 252-bar window — regime boundaries at 0.45/0.55 already account for this uncertainty band
BEST TIMEFRAME: Daily closes for 1-2 year lookback; weekly for multi-year institutional regime analysis