← 返回综合页

LPPLS 泡沫识别 · A股主要指数

正在加载…

正 / 负泡沫置信度(CI,研报主口径)

参数与有效性检验

通过 Sornette 组常用约束(B<0、|C|<1、阻尼≥0.8、振荡≥2.5、t_c 不在搜索边界)才计入「有效」。 下列参数若顶在网格边界,说明模型在当前窗口下无法唯一识别,不能作为泡沫证据。

三大泡沫指标(东证期货研报口径)

CI 泡沫置信度:当前时点所有拟合窗口中,被判定为合格泡沫窗口的比例(正泡沫 B<0 / 负泡沫 B>0)。
CP 泡沫崩盘概率:基于风险率生存函数 1−exp(−∫h),未来一个交易日内至少崩盘一次的概率。
DTC 泡沫饱和度:(t2−t1)/(t_c−t1),泡沫已走过的标准化时间,越接近 1 越接近临界点。
口径提示:本表按研报的多窗口方案计算(窗口 240→30 日, 临界点须在未来 21 个交易日内,并施加振荡次数、阻尼与 ADF 检验);上方「泡沫风险评分」用的是 单一 500 日窗口、临界点可在 60 日内。两者窗口与约束不同,方向出现分歧是正常的——以本表的一致性判断为准。

想看模型怎么算出来的?

切换到「模型逻辑」页签,可以看到公式拆解、三个组成部分的图示、约束条件的由来、 评分构造、如何读数以及模型的失效场景。 前往模型逻辑 →

为什么用 LPPLS 识别泡沫顶点

泡沫不是一个价格数字,而是一段结构:价格越涨越快,参与者的决策周期一层层缩短, 买卖双方在越来越高的位置上反复换手。Sornette 等人的观察是——这种「加速 + 分级响应」会在价格序列里留下自相似痕迹,并且在临界点前出现越来越密的震荡。

LPPLS 就是把这个结构写成一个可以外推的式子。它不预测「明天涨跌」, 而是回答:如果当前这段加速结构继续自相似地延伸,它的奇点(临界时间 t_c)大致落在哪里。

一句话:幂律项负责「越涨越快」,对数周期项负责「越涨越抖」, 两者叠在一起外推,奇点就是模型认为的泡沫临界点。

1. 公式拆解

ln p(t) = A + B · f^m + C · f^m · cos(ω·ln f − φ)
f = (t_c − t) / τ   (τ 为窗口长度,使 f 落在 (0,1])
项含义读数
At → t_c 时对数价格的渐近水平临界点附近的理论价格 ≈ eA
B幂律项系数,描述加速方向B < 0 才是上行泡沫;B > 0 说明价格在减速(反泡沫/阴跌)
m幂律指数越大,加速越"陡";0.1–0.9 是历史泡沫的常规区间
C、φ对数周期振荡的幅度与相位|C| 越小,震荡越弱,越接近纯幂律
ω对数频率越大,震荡越密;6–13 对应"周期逐渐缩短"的典型形态
t_c临界时间(奇点)泡沫破裂/反转的理论时点,是模型最关心的输出

2. 为什么取对数价格

泡沫关心的是相对涨幅而非绝对点位:从 3000 到 4000 与从 4000 到 5300 是同一段 33%。 取对数后,「涨同样的百分比」在纵轴上等距,幂律结构才具有尺度不变性。 同时 B<0 的条件也只有在对数坐标下才写作「价格低于渐近线 A 并加速靠近」。

3. 三个组成部分如何叠加

横轴为「距临界点的交易日」(对数刻度,越靠右越接近 t_c)。灰色虚线是纯幂律加速项, 蓝色点线是对数周期震荡项,红色实线是两者叠加后的 LPPLS —— 越接近临界点, 加速越陡、震荡越密,这就是模型要识别的特征。

4. 为什么能解出来:线性化

LPPLS 看起来是 7 个参数的非线性拟合,但只需展开余弦项:

C·f^m·cos(ω·ln f − φ) = C₁·f^m·cos(ω·ln f) + C₂·f^m·sin(ω·ln f)
其中 C₁ = C·cos φ,C₂ = C·sin φ

⇒ ln p = A·1 + B·u + C₁·v + C₂·w   (对 A,B,C₁,C₂ 完全线性)

于是给定 (t_c, m, ω),剩下的四个系数可以用普通最小二乘一次解出。 只需在 t_c × m × ω 的网格上循环,取残差最小的解即可—— 不需要非线性优化器,也就避开了局部极小和初值敏感的问题。

本页网格:t_c 从最后交易日 +1 到 +60(步长 3)、m 0.1–0.9(步长 0.1)、 ω 6–13(步长 0.5),单指数约 3,000 次最小二乘。

5. 约束条件:为什么不能只看拟合优度

任意一条上升曲线都能被这个式子"拟合"得很像,所以必须用先验约束筛掉伪解。 这正是 LPPLS 最容易被滥用的地方:只看 R² 会得出几乎全是泡沫的结论。

参数搜索范围筛选条件含义
m 幂律指数(0, 1)0.1 ~ 0.9 保证"价格变化速度发散、但价格水平有限"
ω 振荡频率(1, 20)3 ~ 16 剔除频率过高(拟合噪声)或过低(识别不出周期)的解
t_c 临界时间[t₂, t₂+0.5(t₂−t₁)]t₂ ~ t₂+21 日 模型只识别"未来较近"的泡沫,不做远期外推
振荡次数 O—≥ 2 O = (ω/2π)·ln[(t_c−t₁)/(t_c−t₂)],窗口内至少两个完整周期
阻尼系数 D—≥ 0.4 D = m|B|/(ω|C|),要求幂律加速主导、而非振荡主导
残差平稳性—ADF p < 0.01 实际价格与拟合曲线的残差不能有单位根
振荡显著性—Lomb 虚假概率 < 1% 去趋势后在对数时间轴上确有周期结构(本页暂未实现,见下方说明)
正泡沫 vs 负泡沫:B < 0 对应正泡沫(加速上涨),B > 0 对应负泡沫(加速下跌)。 两者形态相反,但都要求「趋势加速 + 振荡加密」同时出现。注意 LPPLS 的奇点体现在价格变化速度,而不是价格水平—— 当 t→t_c 时 (t_c−t)^m→0,对数价格收敛到有限水平 A,但变化速度发散。
边界解是本页最常出现的陷阱。如果 m 顶在 0.9、或 t_c 顶在搜索范围端点上, 说明最优解被网格"卡住"了,此时即使 R² 很高也不能当作泡沫证据。 页面会明确标出「m 顶界」「t_c 触边界」,并相应扣分。

6. 三大泡沫指标:CI / CP / DTC

单窗口拟合只回答"这一段像不像泡沫",但同一段行情换一个观察窗口,结论可能完全不同。 东方证券研报因此用多窗口构造三个指标,分别回答三个问题:泡沫是否存在、短期风险多大、离临界点还有多远。

窗口方案:固定观察日 t₂,窗口长度从 240 个交易日逐步缩短到 30 个交易日 (原文按 1 日步长生成 210 个窗口;本页为控制计算量按 10 日步长生成 22 个), 每个窗口独立拟合一次 LPPLS,得到一组参数。

指标定义怎么读
CI 泡沫置信度 CI± = Nq± / N
N 为全部窗口数,Nq± 为通过全部筛选条件的正/负泡沫窗口数
0~1。越接近 1,说明"当前是泡沫"这件事被越多不同长度的窗口支持。CI 不是崩盘概率—— 它衡量的是形态的一致性。
CP 泡沫崩盘概率 CP = 1 − exp(−∫_{t₂}^{t₂+1} h(s) ds)
风险率 h(t) = m|B|(t_c−t)^{m−1} / [K + |B|((t_c−t₁)^m − (t_c−t)^m)],K=0.1
未来一个交易日内至少崩盘一次的概率。每个合格窗口算一次,再组内取均值。 正泡沫对应 CP⁺(向下崩),负泡沫对应 CP⁻(向上反转)。
DTC 泡沫饱和度 DTC = (t₂ − t₁)/(t_c − t₁) 0~1,把"泡沫已经走过的时间"标准化。越接近 1 越接近临界点。 不需要到 1 才崩盘,实际转折可能提前。
三者怎么配合看:CI 高说明"很多窗口都认为这是泡沫";CP 高说明"这些窗口给出的短期崩盘风险大"; DTC 高说明"这些泡沫已经走到接近临界点"。理想的高危信号是三者同时抬升—— 例如研报中 2015 年 5 月底 IF 的 CI⁺ 与 CP⁺ 同步上升、DTC⁺ 逼近 1。 若只有 CP 高而 CI 低(如 2015 年 4 月),说明只是少数窗口给出的零散警报,参考价值有限。
本页实现与原文的差异(务必知悉):① 窗口步长 10 日(原文 1 日); ② 未实现 Lomb–Scargle 谱检验(原文用于确认振荡显著性),目前只用了参数筛选 + ADF; ③ 风险率公式 (2-4) 在原文中是图片,本页采用 Sornette 框架的标准形式,K=0.1 与原文脚注一致; ④ 为排除退化解,要求 t_c 至少在观察日之后 5 个交易日。

7. 附加:单窗口结构评分(辅助)

raw = 100 × ( 0.45 · q_fit + 0.30 · q_param + 0.25 · q_time )
  • q_fit(45%):相对「对数线性趋势」的增量解释力 ΔR²/0.05。 用增量而不是绝对 R²,是因为任何上涨行情用一条直线拟合都能有 0.5–0.9 的 R²; 只有 LPPLS 比直线明显解释得更多,才说明存在额外的周期结构。
  • q_param(30%):B<0(40%)、|C|<1(25%)、阻尼≥0.8(20%)、振荡≥2.5(15%)。
  • q_time(25%):1 − 剩余交易日/前瞻期,越接近 t_c 分越高。
  • 打折:t_c 触边界 ×0.55;阻尼不足 ×0.65;两个以上参数顶界 ×0.70。
评分含义
≥ 70(高危)结构完整、参数合规、临界点临近
50–69(警戒)结构基本成立但存在瑕疵
30–49(观察)有迹象但不满足全部约束
< 30(偏低)未识别出可信的泡沫结构

只要有一条硬约束不满足,状态会直接显示为「观察(具体原因)」,不会给出"高危"。

8. 怎么读这张表

  • 先看状态,再看 t_c。状态是「观察(m 顶界)」时,t_c 的具体日期没有参考价值。
  • 看 ΔR²。它衡量 LPPLS 比一条对数直线多解释了多少。接近 0 说明模型没有提供额外信息。
  • 看阻尼 d。d 很小意味着价格更像"平稳趋势"而不是"加速+震荡",泡沫结构不明显。
  • 看振荡次数。少于 2.5 说明样本内周期不完整,ω 的估计不可靠。
  • t_c 不是"必跌日"。它是模型外推出的奇点,真实反转可能提前、延后,甚至以横盘方式消化。

9. 模型什么时候会失效

  • 政策/流动性突变:外生冲击会立刻打断自相似结构,模型无法预知。
  • 平稳趋势行情:没有分层加速与震荡,优化器只能把参数推到边界(本页当前多数指数即属此类)。
  • V 型反转:临界点前没有足够的对数周期振荡,模型会低估风险。
  • 窗口敏感:同一段行情换 365 / 500 / 750 日窗口,t_c 可能相差数月。
  • 多解性:不同 (m, ω) 组合可能给出相近残差但差异很大的 t_c。

10. 与行业拥挤度的关系

两个模型看的是不同维度,正好互补:

维度行业拥挤度LPPLS
观察对象资金/交易是否过度集中价格结构是否加速到临界
数据类型量、价、资金流、情绪(16 个指标)价格时间序列
时间尺度日频,滚动分位数百个交易日的整体结构
典型输出哪些行业拥挤 / 是否共振临界时间 t_c 与泡沫评分
互补方式拥挤度提示「谁在过热」,LPPLS 提示「整体价格结构是否进入加速末端」;两者同时报警时信号更有分量

11. 实现与复现

  • 数据:新浪财经指数日线(经 AkShare),每日收盘价;
  • 窗口:默认 500 个交易日,前瞻 60 个交易日,可在命令行调整;
  • 求解:3000 次网格 + 线性最小二乘,单指数 2–5 秒;
  • 代码:lppl_analysis.py(模型)、lppl_web.py(页面)、run_lppl.py(入口);
  • 复现:python run_lppl.py --window 500 --horizon 60。
免责声明:LPPLS 是结构性模型,不是确定性预测器。本页所有评分与 t_c 都是「在当前窗口与参数约束下」的拟合结果,不代表市场必然按此演绎。 任何单一模型都不应作为交易决策的唯一依据。