halo 的技术博客

返回

先说结论:用单一 Hurst 指数描述市场记忆,等于用平均气温描述一个既有沙漠又有冰川的星球。真实收益序列的大波动聚集成串(危机连着危机),小波动却近似随机游走——两种尺度的记忆结构完全不同,一个 H 装不下。MF-DFA(Multifractal Detrended Fluctuation Analysis)把这件事做对了:用 q 阶矩分别透视大小波动的标度行为,得到一条广义 Hurst 曲线 h(q) 和一张多重分形谱 f(α)。本文纯 numpy 从零实现全流程,三类合成序列对照实验里,二项级联序列的谱宽 Δα=0.61,是白噪声(0.006)的百倍;但打乱检验同时泼了盆必要的冷水——谱宽的大头往往来自收益分布的厚尾,而不是时序记忆,不做这个对照的多重分形研究基本都在自欺。

一、单一 Hurst 的失职#

经典 DFA 流程:把收益序列累积成 profile,切成长度 s 的窗口,每窗去掉多项式趋势后算残差方差 F2(s)F^2(s),如果 F(s)sHF(s) \sim s^H,斜率 H 就是 Hurst 指数。H>0.5 长记忆、H<0.5 反持续、H=0.5 随机游走。

问题在于 F2(s)F^2(s)所有窗口方差的平均——大波动窗口和小波动窗口一锅烩。设想一个序列:95% 的时间是温和随机游走,5% 的时间是剧烈的波动聚集。平均之后你得到一个不痛不痒的 H≈0.5,两种截然不同的动力学互相抵消,全部信息丢失。

金融收益恰恰就是这种序列。波动率的长记忆(大波动跟着大波动)是最稳健的典型事实之一,但它只活在”大波动的尺度行为”里——你需要一个能按波动大小分层透视的工具。

二、MF-DFA:用 q 阶矩当变焦镜头#

MF-DFA 对 DFA 只改一处:把二阶平均升级成 q 阶矩

Fq(s)={12Nsv=12Ns[F2(v,s)]q/2}1/qsh(q)F_q(s) = \left\{ \frac{1}{2N_s} \sum_{v=1}^{2N_s} \left[ F^2(v, s) \right]^{q/2} \right\}^{1/q} \sim s^{h(q)}

q 是变焦旋钮:

  • q > 0:大方差窗口在求和里权重大 → h(q)h(q) 反映大波动的标度行为
  • q < 0:小方差窗口权重大 → h(q)h(q) 反映平静期的标度行为
  • q = 2:退回经典 DFA,h(2)h(2) 就是普通 Hurst

如果 h(q) 是水平线——大小波动同一套标度律——序列是单分形;如果 h(q) 随 q 递减(大波动记忆结构与小波动不同),序列是多重分形

再经 Legendre 变换 τ(q)=qh(q)1\tau(q) = qh(q) - 1α=τ(q)\alpha = \tau'(q)f(α)=qατ(q)f(\alpha) = q\alpha - \tau(q),得到多重分形谱:一条开口向下的抛物线状曲线,谱宽 Δα=αmaxαmin\Delta\alpha = \alpha_{max} - \alpha_{min} 一个数概括多重分形的强度

三、纯 numpy 实现#

核心 40 行,四步走:

之后对每个 q 拟合 logFq(s)\log F_q(s)logs\log s 的斜率得 h(q),数值梯度做 Legendre 变换得谱。两个实现细节值得强调:双向切段(正反各切一遍)避免序列尾部被丢弃引入偏差;q=0 必须用对数平均的极限形式,直接代公式会除零。

四、三类序列对照:谱宽差两个数量级#

合成三条 16384 点的序列做对照:

  1. 白噪声——无记忆、单分形的基准
  2. 分数高斯噪声 fGn(H=0.7)——有长记忆,但仍是单分形(记忆结构在所有尺度一致)
  3. 二项级联多重分形——波动率由 14 层二项级联生成(每层随机把方差按 0.75/0.25 分给左右两半),刻意制造”不同尺度不同记忆”

三类序列

肉眼看前两条几乎无法区分,第三条能看出波动聚集。MF-DFA 的结果把三者彻底分开:

h(q) 曲线

序列h(2)h(−4)h(+4)谱宽 Δα
白噪声0.5320.5290.5330.006
fGn (H=0.7)0.7000.6830.7000.024
二项级联0.5040.7580.4310.608

解读三个要点:

  • 白噪声:h(q) 死平在 0.5,Δα≈0.006——这个数就是本实现的”噪声地板”,实际应用中 Δα 低于 ~0.05 都应视为”无多重分形证据”;
  • fGn:整条线抬到 0.7 但依然水平——长记忆 ≠ 多重分形,它只是把同一种记忆复制到所有尺度。这两个概念在文献里被混用得触目惊心;
  • 二项级联:h(q) 从负 q 端的 0.76 一路弯到正 q 端的 0.43——平静期强持续、剧烈期反持续,两种动力学共存,Δα=0.61 把它钉死在多重分形柱上。

多重分形谱

谱图上三者的形状差异一目了然:白噪声和 fGn 缩成一个点,级联序列张开成一顶宽帽子。

五、滚动谱宽:一个 regime 仪表#

多重分形谱能不能上生产线?一个自然的用法是滚动窗口谱宽当 regime 指示器。构造一条前半段白噪声、后半段波动级联的拼接序列,用 2048 点窗口、256 点步长滚动计算 Δα:

滚动谱宽

平静段谱宽均值 0.11,切入级联段后跳到 0.35,切换点附近响应干脆。直觉上这捕捉的是”波动聚集结构的出现”——比单纯的波动率水平多一层信息(波动率高但均匀的市场,谱宽不会大)。

但要按住期待:窗口 2048 点对日频数据是八年,实用中只能上小时或分钟频;而且谱宽是描述性统计,从”谱变宽了”到”该降仓了”之间还隔着一整套需要独立验证的映射。把它当风险仪表盘上的一块补充仪表,而不是信号发生器。

六、打乱检验:多重分形的照妖镜#

这是全文最重要的一节。谱宽大有两个完全不同的来源:

  1. 时序相关:大波动在时间上聚集(真正的”记忆结构”)
  2. 分布厚尾:收益分布本身有极端值,哪怕时序完全独立

区分方法简单粗暴:把序列随机打乱再算一遍。打乱摧毁一切时序相关,只留下分布本身的贡献。

打乱检验

结果令人清醒:级联序列原始 Δα=0.61,打乱后仍有 0.55。也就是说这个看起来惊人的谱宽里,九成来自级联生成的厚尾分布,只有一成来自时序结构。级联过程同时制造了厚尾和聚集,MF-DFA 的谱宽把两者混在一起报账。

真实金融数据上这个问题更尖锐——收益厚尾是铁一般的典型事实,任何序列不做打乱对照就宣称”发现多重分形记忆”,大概率只是在重新发现”收益有厚尾”这个 1963 年 Mandelbrot 就写过的常识。打乱检验不是可选项,是 MF-DFA 结论成立的前提

七、坑位备忘录#

坑一:谱宽 ≠ 可预测性。 Δα 度量标度结构的丰富度,不承诺任何方向信息。“多重分形性强的市场更低效所以更可预测”是文献里流传甚广的滑坡推理,中间每一步都需要独立证据。

坑二:负 q 在小样本上会爆炸。 q<0 时权重集中在方差最小的窗口,若某窗口去趋势后残差几乎为零,Fq/2F^{q/2} 直接发散。序列短于 ~4000 点时建议把 q 限制在 [−3, 3],并检查 log-log 图的线性度而不是盲目拟合。

坑三:去趋势阶数是超参数。 本文用一阶(线性去趋势,即 MF-DFA1)。若序列含慢周期或多项式趋势,低阶去趋势会把趋势残余误报为长记忆。稳健做法是 m=1,2,3 各跑一遍:结论随 m 剧变的部分不可信。

坑四:尺度范围决定一切。 拟合区间取 [16, N/8] 是惯例而非真理。太小的 s 受离散化噪声污染,太大的 s 窗口数不足统计失效。发表级的结论应报告谱宽对尺度区间选择的敏感性。

八、结论#

MF-DFA 值得进工具箱的理由:它是少数能按波动大小分层刻画记忆结构的工具,40 行 numpy 就能实现,谱宽 Δα 提供了一个紧凑的 regime 描述量——本文实验里它把白噪声(0.006)、单分形长记忆(0.024)、多重分形级联(0.61)干净利落地分成三档,滚动版本对波动聚集 regime 的切换响应清晰(0.11→0.35)。

但它的正确用法自带三条纪律:先跑打乱对照分离厚尾与记忆的贡献(本实验九成谱宽来自厚尾);把 Δα 当描述性仪表而非交易信号报告结论对去趋势阶数和尺度区间的敏感性。守住这三条,多重分形分析是一台严肃的显微镜;丢掉任何一条,它就退化成量化玄学的又一个发生器。

多重分形 DFA:用多重分形谱刻画不同尺度下的记忆结构
https://blog.halo26812.eu.org/blog/multifractal-dfa-analysis
Author halo
Published at 2026年7月25日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨