Hurst 指数:一个数字判断市场趋势还是均值回归
每个价格序列 secretly 是三种之一:trending、mean-reverting 或纯噪音。这个拆解给你告诉你是哪一个的单个数字、约 40 行 Python 测量它的代码、以及在 VIX、S&P 500 和比特币上的 live test。
搞错它,你在错误的市场上跑正确的策略。
核心问题
在选模型之前、在跑回测之前,有一个几乎没人测量的问题:这个市场甚至有你的策略假设的那种记忆吗?
趋势跟踪者押注今天的 move 预测明天的。均值回归交易者押注相反,今天的 move 会被偿还。它们不能在同一序列上同时正确。其中一个在交易一个市场没有的记忆,市场会为这个错误收费。
有一个数字 settle 它,你可以今晚用约 40 行 Python 计算。
三种记忆类型
价格序列在 consecutive moves 之间的相关性中携带关于自己过去的信息。只有三种可能:
Anti-persistence(H < 0.5):up-move 倾向于被 down-move 跟随。Deviation 被拉回中心。均值回归交易者的世界。波动率指数住在这里,大多数 well-arbitraged spreads 也是。
Persistence(H > 0.5):up-move 倾向于被另一个 up-move 跟随。Moves feed on themselves。趋势跟踪者的世界。Momentum factors 和年轻、under-arbitraged 资产住在这里。
No memory(H = 0.5):下一步独立于上一步:随机游走。过去什么都不帮你预测下一步,两个交易者都在付 spread 交易噪音。
市场坐在哪个世界由资本能在其中移动的速度设定,当那个改变时它会 flip。趋势被发现并被 arbitraged 成随机游走。安静的 range 吸引真实买家并开始跑。你不需要 forecast flip。你需要测量,这样你从数据而不是从 drawdown 学到它。
Hurst 指数
1950 年代英国水文学家 Harold Edwin Hurst 在尼罗河上度过数十年,试图确定阿斯旺大坝后面的水库 size。他注意到河流的洪水不像独立硬币翻转:wet 年份与 wet 聚集,dry 与 dry。他构建了一种测量方式,通过观察累积序列的 range 随窗口 widening 如何增长。Mandelbrot 后来发现市场携带相同的 fingerprint。
想法:取回报序列,观察 running total 从自己的平均 wandering 多远,在长度 n 的窗口上。对无记忆序列,spread 像 n 的平方根增长——随机游走的 signature。如果 moves persist 它增长更快;如果 moves reverse 它增长更慢。
形式化地,rescaled range R/S 按 n 的 H 次方 scale:
E[R/S]_n ∝ n^H
H = 0.5 no memory (range grows like √n)
H > 0.5 persistence (trends; range grows faster than √n)
H < 0.5 anti-persistence (mean reversion; range grows slower)
H 就是 log(R/S) 对 log(n) 的斜率。
验证:合成数据
在指向真实市场之前,在已知答案上测试。Fractional Gaussian noise——fractional Brownian motion 的 increments——按构造有精确的 Hurst 指数 H。
生成 1,500 点各在 H = 0.25、0.50 和 0.75,cumulate 成价格路径,运行估计器:
H_true = 0.25 R/S Hurst = 0.327 Anis-Lloyd corrected = 0.259
H_true = 0.50 R/S Hurst = 0.497 Anis-Lloyd corrected = 0.430
H_true = 0.75 R/S Hurst = 0.671 Anis-Lloyd corrected = 0.603
斜率正确 rank 三个序列,随机游走的原始估计几乎正好 0.5。但原始 R/S 读数向中间压缩:true 0.25 读作 0.33,true 0.75 读作 0.67。这是已知的 finite-sample bias。
这就是为什么 point estimate 永远不够。0.55 的读数可能是 genuine weak trend 或 random walk 穿着估计器的 bias。需要更 sharp 的问题。
排列检验:制造零假设
Shuffle 回报。Shuffle 破坏任何记忆,同时保持完全相同的回报、相同的 fat tails、相同的波动率。Shuffle 一千次,每次测量 H,你拥有这些统计但无记忆的序列会产生 Hurst 指数分布。然后问你的真实 H 落在其中何处。
trend H_obs = 0.671 null mean = 0.553 p = 0.0000 [SIGNIFICANT]
random_walk H_obs = 0.497 null mean = 0.553 p = 0.0705 [not significant]
趋势序列有 0.67 的 Hurst 和 essentially zero 的 fluke 概率。随机游走有 0.50 的 Hurst,落在无记忆 shuffle 的云内,p = 0.07。Point estimate alone 会告诉你 0.50 vs 0.67。Permutation test 告诉你哪个 difference 你被允许交易。
注意 null mean 是 0.55 不是 0.50——small-sample bias 再次出现。没关系,因为我们测试对抗 0.55 而不是 textbook value。这就是运行 surrogate test 而不是 eyeballing 数字的全部原因。
方差比检验:Lo-MacKinlay 1988
R/S 加排列检验回答"是否有记忆"。第二个独立测试回答"在什么 horizon",用 clean closed-form 统计量:Lo 和 MacKinlay 的 variance-ratio test,来自他们 1988 年标题直白的论文 Stock Market Prices Do Not Follow Random Walks。
想法:如果回报独立,q-day 回报的 variance 精确是 1-day 回报 variance 的 q 倍。形成 ratio:
VR(q) = Var(q-day return) / (q × Var(1-day return))
VR(q) > 1 q-day moves bigger than independence allows -> trending
VR(q) < 1 q-day moves smaller than independence allows -> mean reverting
VR(q) = 1 random walk
Quant 选择这个测试因为它的 standard error。Lo 和 MacKinlay 推导出 robust to heteroskedasticity 的版本——每个真实市场都有的波动率聚集,所以 fat-tailed week 不能伪装成记忆。
实盘验证:三个市场
11 年日线数据,三个人们争论的市场。无 cherry-picking,数据说什么就打印什么。
VIX volatility index (N=2765 days)
corrected Hurst = 0.369 permutation p = 0.0000
VR(q): q2=0.94(z-2.0) q5=0.83(z-2.7) q10=0.68(z-3.4) q20=0.53(z-3.8)
VERDICT: MEAN-REVERTING
S&P 500 ETF (SPY) (N=2765 days)
corrected Hurst = 0.486 permutation p = 0.9065
VR(q): q2=0.88(z-2.2) q5=0.85(z-1.3) q10=0.81(z-1.1) q20=0.80(z-0.9)
VERDICT: RANDOM WALK
Bitcoin (BTC-USD) (N=4017 days)
corrected Hurst = 0.540 permutation p = 0.0345
VR(q): q2=0.97(z-0.9) q5=0.99(z-0.2) q10=1.02(z+0.3) q20=1.08(z+0.7)
VERDICT: TRENDING
VIX 是 textbook mean-reverter。Hurst 0.37,permutation p 低于 0.001,variance ratio 随持有期越深越下降:两天 0.94,二十天 0.53。Fear spikes 并回来。Shape 重要:edge 不在 next tick,而在 multi-week snap-back,所以把你的 holding period size 到 ratio bottom out 的地方,不是 noisy 两天端。
Daily SPY 是,良好近似,随机游走。Hurst 0.49,permutation p = 0.91,尽可能 squarely 坐在 no-memory 云内。 faint 两天 reversal fade 到二十天 nothing——microstructure 的 fingerprint,不是 tradeable trend。如果你的 daily S&P 策略假设 persistent trends,数据说你在交易一个不存在的状态。Edge 必须来自 daily path 不 capture 的地方:cross-section、options surface、event。
Bitcoin 显示 weak but real persistence。Hurst 0.54,permutation p = 0.034,variance ratio 从 short horizons 刚好低于 1 穿越到二十天的 1.08。它年轻且 under-arbitraged,仍然携带 S&P 很久以前 arbitraged out 的一点点 momentum。Thin edge,不是 lever up 的 license,但说 slow trend overlay held over weeks 有 tailwind 而不是 headwind——这正是这个框架 built to inform 的决策。
三个失败模式及修复
1. Regime 在样本中间切换
单个 Hurst 指数是整个窗口的平均。如果市场前半 trending、后半 reverting,H 把两个平均向 0.5 拉,你 conclude "no memory" 同时站在两个 strong、相反的状态上。
修复:永远不要信任单个数字。在 rolling window 上计算 H 并观察它移动。
2. 波动率聚集可以伪造记忆
R/S 除以每个 chunk 的标准差,所以 volatility 的 swings——每个市场都有的 fat-tailed 聚集——可以 distort range 并读作 spurious memory。
修复:这正是为什么用 heteroskedasticity-robust variance-ratio z。两个测试不一致时,信任 robust 的那个。始终在回报上跑测试,never on raw price levels。
3. 小样本向上 bias R/S
Short windows 上 R/S overstates H,交易原始数字会显示不存在的 trends。
修复:Anis-Lloyd 校正计算每个窗口大小上真正独立序列的预期 R/S,closed form,减去那个 bias,使无记忆序列即使在短样本上也返回约 0.50。
决策规则
两个测试,一个 verdict:
permutation p corrected H variance ratio
TRENDING p < 0.05 H > 0.50 VR rises above 1
MEAN-REVERTING p < 0.05 H < 0.50 VR falls below 1
RANDOM WALK p >= 0.05 H near 0.50 VR near 1
如果 permutation test 不能拒绝 no-memory,verdict 是 random walk,无论 point estimate 看起来多漂亮。你不被允许交易一个你无法证明存在的状态。
结论
价格图表在测量其记忆之前不告诉你该在上面跑什么策略。趋势跟踪和均值回归不是风格或观点;它们是对一个数字符号的押注,你可以在冒险一美元之前计算它。
你现在有估计器、说记忆是否真实的排列检验、说它在什么 horizon 上的方差比、三个失败模式和修复、以及一个把回报序列转成 verdict 的函数。
测量它。拉你 instrument 最近两年的数据,跑三行代码,找出你的 edge 是真实的还是你一直在一个即将结束的状态的正确一侧。