先鎖死規則,再讓台股 29 年週資料說話:三個崩跌早期預警訊號只剩一個站得住(K1732)
讀者互動
登入會員可按讚與收藏。
持續追蹤這項研究
收藏、追蹤與明日提醒只保存必要識別資料,可在會員中心檢視或刪除。
研究資訊不構成個人投資建議;提醒僅代表研究更新,不代表交易訊號。
K1732:先把規則鎖死,再讓台股 29 年週資料說話
三個候選的崩跌早期預警訊號,走完同一套預先註冊流程之後,只剩一個站得住。這篇要講的是那套流程本身,以及它砍掉了什麼。
先鎖死,再開資料
預先註冊(pre-registration)的意思很土:在看結果之前,把事件怎麼算、訊號怎麼定義、用哪個視窗、拿什麼當對照,全部寫死。寫死之後,回測只剩下按執行鍵這一個動作。
K1732 鎖死的規格是這樣。資料取 Yahoo Finance 的 ^TWII(auto_adjust),頻率是週五收盤的週 log 報酬,區間 1997-07-11 到 2026-07-17,共 1,494 週,約 29.0 年。動差用 26 週滾動視窗估計,偏態與超額峰態走 pandas 的樣本估計式(bias-corrected)。訊號狀態一律用 MA20 與 MA30 的死亡交叉判定,短均線壓到長均線之下就算警戒中。
崩跌事件定義為單週 log 報酬 ≤ −5%。同一波下跌會連著出現好幾週的大跌,所以再加一條 13 週的 episode gap:一次崩跌起點認列之後,13 週內的後續大跌都算同一段,不重複計數。整段樣本因此得到 30 個崩跌起點,第一個在 1997-09-05,最後一個在 2026-07-17。平均下來大約每 49.8 週出現一次。
這些自由度,在跑第一行回測程式之前就已經被拿走了。門檻不能事後從 −5% 調成 −4%(−4% 的版本有 26 個起點,當作穩健性檢查另外報,不當主結果)。MA 參數不能掃描。訊號清單不能事後追加。
三個訊號,一個對照
候選訊號有三個:β_s(報酬對偏態的敏感度)、β_k(報酬對峰態的敏感度)、IS_k(峰態的影響份額,influence share)。另外放一個刻意平庸的對照組:σ 的上升趨勢,也就是純波動率變高。
評估口徑是「關聯」,不是「預測」。對每一週問一個問題:這一週訊號在警戒中的話,未來 13 週內出現崩跌起點的機率是多少;不在警戒中又是多少。兩者相減,就是這個訊號帶來的機率抬升。
30 個起點裡有 28 個可評估,少掉的 2 個落在 MA30 的暖機期,訊號那時還沒有值。這 2 個直接記為不可評估,不做插補、不做寬容處理。
| 訊號 | 警戒中 P(13 週內起點) | 非警戒 P | 差值 | 95% 區塊自助 CI | 單尾 p |
|---|---|---|---|---|---|
| IS_k(峰態影響份額) | 32.29% | 17.22% | +15.07 pp | [+4.72, +25.01] | 0.0138 |
| β_s(偏態敏感度) | 22.12% | 26.80% | −4.68 pp | [−16.36, +7.91] | 0.738 |
| β_k(峰態敏感度) | 22.19% | 26.74% | −4.55 pp | [−16.36, +6.24] | 0.714 |
| σ 上升趨勢(對照) | 22.19% | 26.74% | −4.55 pp | [−16.06, +6.51] | 0.734 |

只有 IS_k 的點估計為正,而且 95% 信賴區間整段落在 0 的右邊。另外三條的區間都橫跨 0,點估計還是負的,方向與「警戒該提高風險」相反。

IS_k 警戒時的 32.29% 對上非警戒時的 17.22%,比值 1.875 倍。用同一份資料換個講法:IS_k 在警戒期間有 20 次是在崩跌起點前一週就已經亮燈(28 次裡的 71.43%),中位提前 12 週,四分位距 5.75 到 16.5 週。
另外兩個為什麼直接出局
β_s 與 β_k 的失敗有個具體理由,不用歸咎於運氣。
按照定義展開,β_k = −σ·(1/24)(z³−3z),這是 σ 的線性變換。線性變換不改變單調關係,所以 β_k 的死亡交叉「恆等於」σ 的上升趨勢交叉。實驗檔把這件事做成兩個可查的欄位:β_k 與 −σ 的相關係數是 1.0,交叉點是否完全重合這一項回傳 True。
逐欄比對也吻合。β_k 與 σ 對照組在命中率、命中次數、提前週數中位數、死亡交叉次數、26 週精確率、機率差、警戒中機率這 7 個欄位上完全相同。β_k 沒有構成一個獨立的高階動差訊號,它就是換了名字的波動率趨勢訊號。
β_s = −σ 乘上一個由偏態微調的係數,與 −σ 的相關係數 0.9715。偏態在裡面只負責調整係數,樣本內的相對調變幅度落在 −0.369 到 +0.2394 之間。訊號的方向盤還是握在 σ 手上。
這個檢查排除掉一個很平庸的解釋:如果三個訊號全都只是波動率的化妝品,那整組研究就沒有內容。IS_k 的行為與 σ 對照組明顯分開,它才是唯一對高階動差有專屬反應的候選。
信賴區間怎麼來的,以及它有多寬
週資料有自相關,普通 bootstrap 會把區間估得太窄。K1732 用循環區塊自助(circular block bootstrap),區塊長度 26 週,重抽 2,000 次,seed 固定 42。另外跑一組循環位移置換檢定(circular shift permutation),5,000 次,用來出單尾 p 值。
IS_k 的區塊自助信賴區間是 [+4.72, +25.01] 個百分點,寬度 20.29 個百分點。99% 區間 [+2.03, +28.52] 仍然排除 0。這個結論在兩個信心水準下都成立,但區間寬度本身就是一句警告:點估計 15.07 pp 的不確定性,跟估計值本身是同一個量級。
多重檢定要一起算。同一份資料上檢定了 3 個訊號,Bonferroni 校正後的門檻是 0.05/3 = 0.01667。IS_k 的 p 值 0.0138 低於這個門檻,過關,但只贏了 0.003。換一個更保守的校正方式,或者當初多放兩個候選訊號進來,這個結果就會掉到門檻之外。
估計子敏感度:換一個算法,結論會不會翻
高階動差的估計式有分歧:樣本版(bias-corrected)與母體版(bias=True)的偏態與超額峰態不一樣。這種選擇通常被寫在附錄,沒人檢查,可是它足以決定一條訊號的生死。
K1732 用母體版重算了一次 IS_k。死亡交叉次數兩邊都是 71 次,完全一致。交叉日期有 6 個不同,佔 71 次的 8.45%。逐週比對 1,439 個可比較的週,警戒狀態不同的只有 5 週,佔 0.347%。
結論對估計子的選擇不敏感。這句話的份量在於它是被測出來的,不是被假設的。
誠實的代價
IS_k 的正面數字上面講完了,接下來是它的帳單。

圖三的橘色底就是警戒期間,覆蓋掉將近一半的畫面。精確數字是 49.13% 的週數處在警戒中。我從 k1732_metrics_weekly.csv 直接重算了一次 MA20/MA30 的狀態,得到 707 個警戒週除以 1,439 個暖機後的可評估週,等於 0.4913,與結果檔的欄位對得上。
一個有一半時間在示警的燈,實用價值要打折。26 週窗口的精確率是 45.07%,意思是 IS_k 亮燈之後的 26 週內,不到一半的情況真的等到崩跌起點。它總共發出 71 次死亡交叉,對應 28 個可評估起點,平均 2.536 次交叉才換到一個起點;β_k 的比值是 0.929,警訊少很多,但命中率只有 46.43%。
樣本量也要說清楚。28 個可評估事件,橫跨 29 年,這是崩跌研究的天花板,不是這份實驗偷懶。任何以 28 個事件為基礎的機率差,都會有很寬的區間,前面那個 20.29 個百分點的寬度就是它的直接後果。
所以這裡的結論只能寫成這樣:在 1997 到 2026 的台股週資料上,IS_k 的 MA20/30 死亡交叉狀態與未來 13 週的崩跌起點有正向關聯,關聯強度的 95% 信賴區間排除 0。這句話不等於「可以拿去交易」。從關聯到策略中間還缺交易成本、部位規則、樣本外驗證、以及跨市場的重複檢定,這四項 K1732 一項都沒做。
2026-07-17 這一週,訊號說了什麼
最後一個事件是 2026-07-17,該週 log 報酬 −6.1%,穿過 −5% 的門檻,成為樣本裡的第 30 個崩跌起點。
在這之前處於警戒中的是 β_s(3/27 死亡交叉,提前 16 週)與 β_k(4/03 交叉,提前 15 週)。也就是說,兩個回測不及格的訊號亮了燈。
IS_k 沒有。它的 MA20 減 MA30 缺口從 2026-05-29 的 +0.008348 一路收斂:+0.007624、+0.007493、+0.005564、+0.002411、+0.000963,7/10 小幅回到 +0.002346,直到 7/17 當週才翻負到 −0.004197。缺口在收斂的過程整整持續了七週,可是按照預先註冊的判定規則,翻負才算警戒,而翻負發生在崩跌的同一週,提前量是零。
這個結果不能拿來加分,也不能拿來扣分。2026-07-17 是樣本內的最後一點,它本來就參與了上面所有的估計,不是樣本外驗證。誠實的讀法只有一句:整組回測裡表現最好的訊號,在樣本內的最後一次事件上沒有提前示警。
要真的檢驗 IS_k,得等 2026-07-17 之後累積出新的獨立事件,用同一份鎖死的規格重跑。那份規格已經寫在 experiments/k1732/k1732.py 裡,參數沒有留活口。這是預先註冊唯一的好處,也是它全部的好處。
數字出處對照
文中每個數字都從 experiments/k1732/k1732_results.json 或同目錄的週頻 CSV 用程式讀出,鍵路徑如下。
| 文中數字 | JSON 鍵路徑 |
|---|---|
| 1,494 週 / 1997-07-11 ~ 2026-07-17 | data.n_weeks、data.period |
| 26 週動差視窗、MA 20/30、bias-corrected | data.spec.moment_window、data.spec.ma、data.spec.moment_estimator |
| −5% 門檻、13 週 gap、30 個起點、−4% 版 26 個 | event_definition.primary_thr_weekly_log_ret、.episode_gap_weeks、.n_onsets_primary、.alt_thr / .n_onsets_alt |
| 28 個可評估事件 | signals.IS_k.n_onsets_evaluable |
| 32.29% / 17.22% / +15.07 pp | signals.IS_k.assoc_P_onset13_given_active、.assoc_P_onset13_given_inactive、.assoc_diff |
| CI95 [+4.72, +25.01]、CI99 [+2.03, +28.52]、p=0.0138 | signals.IS_k.assoc_diff_ci95_blockboot、.assoc_diff_ci99_blockboot、.assoc_diff_p_circshift_onesided |
| β_s / β_k / σ 對照的三欄數字 | signals.beta_s.*、signals.beta_k.*、signals.sigma_uptrend_benchmark.* |
| 相關 1.0、交叉重合、0.9715、調變 −0.369~+0.2394 | mechanical_equivalence.corr_beta_k_neg_sigma、.beta_k_crosses_equal_sigma_crosses、.corr_beta_s_neg_sigma、.beta_s_skew_relative_modulation_range |
| B=2,000、block=26、5,000 次置換、seed 42 | bootstrap.B、bootstrap.block、signals.*.assoc_perm_B、seed |
| 71 vs 71 交叉、6 個日期不同、5/1,439 週不同 | estimator_sensitivity_ISk.n_death_crosses_pop、.n_death_crosses_base、.n_cross_dates_differing、.n_active_weeks_differing、.n_weeks_compared |
| 71.43% 命中、中位 12 週、IQR 5.75~16.5 | signals.IS_k.hit_rate_active_at_t_minus_1、.lead_weeks_median、.lead_weeks_iqr |
| 49.13% 警戒負擔、45.07% 精確率、71 次交叉 | signals.IS_k.warning_burden_frac_weeks_active、.precision_26w、.n_death_crosses |
| 46.43% β_k 命中率 | signals.beta_k.hit_rate_active_at_t_minus_1 |
| 週報酬 −6.1%、IS_k 未警戒、缺口八週序列 | case_2026_07_17.week_ret、.IS_k.active_at_t_minus_1、.IS_k.last_death_cross、.isk_gap_last8 |
| β_s 3/27 提前 16 週、β_k 4/03 | case_2026_07_17.beta_s.last_death_cross、.beta_s.lead_weeks_at_t_minus_1、.beta_k.last_death_cross |
衍生值的算式:15.07 pp = (0.3229 − 0.1722)×100;1.875 = 0.3229 / 0.1722;20.29 pp = 25.01 − 4.72;Bonferroni 門檻 = 0.05/3 = 0.01667;2.536 = 71 / 28;0.929 = 26 / 28;8.45% = 6/71;0.347% = 5/1,439;49.8 週 = 1,494 / 30;重算警戒負擔 = 707 / 1,439 = 0.4913。抽取與繪圖腳本:storage/drafts/assets/k1732/k1732_article_evidence.py,逐項數值與鍵路徑另存於 k1732_article_evidence.json。
資料來源:Yahoo Finance ^TWII 週頻收盤(auto_adjust),實驗編號 K1732。