Hurst exponent
Analyst workflows as Claude skills. 62+ tools and 8 workflows spanning earnings, comps, valuation, options flow, factor research, sizing, risk, TCA, and ops. Built in the garage, not the trading floor.
npx -y skills add rgourley/quant-garage --skill hurst-exponentAssembled from the repository path, not quoted from the project. Check it against their README if it does not work.
2 things to look at
- no licenseNo license file was found in the repository. Code published without one is not open source by default, so using it at work is a question for whoever answers licensing questions where you are.
- 6 stars6 stars. Stars are a popularity signal and not a quality one, but at this level it is likely that nobody has read this closely except its author, and you would be relying on your own review.
What its author says it does
Copied from the file, not written here
Estimate the Hurst exponent for a single ticker's daily log returns using rescaled-range (R/S) analysis, and classify the series as mean_reverting (H < 0.45), random_walk (H in [0.45, 0.55]), or trending (H > 0.55). Reports per-block R/S values and a block-bootstrap confidence band around H. Companion to pairs-scanner: pairs handles two-name cointegration, hurst handles single-name persistence. Answers "is this name a mean-reversion setup or a momentum setup?" Requires Stocks Basic. Runs on the free tier.
SKILL.md
4.5 KB, ~1.1k tokens by cl100k_base, as published. Nobody here has run it
hurst-exponent
You hand over a ticker. The skill pulls 2 years of daily closes,
computes log returns, runs R/S analysis across a log-spaced set of
block sizes, and fits log(R/S) = c + H * log(n) by OLS. H is the
slope. Classifies the series based on where H falls and adds a
bootstrap confidence band so the reader can judge whether the
classification is robust.
Interpretation
- H < 0.45: mean-reverting. Prices push back toward a centerline. Pair strategies, range trading, and z-score entries historically have structural edge. Utilities and staples names tend here.
- H in [0.45, 0.55]: random walk. No persistence. Neither trend nor mean-reversion strategies have edge from the tape alone.
- H > 0.55: trending / momentum. Prices tend to keep going. Breakout strategies and trend-following have structural edge. Growth names in a strong run often show this.
When to invoke
- "Is AAPL trending or reverting right now?"
- Deciding whether to use pairs-scanner or a breakout entry on a name
- Screening a watchlist for mean-reversion candidates before running z-score entries
- The user says "Hurst", "R/S", "persistence", "mean reverting or trending"
Not for: cross-sectional pair analysis (that's pairs-scanner). Not for regime detection at higher frequencies (this uses daily returns; intraday persistence would need tick data).
What you need
- A ticker (
--ticker) MASSIVE_API_KEYexported- Stocks Basic minimum
Optional:
--lookback-days(default 504, ~2 years). Longer = tighter H but more risk of masking a recent regime shift. Minimum 80.--n-bootstrap(default 100): block-bootstrap iterations for the confidence band. Set to 0 to skip.--seed(default 42): RNG seed.
What you get back
Two output layers from one run.
Layer 1: canonical JSON.
hurst_exponent, classification (mean_reverting / random_walk /
trending), reasoning, bootstrap with p5/p50/p95 and n_valid,
per_block_rs with (block_size, rs_mean) entries showing how R/S
scales with block size, plus lookback and n_returns.
Layer 2: rendered note. Header + H + classification tag, bootstrap band, per-block R/S table, one-line Take with strategy implication.
How it works
- Pull daily closes for the ticker over
lookback_days * 1.6calendar days. - Log returns = diff of log(close).
- Block sizes: 12 log-spaced values from min_block=10 to max_block=N/4. N/4 is the standard upper bound; going higher gives fewer blocks per size and destabilizes the regression.
- R/S per block size n:
- Partition returns into non-overlapping blocks of length n.
- For each block: center by mean, take cumulative sum, R = max - min of the cumsum, S = sample std. R/S = R/S.
- Mean R/S across blocks.
- OLS on log-log: fit
log(R/S(n)) = c + H * log(n). H is the slope. - Bootstrap: block-bootstrap (block length 20) 100 times, refit H each iteration, report p5/p50/p95 of the H distribution.
- Classify by fixed thresholds (0.45 and 0.55) so the buckets are stable across runs.
Foundations used
massive-api-patternsfor REST auth, retry, and daily aggs.
Output mode: note
Narrative note with a small per-block table. A single number (H) plus its confidence band and per-block trace reads better as a short structured note than a table.
Endpoints used
GET /v2/aggs/ticker/{T}/range/1/day/{from}/{to}?adjusted=trueOne call per run.
Doesn't handle (yet)
- Multi-scale Hurst. Only one H per run. A rolling Hurst over N-day windows would show regime changes; queued as a companion.
- Detrended fluctuation analysis (DFA). R/S is the classic method; DFA is more robust to non-stationarities. Queued.
- Fractional differencing. If you want to trade on the estimate, the natural next step is fractional integration order d = H - 0.5. Beyond this skill's scope.
- Cross-asset Hurst comparison. No "AAPL's H vs sector median H." Queued.
These are clean PR extensions.
What ships with it: 4 files
5.5 KB alongside SKILL.md
references/
- rendering.md1.6 KB
- output-schema.json1.4 KB
- README.md1.2 KB
- requires.yml1.4 KB