halo 的技术博客

返回

市场崩盘最诡异的地方,不是「跌了多少」,而是跌得太整齐——2008 年、2020 年 3 月,不是某几只股票在跌,是全市场一起跌、相关性瞬间拉满。这种「从各走各的,到步调一致」的转变,在物理里有个现成名字:相变(phase transition)

结论先放这:金融市场在恐慌时会经历一次真实的「二级相变」,临界点是系统性风险激增的精确标记。 我们用统计物理的伊辛模型(Ising)来建模这件事——每个自旋是一支股票(涨 +1 / 跌 −1),耦合强度 J 是股票之间的「趋同/传染」强度,温度 T 代表市场流动性与情绪噪声。当 T 从高(平静、无序)降到低(恐慌、有序),系统会越过一个临界温度 Tc,这时相关性半径(相关长度 ξ)发散,全市场被「锁」进同一个方向——这就是崩盘的数学相变。

所有图表均由下文 Python 真实计算(红黑子格 Metropolis 蒙特卡洛),非占位图。

二维铁磁 Ising:低温 T=1.5 自旋有序成块、高温 T=3.5 自旋杂乱无序,越过 Tc 秩序瞬间崩解

一、为什么是伊辛模型#

伊辛模型是统计物理里描述「局部相互作用如何产生全局序」的最小骨架。它问一个极简的问题:N 个只能取 ±1 的 spins,相邻两个如果「同向」就省能量(耦合 J>0),系统的总能量是

H=JijsisjH = -J \sum_{\langle ij\rangle} s_i s_j

  • 低温(T 小,噪声弱):系统倾向于省能量 → 自旋们对齐 → 出现宏观「磁化」M = Σsᵢ ≠ 0,也就是有序相
  • 高温(T 大,噪声强):热涨落压过耦合 → 自旋乱跳 → 平均磁化 ≈ 0,也就是无序相
  • 中间某个临界温度 Tc,系统从无序「突变」成有序——这就是相变

sᵢ 翻译成股票、J 翻译成个股联动强度、T 翻译成市场情绪噪声,问题的金融含义立刻浮现:当联动 J 相对噪声 T 足够强时,市场会自发组织成「同涨同跌」的宏观态。这正是系统性风险(systemic risk)的核心。

二、从零搭一个二维伊辛蒙特卡洛#

下面这段就是全文所有数字的来源。关键细节:必须用「红黑子格(red-black)」更新——先把棋盘格上同色的自旋一起提议翻转,再翻另一色。如果整张格子同时翻转,双分图(bipartite)格点上两个子格会彻底解耦、净磁化永远被钉在 0(这是并行更新的经典坑,下面「陷阱 2」细说)。

跑一遍 L=60 的格子,低温和高温判若两「世界」:

  • T=1.5(低温):自旋对齐成大片同色块,稳态每自旋磁化 m ≈ +0.149(有序);
  • T=3.5(高温):自旋杂乱如盐粒,稳态每自旋磁化 m ≈ 0.0009(无序)。

这张「秩序 vs 混乱」的对比图,就是相变最直观的面孔。

三、维度决定命运:一维没有相变,二维才有#

物理里有个反直觉事实:一维 Ising 永远没有相变(任意有限温度都无序),只有二维及以上才存在有限临界温度 Tc。我们用一维单链蒙特卡洛,和二维的 Onsager 精确解对照——后者在 Tc = 2/ln(1+√2) ≈ 2.269 处给出自发磁化的闭式:

m=[1sinh(2βJ)4]1/8,T<Tcm = \left[1 - \sinh(2\beta J)^{-4}\right]^{1/8}, \quad T < T_c

def onsager_m(T, J=1.0):
    Tc = 2.0 / np.log(1 + np.sqrt(2))
    if T >= Tc:
        return 0.0
    b = 1.0 / T
    return float((1 - (1.0 / np.sinh(2 * b)) ** 4) ** (1/8))
python

画出来就是下面这条曲线——一维那条(绿)在任意 T 都软趴趴地贴近 0,二维那条(红)在 Tc ≈ 2.269 处「咔」地一下立起来

维度决定命运:一维 Ising 没有相变,二维 Ising 在 Tc≈2.269 处磁化突变(Onsager 精确解对照蒙特卡洛)

金融启示:「联动」要能引发系统性相变,必须高于某个维度阈值(现实市场是高度互联的网络,远超一维)。 零散的两两相关不会让全市场锁死,只有足够稠密的连接(高维、小世界网络)才撑得起真正的崩盘相变。

四、临界涨落的两个尖峰:比热与磁化率#

相变不是「磁化掉下去」这么简单,它伴随涨落的爆发。两个观测量在 Tc 附近会有特征尖峰:

  • 比热 C = Var(E)/T²:能量涨落在 Tc 最大(系统对温度最敏感);
  • 磁化率 χ = Var(M)/T:磁化涨落在 Tc 最大(任意小扰动都被放大成宏观序——这正是「相关性发散」)。
def c_vs_T(L, Tvals, seed0):
    return np.array([ising2d(L, T, seed=seed0+k, sweeps=1800, burn=500)[1].var()
                     / (T*T) / (L*L) for k, T in enumerate(Tvals)])

def chi_vs_T(L, Tvals, seed0, sweeps=2400):
    return np.array([ising2d(L, T, seed=seed0+k, sweeps=sweeps,
                     burn=max(400, sweeps//4))[0].var()
                     / (T*(L*L)) for k, T in enumerate(Tvals)])
python

L=40 格子上算实,两个尖峰都干净地落在 Tc 附近:

临界涨落:二维 Ising 比热在 Tc≈2.267 出现尖峰 C≈1.89(每自旋),标记系统对温度最敏感处

临界协动:二维 Ising 磁化率在 Tc≈2.287 剧烈发散 χ≈160(每自旋),对应「全市场相关性暴涨」

数值结果:比热峰位 T ≈ 2.267(C ≈ 1.89/自旋),磁化率峰位 T ≈ 2.287(χ ≈ 160/自旋)——两者都把 Tc 钉在 2.269 附近。注意磁化率的峰比价高出两个数量级:它量的是「涨落被放大」的程度,金融上就是危机里个股收益相关性半径的发散——平时各走各的,危机一来,连最不相关的两只股票都开始同涨同跌。

五、有限尺寸标度:蒙特卡洛把 Tc「还原」出来#

现实里你永远只有有限样本(有限 N 只股票、有限交易日),临界点会被「抹厚」。物理的标准解法是有限尺寸标度(finite-size scaling):不同尺寸 L 下,χ 的峰位 T_peak(L) 满足

Tpeak(L)TcL1/νT_{\text{peak}}(L) - T_c \sim L^{-1/\nu}

ν 是相关长度临界指数(二维 Ising 的 ν=1)。于是用几个不同的 L 跑峰位,再外推 L→∞,就能把真实 Tc 还原出来:

Ls = [16, 24, 32, 40]
peaks = []
for Lj, seed in zip(Ls, [700, 710, 720, 730]):
    Tv = np.linspace(Tc - 0.6, Tc + 0.6, 22)
    sw = max(1600, Lj * 70)
    chiN = chi_vs_T(Lj, Tv, seed0=seed, sweeps=sw)
    peaks.append(Tv[np.argmax(chiN)])
nu = 1.0
fit = np.polyfit(1.0 / np.array(Ls) ** (1/nu), peaks, 1)
Tc_extrap = fit[1]    # 外推到 L → ∞
python

四个尺寸(16/24/32/40)的峰位分别是 2.298 / 2.298 / 2.355 / 2.298,线性外推得到 Tc ≈ 2.337,和精确解 2.269 仅差约 3%:

有限尺寸标度外推:蒙特卡洛把临界温度 Tc 从有限格子还原到 ≈2.337(Onsager 精确解 2.269)

这正是金融临界性的内核:你不需要无限历史,只要用「不同窗口长度/不同股票子集」做标度外推,就能把市场当前的「系统性风险临界距离」估出来——离 Tc 越近,越危险。

六、四类真实陷阱(必看)#

1. 一维没有相变,别用链状模型假装能预测崩盘。 物理上严格证明:一维 Ising 的 Tc=0,任何有限温度都无序。如果你把股票排成一条时间序列链、只用「相邻相关」去建模系统性风险,数学上保证你永远看不到相变——它压根不存在。必须用高维/网络结构,临界性才立得住。

2. 并行整格翻转会让磁化恒为 0(红黑更新陷阱)。 这是最隐蔽的坑:若每一遍把整张格子所有自旋同时提议翻转,双分图的两个子格彻底解耦,净磁化被结构性钉死在 0,于是你「算出来」所有温度都无序、永远找不到 Tc。正确做法是红-黑子格交替更新(先翻一种颜色、再翻另一种),保住细致平衡。本文代码就是这个写法。

3. 有限尺寸会抹平临界尖峰。 你用的 L 越小,χ 在 Tc 的尖峰越低、峰位越偏(我们 L=16 的峰位已经漂到 2.30 一带)。直接拿小样本峰位当 Tc 会系统性高估「当前风险距离」。务必做尺寸外推,或至少报告尺寸依赖。

4. 真实金融市场不是二维方格。 伊辛方格的 Tc、ν 是格子几何决定的;真实股票网络是复杂网络(小世界、无标度),临界指数和 Tc 都不同。本文的价值是机制与方法的演示(相变、涨落尖峰、有限尺寸标度),不是给你一个能直接套行情的 Tc 数字。落地时要换成对应网络拓扑的模型(或纯经验标度),不要抄 2.269 这个方格常数。

结语#

伊辛模型给金融的最锋利一刀,是把「崩盘」从一句模糊的恐慌叙事,变成了一个有临界温度、有相关长度发散、能数值还原的物理相变。二维蒙特卡洛干净地复现了这一切:比热尖峰在 2.267、磁化率尖峰在 2.287、有限尺寸外推把 Tc 还原到 2.337(真实 2.269)。但记住四条边界——一维无相变、红黑更新保平衡、有限尺寸必外推、真实市场非方格。下回有人问「系统性风险能不能量化」,你可以说:能,它藏在市场越过临界温度的那一刻。

伊辛模型金融临界性:用「自旋翻转」把市场崩盘的相变算出来
https://blog.halo26812.eu.org/blog/ising-model-finance
Author halo
Published at 2026年7月23日
版权声明 CC BY-NC-SA 4.0
Comment seems to stuck. Try to refresh?✨