评估分形指数和Hurst指数预测金融时间序列的能力(基础篇)
「分形维与Hurst指数能否预判行情」
在 MT5 的 MQL5 环境里,分形指数(Fractal Dimension)和 Hurst 指数常被用来判断一段金融时间序列到底是随机游走,还是带记忆性的趋势/反趋势过程。Hurst 值落在 0.5 附近,序列倾向接近随机;高于 0.5 提示持续性(趋势可能延续),低于 0.5 则暗示均值回复概率更高。 这套思路对外汇与贵金属同样成立,但这两类品种杠杆高、跳空频繁,单纯靠指数读数直接下单属于高风险操作,必须配合仓位与止损规则。 一篇 2019 年的实测把相关算法跑在 MT5 上,样本覆盖多个品种,社区原文获 6 160 次查看、41 条讨论,说明交易者对该类非线性工具确有验证需求。你可以自己开 MT5 用下面代码算一段 EURUSD 的 Hurst,看它近 200 根 K 线究竟偏记忆还是偏随机。
class="type">class="kw">double HurstExponent(class="type">class="kw">double &price[], class="type">int n) { class="type">class="kw">double rs_sum = class="num">0.0; class="type">int count = class="num">0; for(class="type">int i = n; i < ArraySize(price); i++) { class="type">class="kw">double mean = class="num">0.0; for(class="type">int j = i - n; j < i; j++) mean += price[j]; mean /= n; class="type">class="kw">double max_dev = -class="num">1e9, min_dev = class="num">1e9, run_sum = class="num">0.0; for(class="type">int j = i - n; j < i; j++) { run_sum += price[j] - mean; if(run_sum > max_dev) max_dev = run_sum; if(run_sum < min_dev) min_dev = run_sum; } class="type">class="kw">double range = max_dev - min_dev; class="type">class="kw">double stddev = class="num">0.0; for(class="type">int j = i - n; j < i; j++) stddev += (price[j] - mean)*(price[j] - mean); stddev = MathSqrt(stddev / n); if(stddev > class="num">0) { rs_sum += range / stddev; count++; } } class="type">class="kw">double rs_avg = rs_sum / count; class="kw">return MathLog(rs_avg) / MathLog(n); }
价格序列为什么被当成局部分形
现代金融市场的价格运动同时具备混沌与自稳两面:海量参与者制造噪声,而群体行为又反复把价格拉回某种平衡。经济物理学把这种社会互动留下的轨迹,视为一种可描述的时间序列。 传统研究把价格序列定义为跨周期的分形,从几分钟到几十年都呈现比普通自然过程更复杂的标度行为。但经典分形维数算法往往要吃下 10000–100000 个样本,覆盖的时间段里市场状态可能已翻转好几次,对实盘没直接用。 所以我们真正缺的,是在短线窗口里快速估出局部分形维数的办法。后面会基于数值递归思路,演示怎么在 MT5 上对一个品种的小样本 K 线直接算出这个值,用来辅助判断当前走势是处于延展还是收敛。
◍ 用分形维数看价格序列的独立性
分形维数衡量一个数据集在空间中占据体积或面积的方式,对金融时间序列而言,它直接反映收盘价序列 {Close(t)} 的统计结构。若各级别相互独立、图表无明显趋势,序列行为接近白噪声,此时分形维数 D 会趋近所在平面的拓扑维数,即 D→2。 当 {Close(t)} 级别不再独立,D 会明显小于 2,这意味着序列存在“记忆”:某些区间内出现向上或向下趋势,并与无定义周期交替。这种偏离 2 的程度,可作为判别行情是否含趋势成分的概率化依据,外汇与贵金属市场波动剧烈、杠杆风险高,D 值仅作结构参考而非方向断言。 实操上,可在 MT5 用历史收盘价跑分形维数估算,对比震荡段与趋势段的 D 差异;若某贵金属品种近期 D 从 1.95 跌到 1.65,倾向说明独立性破坏、趋势记忆增强,但需结合多周期验证。
「用 Hurst 指数反推分形维数」
评估时间序列的分形维数,Hurst 指数 H 是一条实用路径。核心关系很直接:D = 2 - H,而 H 本身由 R/S 分析给出,H = log(R/S) / log(N/2)。其中 R 是 Close(t) 在 i=1..N 窗口内的最大值减最小值,S 是该收盘序列的标准差。 当 H 落在 0.5 到 1 之间,{Close(t)} 序列倾向被判定为持久或抗趋势——它不是纯随机游走,含有可识别的趋势成分,行为在概率上可被预测;H 越逼近 1,序列值之间的相关性越强。外汇与贵金属这类高波动品种,用此结论下单仍属高风险,局部反转可能随时打断相关性。 这套方法有个硬伤:想要 H 的可靠估计,往往需要数千个序列值。样本不够,算出来的 H 可能失真;而且它默认序列服从正态规律,实盘价格经常不买这个账。长周期里 D 和 H 会变,要把局部动力学和分形维数挂钩,就得在滑动窗口里就地算 D,而不是拿全样本糊弄。