曼德博分形第四章:波动率的集群效应与多重分形交易时间
Read in English为什么大幅波动会成群出现、时钟时间与交易时间的区分,以及构建多重分形时间形变模型。
🔊 聆听文章 (Listen to Article)
曼德博分形第四章:波动率的集群效应与多重分形交易时间
"市场的时间不是钟表上均匀流逝的时间,而是一种会被恐慌压缩、被平静拉伸的橡皮时间。理解这种交易时间与时钟时间的区别,是理解波动率集群现象的关键。" —— 本华·曼德博
"大波动跟着大波动,小波动跟着小波动"
曼德博在研究棉花价格数据时发现了另一个后来被计量金融学广泛证实的现象:波动率集群效应(Volatility Clustering)——剧烈价格变动倾向于成群出现,而平静期也倾向于成群出现,且这种集群模式本身具有分形般的自相似结构,在不同时间尺度上反复出现。
这一现象直接挑战了几何布朗运动模型的另一个核心假设:波动率恒定(Constant Volatility)。若波动率真的是一个恒定常数,那么大幅波动应该像抛硬币一样随机独立地散布在时间轴上,而不会成群聚集。
波动率集群效应示意 (收益率绝对值随时间变化):
|收益率|
^
| ▄▄
| ████ ▄
| ████ ██ ▄▄▄
| ▄ ████ ▄ ████ █████ ▄
|████████████████▄▄▄▄▄▄▄▄██████▄▄████▄▄▄▄
+----------------------------------------------> 时间
恐慌期1(集群) 平静期 恐慌期2(集群)
时钟时间 vs. 交易时间:曼德博的时间形变理论
曼德博提出了一个革命性的概念区分:时钟时间(Clock Time)是物理世界均匀流逝的秒、分、时;而交易时间(Trading Time)是市场信息与交易活动的内在节奏,二者并不同步。
在市场恐慌期间,大量信息在极短的物理时间内涌入,交易活动异常密集——相当于交易时间被急剧"压缩",用更短的时钟时间容纳了更多的市场信息处理量。而在平静的横盘期,交易时间被"拉伸",同样的时钟时间内几乎没有实质性的价格发现活动。
$$\theta(t) = \int_0^t \phi(s) \, ds$$
其中 $\theta(t)$ 为累积交易时间,$\phi(s)$ 为时刻 $s$ 的"活动密度"函数(可用成交量或已实现波动率的代理指标估算)。价格过程在交易时间 $\theta$ 下更接近标准布朗运动,而在时钟时间 $t$ 下则呈现出集群化的肥尾特征。
GARCH 模型与多重分形级联模型的对比
计量经济学界后来用 GARCH(广义自回归条件异方差)模型部分刻画了波动率集群现象:
$$\sigma_t^2 = \omega + \alpha \epsilon_{t-1}^2 + \beta \sigma_{t-1}^2$$
其中 $\sigma_t^2$ 为条件方差,$\epsilon_{t-1}^2$ 为前一期的平方收益率冲击。GARCH 模型能捕捉波动率的短期均值回归特性,但曼德博指出 GARCH 仍然依赖单一时间尺度的自回归结构,无法完整刻画分形市场在多个时间尺度上同时存在的集群现象。
曼德博提出的多重分形级联模型(Multifractal Cascade Model)通过在多个时间尺度上迭代分配波动率权重,构建出天然具有跨尺度集群特性的模拟路径:
| 模型 | 时间尺度处理 | 集群特性还原度 |
|---|---|---|
| 几何布朗运动 (GBM) | 单一恒定波动率 | 无法产生集群效应 |
| GARCH(1,1) | 单一自回归时间尺度 | 部分还原短期集群 |
| 多重分形级联模型 | 多层级联的时间尺度 | 天然还原跨尺度自相似集群 |
import numpy as np
def multifractal_cascade_volatility(n_steps: int = 1024, levels: int = 10, m0: float = 0.6, seed: int = 7):
"""
简化的多重分形级联波动率生成器(二项式级联模型)
:param n_steps: 生成的时间步数,应为 2^levels
:param levels: 级联层数
:param m0: 级联乘子(0.5 < m0 < 1,越接近 0.5 集群效应越弱)
"""
np.random.seed(seed)
weights = np.ones(1)
for _ in range(levels):
n = len(weights)
m1 = np.random.choice([m0, 2 - m0], size=n)
m2 = 2 - m1
weights = np.column_stack([weights * m1, weights * m2]).flatten()
weights = weights[:n_steps] / np.mean(weights[:n_steps])
returns = np.random.normal(0, 1, n_steps) * np.sqrt(np.abs(weights))
return returns, weights
returns, vol_weights = multifractal_cascade_volatility()
print(f"生成收益率序列长度: {len(returns)}")
print(f"波动率权重范围: [{vol_weights.min():.3f}, {vol_weights.max():.3f}]")
print(f"实现波动率的峰度 (肥尾程度指标): {((returns - returns.mean())**4).mean() / returns.var()**2:.2f}")
可执行的操作规则
- 在恐慌期主动收缩仓位杠杆,而非等待波动率指标滞后确认。 波动率集群意味着一旦市场进入高波动状态,后续数个交易日大概率延续高波动,静态仓位模型必须叠加动态波动率目标(Volatility Targeting)机制。
- 区分"日历到期"与"交易活跃度"两种时间维度设计期权策略。 跨越财报、议息会议或长假的期权定价,应按预期信息流密度调整隐含波动率预期,而非简单按自然日历天数线性折算。
- 不要用单一 GARCH 参数应对所有市场环境。 多重分形证据表明波动率集群本身具有跨尺度结构,建议同时监控多个时间窗口(如 5 日、20 日、60 日已实现波动率)的相对位置,而非依赖单一模型输出。