方法論
方法論:我用什麼判自己的策略死刑
3,988 字 · 約 11 分鐘
門檻是事前寫死的 t*=2.0,判的是 t 隨樣本數的走向而不是絕對值。八條線裡四條判死、四條未證實,零條通過。這一頁寫的是判準怎麼定、多重檢定怎麼算、資料管線斷掉時怎麼發現,以及為什麼參數永遠不公開。
這個站用同一套判準打過八條線,結果是四條判死、四條未證實、零條通過。判準是事前寫死的 t* = 2.0,而且判的不是絕對值,是 t 隨樣本數的走向:真訊號加樣本 t 會往上,噪音加樣本 t 會往下。期貨那條在 n 從 30 增到 53 的期間,t 由 1.52 掉到 0.79,就是靠這條判準被推翻的。推翻的是我自己一週前寫的結論,過程留在〈我以為它過了,多五天資料後沒過〉。
為什麼門檻是事前寫死的
因為事後定門檻,門檻永遠會剛好落在你的結果下面一點。
t*=2.0 是在跑之前就寫下來的,跑完不改。這條規則的價值不在 2.0 這個數字本身,它可以是 1.9 或 2.2,重點是它先於資料存在。同樣的道理套在網格掃描上:黃金那條事前寫死的判準是「如果動能是真的,拉長持有時間效果應該增強」,實測拿到的是 +11.0 → −3.3 → +1.3,沒有梯度。如果沒有事前寫死,看到網格裡那個 +11.0 一定會說服自己那是發現。
我的門檻其實比文獻寬鬆
Harvey、Liu 與 Zhu 在 〈… and the Cross-Section of Expected Returns〉(Review of Financial Studies 29(1), 2016)裡的結論是:金融文獻累積了數百個宣稱有效的因子,把多重檢定算進去之後,一個新因子的 t 值門檻應該提高到 3.0 以上,而不是慣用的 2.0。他們的說法是,多數已發表的發現很可能是假的。
所以我的 2.0 是一條寬鬆的線。這件事對我不利,寫在這裡是因為它是真的:連這條寬鬆的線,八條產品線一條都沒有過。如果採用 3.0,連影子回放那條 2.59 也一起出局。(查證日期 2026-08-27)
判準判的是走向,不是絕對值
單一時點的 t 值幾乎沒有資訊。有資訊的是同一條線在樣本增加時 t 往哪邊走:
| 線 | 早期 | 加樣本後 |
|---|---|---|
| 期貨真倉(那斯達克) | t=1.52(n=30) | t=0.79(n=53) |
| 黃金 comex | t=1.51(n=24) | t=0.66(n=49) |
| 黃金 asia | t=1.55 | t=1.25 |
| 歐元倫敦窗 | t=−2.28 | t=−0.04 |
四條全部往下。歐元那條最乾脆:曾經跑出 −2.28,下一輪洗成 −0.04。t 值輪輪洗牌,那就是噪音的定義。
放寬條件,看它會不會回歸
第二條判準跟上面那條同一個家族:不要看單一時點的數值,看它在條件改變的時候往哪邊移動。
一個條件統計量很漂亮的時候,第一個該問的是「這是不是抽樣運氣」。有一個不用工具、任何人都能跑的檢驗:
放寬條件,看那個統計量會不會往無條件值回歸。
實例(2026-08-27,運動賽事背離那條線):在條件較嚴的時刻,可成交深度的中位數是 $186.51,而全部時刻只有 $27.89。n 只有 58,很可疑。把條件放寬一級之後樣本變成 499(8.6 倍),中位數是 $179.79 —— 幾乎沒有動。
如果那 $186.51 是運氣,納入更多接近雜訊的時刻之後它應該往 $27.89 靠。2026-08-27 這次它沒有動,所以那是結構。過程寫在〈實現報酬是理論的六倍,而該登的是理論那個〉。
調查也要事前寫死收手的條件
第三條把前兩條套到事故調查上。前兩條判的是訊號與統計,這條判的是「我什麼時候該停止找證據」。
查一件事查不到的時候,寫「查不到」看起來永遠是比較誠實的選項。但它可能是錯的。 2026-08-27 有一次調查就是這樣:第一輪查詢回報「沒有發生過」,寫成「我判斷是這個原因,但沒有留下證據」聽起來謙虛得多 —— 而真相是它真的發生過 141 次,紀錄在沒有人想到要看的輪替壓縮檔裡。1
誠實有時候會指向錯的方向。要挖到底才行。
那次重挖是這樣做的:如果輪替檔裡也沒有紀錄,結論就是「查不到」,而且會照寫。 判準先於證據存在,跟 t* 先於資料存在是同一件事。完整的調查在〈兩個都錯的環節,拼成一條完整的因果鏈〉。
多重檢定:同一批實驗做了幾次檢定
同一批實驗有 16 格(網格版 72 格)。16 次獨立檢定純靠運氣出現 |t|>2 的期望次數是 0.8 次,而實際正好出現一次 +2.29 和一次 −2.28。也就是說,「有一格過了 2.0」完全落在運氣的預期範圍內。
如果把那斯達克那格當成 16 格之一,Bonferroni 校正(NIST/SEMATECH e-Handbook §7.4.7.3,查證日期 2026-08-27)以 α=0.05/16 給出 t*≈2.95,它的 2.19(現在影子 2.59)不通過。
站上實際採用的是未校正的 t*=2.0,理由是那一格屬於預先註冊,不在那 16 格的搜尋家族裡。這個辯護合理,但它不可證偽:宣稱「這格是事前的」在事後永遠說得通。所以它寫在這裡,讓讀者自己扣分。
為什麼回測數字要先假設它是假的
Bailey、Borwein、López de Prado 與 Zhu 在 〈Pseudo-Mathematics and Financial Charlatanism〉(Notices of the AMS 61(5), 2014)證明的是:只要試過的組態夠多,漂亮的回測績效幾乎是必然會出現的,跟策略有沒有 edge 無關。
他們把這個現象叫 backtest overfitting,並指出只報告最佳組態而不報告試過幾種,等於沒有提供任何資訊。(查證日期 2026-08-27)
這正是站上〈我的回測說 13.25 倍,稽核完剩 2.26 倍〉那篇在做的事:把自己的回測當成別人的來稽核。結果是三處高估,而且全部朝「策略看起來更好」的方向偏,沒有一處反向。單向偏差本身就是訊號:那不是隨機的 bug,是我在建模時的預期偷偷進了資料處理。
樣本數不長,就是資料管線斷了
這條是所有判準裡最土也最有效的一條:
同一支回放跑更多天,每個標的的 n 都必須變大。沒變大的那個,管線斷了。
實際抓到的一次(2026-08-26):兩次回放隔了 2 個交易日,那斯達克 n 由 50 增到 60,恰好等於 2 個交易日的上限、一筆不差;黃金三個窗各 +9;而原油四個窗是 18/17/18/23 → 18/17/18/23,一個都沒增加。原因是行情訂閱綁在一個已經失效的合約上,程式不報錯,只是收不到東西。
它不報錯這件事才是重點。 訂閱一個不存在的合約,回傳的是「沒有資料」,不是「訂閱失敗」。所以那段時間「繼續累積樣本」從來沒有發生,而分析照跑、結論照出。同一條規則對一個標的判死、對另外三個出具健康證明,這是它比監控告警好用的地方。
壓力測試:拿掉最賺的幾筆還剩什麼
一個策略如果報酬集中在少數幾筆,那它測到的可能不是 edge,是運氣或某一次結構性事件。
- 幣圈那條 18 格全正,但去掉最賺的 10 筆之後整體翻負
- 美股那條的單筆最大獲利佔總報酬 80.5%,而那一筆是一檔連續 95 個交易日零成交的停牌股。回測「買到了」也「賣掉了」,真實世界裡那個價格上沒有對手方
第二個例子後來讓整份回測從 13.25 倍降到 2.26 倍。
出場設計比進場條件重要
期貨那條早期版本的停損蓋在最大不利偏移分布的 p25 上,結果 72% 的單被掃出場,把 +9.3 點/筆的訊號磨成 +0.9。同一個訊號、同一段資料,換一個出場規則就從有 edge 變成沒 edge。
所以站上不會用「這個進場條件有沒有用」來描述一條線:那個問題在出場規則定下來之前根本沒有答案。
對帳是唯一不靠統計的證據
期貨那條有兩份紀錄:真倉與影子回放。影子回放現在是 t=2.59(n=60),真倉是 t=0.79(n=53)。
早期兩者每筆差 $2.67,而實測價差加手續費約 $2.2,幾乎完全吻合。那是模型與現實一致的證據,而且它不靠統計,靠對帳。現在兩者差 $21.57/筆,成本只能解釋其中 10.2%。同一項證據,從最有力的佐證變成最大的疑點。
一份與真倉完全相同期間的影子回放正在跑,那份才分得出是「期間不同」還是「模型偏離」。在那之前,這條線的狀態是尚未收斂,不是通過也不是判死。
數字怎麼來的,以及哪些不變量在擋
績效資料由腳本從各來源拉取後寫進版本庫,網站在建置時讀取,公開結果在〈績效〉。每次寫檔前會跑一組不變量,違反就不寫檔:
- 真錢總計必須等於各真錢線之和,評測帳戶不得混入
- 已平倉筆數只增不減、出場日不得早於進場日
- 鮮度必須算出來,不是寫死;抓不到就標記過期,絕不沿用舊值假裝是今天的
- 已平倉的標的如果又建了一次而且還沒出場,名稱遮蔽、其餘欄位照常公開
網站端再驗一次:合計對不上就讓建置失敗;過期資料在頁面上標紅字,而且不做數字動畫。會動的數字暗示即時,那是用視覺說謊。
**站上的每一筆紀錄分兩級:本站獨立驗證過的,與只有單一來源的。**後者一律在原地標明。
兩級各是什麼,以及為什麼要分
本站獨立驗證:這裡有第二個來源可以重算,或有一道不變量在擋。逐日權益與已平倉逐筆屬於這一級 —— 合計對不上建置就失敗,而那道檢查跟產生數字的那一端是分開的兩段程式。
單一來源:只有一方說過,本站沒有辦法重算。三種情況:資料端算好後直接寫進版本庫的彙總量(例如下市清單那張分類表)、由另一端提供而未經本站重跑的根因說明(例如某條線的收集中斷原因)、以及外部量測(例如搜尋主控台的曝光數)。這些一律標「未經本站獨立驗證」或指名來源。
分級的理由不是禮貌,是可稽核性本身要能被稽核:一份紀錄如果不說哪些部分它自己驗過,讀者就只能整份信或整份不信。而這兩種反應都不是稽核。2
幣圈那條線的訊號來源整批公開在〈幣種資料〉:每一支永續合約一頁,資金費率與未平倉合約的日線、上市日、下市日。已經停止交易的那些在〈已下市清單〉—— 合約下市之後多數行情站會刪頁,這裡不刪。那一頁同時寫明了「已下市」是怎麼判定的,以及這個判定會漏掉什麼。公開的是資料,不是訊號:偵測條件與門檻不在裡面,事件延遲至少八週才揭露。
不公開什麼,界線在哪
公開:方法論、判準、多重檢定、t* 的選擇、證否結論、事故 root cause、資料瑕疵清單、已平倉逐筆、淨值與真金額,以及執行系統的架構與工程概念(掃描與執行分離、守衛層、乾跑模式、心跳與告警、對帳邏輯)。
不公開:進出場的參數與門檻、持有時間、停損位置、可承載的容量上限、尚未平倉的標的名稱、任何即時訊號。
界線是一句話:別人看了能複製我的工程,但複製不了我的參數。
理由不是保護商業機密。八條線裡有三條是逆勢的,跟單會直接墊高進場成本;幣圈那條靠量能高潮出場,跟單量本身就會餵出假訊號。而這個站的賣點是「我會判死自己的想法」,有人照著虧錢,那個賣點就沒了。
這條界線由建置時的閘門強制:文章與樣板碼掃到參數名、帳戶規模、容量上限或進行中的部位,建置直接失敗。
那道閘門攔不住什麼
一個站宣稱有自動閘門保護,就得說清楚它的極限,否則讀者與未來的維護者都會高估它。它是逐行掃字串的,所以它擋得住手滑,擋不住推理。
所以:
兩個各自無害的數字,分散在不同的段落,組合起來洩漏第三個 —— 它看不見。
這不是理論。2026-08-27 寫一篇工程紀錄時,原稿有一句「某個輪詢從一場 N 次降到 M 次」,兩個數字單獨看都無害;而同一篇文章的另一段提到當天做到第幾筆。兩者放在一起,就把每個時段的筆數釘死了 —— 而容量上限就在不公開的清單上。
任何正規表達式都攔不住這種組合。攔住它的是寫的時候有人想到。最後那句改成了「從約五位數降到每個決策一次」:三個數量級的發現一個字都沒少,少的只有那個可以反推容量的整數。
(連這一段也不能寫出那兩個數字 —— 舉例說明一次洩漏,本身就會是那次洩漏。這件事在別的地方也發生過:那份規定「不得公開容量參數」的設計書,第二次被閘門擋下,就是因為它引述那個數字來解釋自己為什麼被擋。)
閘門擋的是手滑,不是推理。這一層只能靠人,而人會累。
更正政策
數字若與實際帳戶對帳有出入,以帳戶為準,在後面更正,不回頭改舊文。這個站已經示範過一次:期貨那條在 8/20 寫成「三個佐證同向的好案例」,8/26 多五天資料後最強的那個佐證倒了,於是原文留著,推翻寫在同一頁的第一節。
版本庫裡每次資料更新都是一個 commit。歷史不可竄改就是免費的可信度:如果哪天這裡的數字變好看了,你可以去翻它是什麼時候變的。
常見問題
這裡的策略可以照著做嗎? 不行,而且刻意做不到。參數、門檻、持有時間、停損位置全部不公開。公開的是判準與證否過程,那些東西複製不會傷害任何人。
t*=2.0 是怎麼定的? 跑之前寫死,跑完不改。文獻建議的門檻是 3.0(Harvey et al. 2016),所以 2.0 已經是寬鬆的線,而八條線在這條寬鬆的線上一條都沒過。
為什麼要公開沒過門檻的東西? 因為只公開過門檻的東西,讀者無法判斷那是不是倖存者偏差。判死紀錄的資訊量比績效截圖高,而且它可以被檢驗。
數字多久更新一次? 績效資料每個交易日拉一次;拿不到就標記過期並在頁面上顯示紅字,不會沿用舊值。資料頁與文章不定期更新,每次更新都留在版本紀錄裡。
為什麼有一筆已平倉紀錄的標的名稱是空的? 那一筆在 2026-08-12 平倉,之後同一個標的又建了一次,截至 2026-08-26 的資料仍未平倉。公開名稱等於公開一個未平倉的部位,所以名稱遮蔽、其餘欄位照常。平倉之後名稱會自己出現。