跳至主要內容
台股研究 約 13 分鐘閱讀

LPPL 泡沫模型實測:股市崩盤預測原理、Python 實作與 0050 擇時回測(八年僅一次警報且為誤報)

LPPL 泡沫模型用對數週期冪律描述股市崩盤前的超指數上漲與加速震盪,曾對 2000 年科技泡沫與 2015 年上海股災提出預警。本文拆解公式與 LPPLS 信心指標,用 Python 對 0050 做 8,265 次滾動擬合並回測泡沫擇時策略:年化 23.93% 輸給買進持有的 25.05%,最大回撤同為 -33.96%,八年只出場一次且事後證明是誤報;全部程式碼可下載重現。

用數學偵測泡沫 CAGR 23.9% Sharpe 1.18

股市崩盤前,價格往往越漲越快,且伴隨節奏越來越密的震盪。LPPL 泡沫模型(Log-Periodic Power Law,對數週期冪律模型)把這兩個特徵寫成一條可以擬合的方程式,從價格本身推估崩盤機率最高的時間區間。本文拆解這個模型的原理與公式,再用 finlab 的台股資料對 0050 的 435 個觀測日做 8,265 次 LPPL 擬合,把「泡沫警報」變成可回測的擇時訊號,檢驗它在台股大盤上到底有沒有用。

LPPL 泡沫模型擇時策略與 0050 買進持有的權益曲線對照,CAGR 23.93% 對 25.05%,最大回撤同為 -33.96%

回測結論的關鍵數字(2018-01 至 2026-06,數據截至 2026-06-09):

指標 LPPLS 泡沫擇時(門檻 0.2) 0050 含息買進持有
年化報酬(CAGR 23.93% 25.05%
總報酬 510.7% 558.5%
夏普比率 1.18 1.22
月索提諾比率 1.85 1.92
最大回撤(MDD) -33.96% -33.96%
持股時間比例 99.5% 100%
進出次數 2 筆 0 筆

這是一個負面結果:在本文的設定下,LPPLS 擇時沒有打敗 0050 買進持有,最大回撤也一分沒少。八年半只觸發一次出場警報(2025-10-13),之後 0050 收盤最低只比訊號日低 2.4%,到資料截止日反而上漲了 72.1%。模型的原理依然漂亮、文獻戰績依然存在,但「對單一台股指數做擇時」這個用法,經過嚴格口徑的檢驗後並不成立。整個檢驗過程與可重現的程式碼,比結論本身更值得留下來。

股市崩盤可以預測嗎?LPPL 模型的歷史紀錄

LPPL 模型出自地球物理學家 Didier Sornette 的研究團隊。Johansen, Ledoit & Sornette (2000) 在〈Crashes as critical points〉中主張:金融崩盤類似物理系統的相變,當市場中交易者的模仿行為累積到臨界點,系統會在某段時間附近以高機率瓦解;崩盤前的價格因此呈現「超指數成長」加上「對數週期震盪」兩個可觀測的特徵。

這個模型最常被引用的應用案例包括:

  • 1990 年代末的納斯達克與 2000 年科技泡沫
  • 2006 至 2007 年的美國房市相關資產
  • 2008 年中的原油價格泡沫
  • 2015 年的上海股市泡沫(研究團隊在崩盤前公開發布預警,事後分析發表於 Sornette et al. (2015)
  • 2017 年底的比特幣泡沫

要把這份戰績讀得精確:LPPL 推估的臨界時間 tct_c 是「崩盤機率最高的時間區間」,模型本身允許泡沫在 tct_c 之前就破裂,也允許價格在 tct_c 之後平緩消化而不崩盤。把它當成日曆上圈好的崩盤日,是對這個模型最常見的誤用,也是本文回測想量化的問題。

泡沫的成因:從眾者與自主者的群體動力學

LPPL 的數學推導借用了統計物理,但背後的市場直覺很簡單。想像市場由兩類交易者組成:一類是「自主者」,依自己的研究判斷買賣;另一類是「從眾者」,看到別人買就跟著買、看到別人賣就跟著賣。每個人在不同時刻可能扮演不同角色,兩類人的訊息在市場網絡中不斷交換、互相影響。

平時,自主者的分歧意見讓市場保持多樣性,價格漲跌互現。但在泡沫後期,賺錢效應讓越來越多人放棄獨立判斷、加入從眾陣營,整個網絡的「一致性」越來越高。當一致性逼近臨界點,只要一個小擾動,幾乎所有人會在同一瞬間做出相同的賣出決定,價格於是崩跌。這就是「崩盤是內生的」這個觀點:壓垮市場的是結構本身的脆弱,外部利空只是扣下扳機。

這個機制同時對應 LPPL 公式的兩個特徵:模仿網絡的正回饋造成超指數上漲;而群體在「續漲」與「獲利了結」之間的拉鋸,造成節奏越來越快的週期性震盪。

LPPL 公式拆解:三個元素

LPPL 模型把泡沫期的對數價格期望值寫成:

lnE[p(t)]=A+B(tct)m+C(tct)mcos(ωln(tct)ϕ)\ln E[p(t)] = A + B(t_c - t)^m + C(t_c - t)^m \cos\big(\omega \ln(t_c - t) - \phi\big)

各參數的意義:

參數 意義 合格擬合的常見範圍
tct_c 臨界時間,崩盤機率最高的時點 落在資料窗格結尾附近
AA ttct \to t_c 時的對數價格上限 由線性回歸求出
BB 趨勢項強度,B<0B<0 代表價格向上加速(正泡沫) B<0B < 0
mm 冪律指數,控制加速的形狀 0.01<m<1.20.01 < m < 1.2
CC 震盪幅度相對趨勢的比例 C\lvert C\rvert 遠小於 B\lvert B\rvert
ω\omega 對數週期角頻率,控制震盪節奏加快的速度 2<ω<252 < \omega < 25
ϕ\phi 相位 無限制

把公式拆成三個元素看:

LPPL 泡沫模型三元素解剖圖,冪律超指數趨勢、log 週期震盪與臨界點 tc 的合成示意

  1. 冪律超指數趨勢 A+B(tct)mA + B(t_c - t)^m:一般的指數成長在對數座標上是直線,泡沫的對數價格卻向上彎曲,漲速本身在加速,並在 tct_c 處到達數學上的奇異點。
  2. 對數週期震盪 cos(ωln(tct)ϕ)\cos(\omega \ln(t_c - t) - \phi):價格圍繞趨勢上下擺動,且因為自變數是 ln(tct)\ln(t_c - t),離 tct_c 越近震盪週期越短,視覺上像彈簧被越壓越緊。
  3. 臨界點 tct_c:趨勢與震盪共同指向的時間奇異點,也是模型輸出的核心。

用一組虛構數字算一次 LPPL

以下用一家虛構公司的參數示範公式怎麼算(純屬教學示例,並非任何回測數據)。設 A=ln(200)5.30A=\ln(200)\approx 5.30B=0.18B=-0.18m=0.5m=0.5C=0.03C=0.03ω=8\omega=8ϕ=0\phi=0,臨界時間 tct_c 在第 300 個交易日。把不同的 tt 代入公式:

交易日 tt tct_c 天數 (tct)m(t_c-t)^m 趨勢項 B(tct)mB(t_c-t)^m 震盪項 模型價格
200 100 10.000 -1.800 +0.196 40.2 元
250 50 7.071 -1.273 +0.211 69.1 元
280 20 4.472 -0.805 +0.053 94.3 元
295 5 2.236 -0.402 +0.064 142.6 元
299 1 1.000 -0.180 +0.030 172.1 元

注意兩件事:第 200 到 250 天花了 50 天從 40.2 元漲到 69.1 元,而第 295 到 299 天只花 4 天就從 142.6 元漲到 172.1 元,這就是「漲速本身在加速」;同時震盪項的正負與大小隨 ln(tct)\ln(t_c-t) 擺動,造成價格沿途的高低起伏。反過來,當你在真實股價上量到這種結構,模型就能回推出那個共同指向的 tct_c

把公式套到真實股價:校準與線性化

擬合(校準)的目標是找一組參數 θ=(A,B,C,m,ω,ϕ,tc)\theta = (A, B, C, m, \omega, \phi, t_c),讓模型曲線與實際對數價格的殘差平方和最小:

minθ  t=t1t2(lnp(t)LPPL(t;θ))2\min_{\theta} \; \sum_{t=t_1}^{t_2} \Big( \ln p(t) - \text{LPPL}(t;\theta) \Big)^2

困難在於這是 7 個參數的非線性最佳化,目標函數佈滿局部最小值。本文 2020 年的第一版用遺傳演算法暴力搜尋全部 7 個參數,跑一次要數分鐘,而且每次執行結果都不同,這也是早期 LPPL 研究常被批評「同一份資料、兩篇論文、兩個答案」的原因。

Filimonov & Sornette (2013) 提出的線性化解掉了這個問題:把震盪項展開成 C1cos+C2sinC_1 \cos + C_2 \sin 之後,模型對 (A,B,C1,C2)(A, B, C_1, C_2) 是線性的,給定 (tc,m,ω)(t_c, m, \omega) 就能用最小平方法一步解出:

lnE[p(t)]=A+B(tct)m+C1(tct)mcos(ωln(tct))+C2(tct)msin(ωln(tct))\ln E[p(t)] = A + B(t_c-t)^m + C_1 (t_c-t)^m \cos\big(\omega \ln(t_c-t)\big) + C_2 (t_c-t)^m \sin\big(\omega \ln(t_c-t)\big)

於是非線性搜尋空間從 7 維降到 3 維,用一般的數值最佳化(本文採多起點 Nelder-Mead 搭配固定亂數種子)就能穩定收斂,單一窗格的擬合時間從分鐘級降到毫秒級,結果也完全可重現。這是把 LPPL 從學術玩具變成每天可以跑的指標的關鍵一步。

LPPLS 信心指標:從單一擬合到機率讀數

單一窗格的擬合仍然脆弱:換一個起始日,tct_c 可能差很多。Sornette et al. (2015) 在上海股災的實戰研究中使用的解法,是把「對窗格的敏感度」本身變成指標,稱為 LPPLS 信心指標(LPPLS Confidence Indicator):

Conf(t)=#{通過過濾條件的窗格}#{全部窗格}\text{Conf}(t) = \frac{\#\{\text{通過過濾條件的窗格}\}}{\#\{\text{全部窗格}\}}

具體做法:在每個觀測日,取多個不同長度的回看窗格(本文用 30 到 120 個交易日、間隔 5 天,共 19 個),每個窗格各做一次擬合,再用參數過濾條件判斷該擬合是否描述了一個結構完整的泡沫。本文採用的過濾條件:

  • 冪律指數 0.01<m<1.20.01 < m < 1.2,且 B<0B < 0(向上加速為正泡沫;B>0B > 0 則記為負泡沫,即超跌結構)
  • 角頻率 2<ω<252 < \omega < 25
  • tct_c 落在窗格結尾附近:t20.05dttct2+0.1dtt_2 - 0.05\,dt \le t_c \le t_2 + 0.1\,dtdtdt 為窗格長度)
  • 窗格內至少 2.5 次完整震盪:ω2πlntct1tct2>2.5\frac{\omega}{2\pi}\ln\frac{t_c-t_1}{t_c-t_2} > 2.5
  • 阻尼比 mBωC>0.8\frac{m|B|}{\omega|C|} > 0.8,確保趨勢項主導、震盪不至於蓋過趨勢

舉例來說,若某日 19 個窗格中有 6 個通過正泡沫過濾,當日正泡沫信心值就是 6/190.326/19 \approx 0.32,讀法是「約三分之一的時間尺度都看到同一個泡沫結構」。信心值越高,代表訊號對窗格選擇越不敏感,越值得當一回事。

Python 實作:用 finlab 資料計算 0050 的 LPPLS 信心指標

實作只需要一張還原股價表。用 finlab 套件取得含息還原價,核心的設計矩陣與單窗格擬合:

顯示程式碼
import numpy as np
from scipy.optimize import minimize
from finlab import data
 
# 取 0050 含息還原價(finlab 會自動引導登入)
adj_close = data.get("etl:adj_close")
price = adj_close["0050"].dropna()
log_price = np.log(price.values)
 
def lppl_design_matrix(t, tc, m, w):
    """Filimonov-Sornette 線性化:給定 (tc, m, omega),
    線性參數 (A, B, C1, C2) 用最小平方法解。"""
    dt = np.abs(tc - t) + 1e-8
    f = dt ** m
    g = f * np.cos(w * np.log(dt))
    h = f * np.sin(w * np.log(dt))
    return np.column_stack([np.ones_like(t), f, g, h])
 
def lppl_sse(theta, t, y):
    """殘差平方和:非線性參數只剩 (tc, m, omega) 三個。"""
    tc, m, w = theta
    X = lppl_design_matrix(t, tc, m, w)
    coef, _, _, _ = np.linalg.lstsq(X, y, rcond=None)
    residual = y - X @ coef
    return float(residual @ residual)
 
def fit_window(t, y, rng, n_starts=6):
    """多起點 Nelder-Mead 搜尋,rng 固定種子確保可重現。"""
    t2 = t[-1]
    window_length = t[-1] - t[0] + 1
    bounds = [
        (t2 - 0.2 * window_length, t2 + 0.2 * window_length),  # tc
        (0.01, 1.99),                                          # m
        (2.0, 25.0),                                           # omega
    ]
    best = None
    for _ in range(n_starts):
        x0 = np.array([rng.uniform(lo, hi) for lo, hi in bounds])
        result = minimize(lppl_sse, x0, args=(t, y),
                          method="Nelder-Mead", bounds=bounds)
        if best is None or result.fun < best.fun:
            best = result
    return best

完整版(含 19 個窗格的滾動計算、過濾條件、信心指標彙總與 finlab 回測)整理成可下載的 strategy.py,在一般筆電上跑一次約幾分鐘;所有亂數都釘了種子,每次執行會得到相同的數字。

回測:LPPLS 擇時能不能打敗 0050 買進持有?

有了每日的正、負泡沫信心值,就能設計一個大盤級的擇時規則。先看 0050 在 2018 到 2026 年的信心指標全景:

0050 還原價與 LPPLS 正負泡沫信心指標全景圖 2018 至 2026,紅色為正泡沫警報、綠色為負泡沫超跌訊號

整段期間,正泡沫信心值達到 0.1 以上的只有三波:2019 年 11 月初(約 0.105,持續一週後消退;三個多月後發生疫情崩盤,但訊號早已歸零)、2021 年 1 月下旬(約 0.1 到 0.16,首個訊號日為 2021-01-21;訊號出現後六個交易日內 0050 一度下跌 8.4%,反彈後 4 月見波段高點、5 月中再回檔,最低點較首個訊號日低 9.6%。這一波訊號之後確實跟著一段跌勢,但信心值始終沒越過 0.2 的出場門檻,策略並未因此出場)、以及 2025 年 10 月(全期最高 0.32)。負泡沫這一側更冷清:八年半只有 2022 年 10 月出現過一次非零讀數,最高 0.053,落在 2022-10-20,剛好在那輪空頭的底部附近;方向耐人尋味,但強度遠低於任何可操作的門檻。2020 年 3 月的疫情崩盤前後,正、負泡沫讀數都是零,V 型急跌並不符合模型假設的「結構在窗格內慢慢累積」。

下圖是回測期間正泡沫信心值最高的一天,以及當天通過過濾的最佳擬合曲線與 tct_c 估計區間:

0050 正泡沫信心最高觀測日 2025 年 10 月 13 日的 LPPL 擬合曲線與臨界時間 tc 估計區間

2025-10-13 這天,19 個窗格中有 6 個通過正泡沫過濾(信心值 0.32),合格擬合來自 60 到 100 天的窗格,推估的 tct_c 集中在觀測日之後 2 到 4 個交易日。事後看,0050 接下來八個月又漲了 72.1%。期間最低收盤價出現在 2025-11-24,僅較訊號日低 2.4%;若以峰谷計算,這八個月內的最大回撤為 -10.8%(2026 年 2 月下旬高點跌至 2026-03-31 低點),但那已是價格遠高於訊號日之後的事。對照模型推估「觀測日後 2 到 4 個交易日」的臨界區間,這次警報是清楚的誤報。

擇時規則用最簡單的狀態機,避免事後挑訊號:

項目 設定
標的 0050,全倉或空手兩種狀態
出場 正泡沫信心值 0.2\ge 0.2
回補 正泡沫信心值退回 0.1\le 0.1,或負泡沫信心值 0.2\ge 0.2(超跌反轉)
執行 信號以收盤資料計算,部位變更於次一交易日成交(finlab sim() 預設)
成本 finlab sim() 台股預設:手續費 0.1425%、證交稅 0.3%

結果(2018-01 至 2026-06):

指標 LPPLS 擇時 0050 買進持有
CAGR 23.93% 25.05%
總報酬 510.7% 558.5%
日夏普 1.18 1.22
日索提諾 1.60 1.67
月索提諾 1.85 1.92
最大回撤 -33.96% -33.96%
進出次數 2 筆(出場、回補各一次) 0 筆
持股時間 99.5% 100%

分段期間的表現:

期間 LPPLS 擇時 0050 買進持有
2018–2020 63.8% 65.5%
2021–2023 20.2% 20.2%
2024–2026 206.2% 226.8%

三段拆開看,輸的原因一目瞭然。2021 到 2023 兩者數字完全相同:這段期間沒有任何訊號越過門檻,策略全程持有,把 2022 年 -33.96% 的回撤原封不動吃下來,這正是「最大回撤一分沒少」的來源。2018 到 2020 的小差距來自 sim() 的進場成本與次日成交時滯。2024 到 2026 的差距則全部來自 2025 年 10 月那次誤報:出場後 0050 續漲,兩週後以高約 3.9% 的價格買回,加上一來一回的交易成本。一次誤報,八年的擇時努力就輸給了什麼都不做。

互動式回測報告可以拉開看每一筆進出:

穩健性檢查:出場門檻的敏感度

0.2 這個門檻會不會剛好挑到最差的參數?把出場門檻從 0.1 掃到 0.3(回補門檻同步設為出場門檻的一半),各門檻的結果:

LPPLS 擇時策略出場門檻敏感度分析,五種門檻下的 CAGR 與最大回撤全部落後 0050 買進持有

出場門檻 CAGR 日夏普 最大回撤 持股時間 進出次數
0.10 24.93% 1.22 -33.96% 99.0% 6 筆
0.15 24.87% 1.22 -33.96% 99.3% 4 筆
0.20 23.93% 1.18 -33.96% 99.5% 2 筆
0.25 23.93% 1.18 -33.96% 99.5% 2 筆
0.30 23.93% 1.18 -33.96% 99.5% 2 筆

五種門檻全部輸給買進持有,最大回撤一律 -33.96%,等於沒有躲過任何一次大跌。把門檻調低只是讓誤報變多(0.1 時六筆進出),並不會把真正的大跌抓出來。換句話說,結論對參數不敏感:問題出在訊號本身稀疏,而非門檻挑錯。這比「調出一組會贏的參數」更有參考價值,後者在這種訊號結構下只會是過擬合,判斷方法可以參考回測過擬合機率的實測

回測方法與限制

這些數字是怎麼算出來的,逐項交代:

項目 本文做法
交易成本 策略經 finlab sim(),預設含手續費 0.1425% 與證交稅 0.3%。0050 為 ETF,實際證交稅率 0.1%,本文未調整,屬偏保守估計
基準口徑 0050 含息買進持有為 etl:adj_close 還原價的純指數算術報酬,不含交易成本
滑價 未假設。0050 流動性極佳,但大額資金的實際衝擊取決於下單方式與規模,本文未估算容量
股票池 單一標的 0050,無選股池定義問題
流動性過濾 不適用(單一 ETF)
排除類別 不適用(單一 ETF),無生存者偏誤問題
前視偏差 信心指標只用觀測日當天以前的價格擬合;部位變更於信號日的次一交易日成交
權重與周轉 全倉或空手兩種狀態,主設定八年半共 2 筆交易,周轉率極低
樣本內外 全段 in-sample,未做樣本外驗證。門檻與過濾條件取自學術文獻慣例而非網格搜尋,敏感度分析見上節

LPPL 的限制與學術批評

把本文的負面結果放進文獻脈絡,有三件事要知道。

可證偽性的批評。 Brée & Joseph (2013) 系統性檢驗了 LPPL 對歷史崩盤的擬合,指出模型自由度高、結果對擬合區間敏感,部分宣稱的預測成功有事後選擇之嫌。這也是本文堅持固定種子、固定過濾條件、把所有窗格的通過比例攤開成信心指標的原因:與其展示一條挑過的漂亮擬合曲線,把失敗的窗格一起算進分母更接近真相,而真相是訊號很稀疏。

tct_c 是機率峰值,拿它對日曆會失望。 模型輸出的是「結構最可能瓦解的時間區間」,本文擬合案例的 tct_c 也只是觀測日後幾天的一個區間估計。2025 年 10 月的案例顯示,即使 6 個時間尺度同時指向同一個 tct_c,市場仍然可以再漲 72%。

個股不適用。 LPPL 只看價格結構,不看財報、月營收、籌碼。本文 2020 年的第一版曾把模型套在個股日馳(1526)上,用遺傳演算法擬合出「約 180 個交易日後崩盤」的推估;事後看,個股受大戶買賣與訂單消息的影響遠大於群體模仿動力學,那次擬合沒有參考價值,本次改版直接把它當成反面教材保留在這段。指數與大型 ETF 的參與者夠多、夠分散,才比較接近模型假設;即使如此,本文在 0050 上的結果仍然是負面的。想對個股做系統化的泡沫應用,請看用全市場統計取代單檔擬合的 LPPLS 選股做法

比特幣與美股也能測

LPPL 只需要價格序列,任何市場都能套用。我們做了一個免費的 Colab 泡沫檢測器,輸入任何 Yahoo Finance 收錄的代號(美股、台股、比特幣 BTC-USD 都可以)就能跑出擬合結果與 tct_c 推估。2017 年底的比特幣正是 LPPL 文獻中的經典案例:超指數上漲與越來越密的震盪都很典型,崩盤也確實落在臨界區間附近。但提醒一句:本文在 0050 上得到的負面擇時結論,說明「文獻案例成立」與「在你的市場、你的口徑下可操作」是兩回事,跨資產使用前請各自回測驗證。

那 LPPL 還有什麼用?

回測輸了,模型不必丟掉,但定位要改。

  • 不要當大盤擇時開關。 本文已經量化了代價:八年半的等待換來一次誤報,CAGR 少 1.12 個百分點,回撤完全沒降。同樣想做大盤風控,融資維持率的 0050 擇時有更高的訊號密度可以比較。
  • 當成全市場掃描的篩選器。 單一指數的合格擬合很稀有,但對兩千檔個股同時掃描,每天都會有分數分佈可以統計。這正是 LPPLS 泡沫選股策略的做法:不問「大盤何時崩」,改問「哪些股票正處於小泡沫」,把稀疏訊號變成可分組回測的因子。
  • 負泡沫讀數留做研究線索。 2022 年 10 月那次全期唯一的負泡沫訊號恰好落在空頭底部附近,樣本只有一次、不構成任何結論,但值得在更多市場與更長歷史上驗證。想找超跌反轉的標的,當前可操作的做法仍是大跌後用 Python 篩選強勢股,或用 VIX 恐慌指數的抄底回測從情緒面切入;LPPL 的負泡沫與 VIX 的買進訊號邏輯獨立,未來可以交叉驗證。

想把這類訊號研究納入完整的交易流程,可以從量化交易完整指南入門,了解程式交易如何把規則自動化;上線前建議先讀回測的侷限性,本文就是「先回測、再決定要不要信」的一次示範。

常見問題

LPPL 模型可以算出崩盤的確切日期嗎?

不行。tct_c 是崩盤機率最高的時間區間的中心,合格擬合之間的 tct_c 常相差數天到數週,且模型允許泡沫提早破裂或平緩消化。本文 2025 年 10 月的案例中,6 個窗格的 tct_c 都指向觀測日後幾天,市場之後卻又漲了 72.1%。

LPPLS 信心值多高才算危險?

在本文 0050 的八年半樣本中,99% 的交易日正泡沫信心值不超過 0.053,唯一一次超過 0.2 的警報事後是誤報,所以「多高算危險」在台股大盤上還沒有可靠答案。比起絕對水位,把它當成眾多風險讀數之一、觀察它從 0 快速爬升的過程,比設定單一門檻務實。

LPPL 適合用在個股嗎?

不建議。個股價格被特定大戶、訂單與事件主導,偏離「大量小交易者互相模仿」的模型假設;本文 2020 年版對日馳的單檔擬合就是反例。個股層級請改用全市場統計的 LPPLS 泡沫選股做法。

LPPL 擇時和 VIX 擇時有什麼不同?

LPPL 從價格時間序列的內生結構(超指數上漲、對數週期震盪)推估泡沫;VIX 是選擇權隱含波動率,反映市場當下的恐慌定價。前者是事前的結構警報,後者是事中的情緒溫度計。本文顯示前者在 0050 上訊號太稀疏,後者的實測見 VIX 美股大跌投資法

為什麼我的 LPPL 擬合結果每次都不一樣?

因為目標函數有大量局部最小值,隨機起點的最佳化每次會落到不同的解。解法是 Filimonov-Sornette 線性化(線性參數解析求解)加上固定亂數種子的多起點搜尋,本文可下載的程式碼已內建,重跑會得到相同數字。

需要多強的程式背景才能重現本文結果?

會安裝 Python 套件、能執行一個腳本即可。下載 strategy.py 後安裝 finlab、numpy、scipy、pandas、matplotlib 就能重現全部數字與圖表;想先在雲端試玩,用上面的 Colab 檢測器即可。

LPPLS 擇時可以取代買進持有嗎?

以本文回測來看不行。擇時版 CAGR 23.93% 低於買進持有的 25.05%,最大回撤完全相同,唯一一次出場還是誤報。在出現更密集、更可靠的訊號設計之前,它不該取代任何核心持股決策。

這個指標多久更新一次比較合理?

本文每 5 個交易日計算一次(19 個窗格全部重新擬合)。LPPL 描述的是以週到月為尺度的泡沫結構,逐日重算對訊號的改變很小,反而增加運算成本。

延伸閱讀

下載資源

檔案 說明
strategy.py 完整 LPPLS 信心指標計算與回測程式碼(固定種子,可重現)
data.csv 每日信心指標、持倉與淨值序列

投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。 LPPL 模型對崩盤時點的推估存在高度不確定性,請勿以本文任何訊號作為買賣依據;實際交易前請自行評估風險承受能力、滑價與資金容量。

最後更新:2026-06|回測區間:2018-01 至 2026-06(數據截至 2026-06-09)|作者:FinLab 量化研究團隊(經量化研究員審閱)

FinLab AI

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始

更多總經與市場研究

查看全部