Edge Autopsy邊際解剖

8 lines · 0 passed · $3,300 capital · 1 stale · 2026-08-27哪一條?

美股 fade 未證實

我的回測說 13.25 倍,稽核完剩 2.26 倍

更新 1,444 字 · 約 4 分鐘

自己稽核自己的回測,13.25 倍打回 2.26 倍。三處高估:停牌標的被當成可以交易、改名的股票被算了兩次、回落只在平倉那天更新。三處全部朝「策略看起來更好」的方向偏。

原始回測給的是 13.25×、年化 +58.6%。稽核後的誠實值是 2.26×、年化 +15.7%

差距不是調參數調出來的,是三個 bug。三個都不會報錯,都讓數字往好的方向偏。

一、停牌標的被當成可以交易

單筆最大獲利是 SPRB +25,576%,佔總報酬的 80.5%

它長這樣:連續 95 個交易日零成交,然後單日開在 124.7×。

回測沒有成交量檢查,所以它「買到了」也「賣掉了」。真實世界裡這是一檔停牌後重新掛牌的股票,那個價格上沒有對手方。這一筆不存在。

停牌本身是交易所的正常機制:美國證管會的投資人說明(查證日期 2026-08-27)寫的是,停牌是為了讓市場參與者有時間消化重大消息。對回測來說,重點是停牌期間沒有可成交的價格,而歷史資料檔裡那幾天照樣有一列資料。資料有一列,不等於你當時買得到。

拿掉它,總報酬掉掉八成。

通用教訓:任何回測只要有單筆佔總報酬 >50% 的交易,先去查那一筆是不是真的。不是先高興。

二、改名的股票被交易了兩次

13 組標的在樣本期內改過 ticker。資料源用新舊代號各存了一份,回測把同一家公司的同一段行情當成兩個獨立機會各買一次。

這種錯誤在幣圈也踩過(同一支幣下市後換合約重上)。凡是「代號」不是主鍵的市場都會有。

正解不是自己維護一張改名對照表,是換一個不會變的鍵。學術界處理這件事的標準做法是用永久識別碼:CRSP 的 PERMNO 就是為此存在的,官方說明寫「fixed for the life of a security」(查證日期 2026-08-27)。我當初用 ticker 當主鍵,等於預設了一個會變的東西不會變。

三、回落只在平倉的那天更新

book() 只在部位關閉時重算淨值。所以持倉期間的浮虧從來沒進過權益曲線。

回測報的最大回落 −14%。真實的是 −45%

這條最要命,因為它決定的不是報酬,是抱不抱得住。對帳單會顯示 −45%,人會在那裡停掉系統。回測顯示 −14% 的人不會為 −45% 做準備。

稽核後剩下什麼

指標稽核前稽核後
總倍數13.25×2.26×
年化+58.6%+15.7%
最大回落−14%−45%
per-trade t1.40(門檻 2.0,未過)
P(虧損)4%
p101.22×

t=1.40 沒過門檻,所以這條線標的是「未證實」不是「可行」。

還有兩件事讓它更難看:

那三個體感數字比年化 +15.7% 更能決定這條線的下場。四分之三的日子帳戶低於前高,代表大部分時間你看到的是虧損;1.6 年沒有新高,代表你有整整一年半的時間只能靠「規則說繼續」撐著;而 42% 的意思是,隨便挑一天開始,一年後翻銅板決定你是賺是賠。這些都不是失敗的策略會有的樣子,也不是成功的策略會有的樣子 —— 它們是 t=1.40 這個數字在生活裡的樣子。

順帶一提,這種「資料集本身讓績效變好看」的偏差在學術上量過:Elton、Gruber 與 Blake 在 〈Survivor Bias and Mutual Fund Performance〉Review of Financial Studies 9(4), 1996,查證日期 2026-08-27)估計,共同基金研究裡光是存活者偏差就讓績效每年高估約 1.4 個百分點。

那是資料集帶來的偏差;我這三個 bug 是自己寫出來的,量級差了一個數量級。

那為什麼還開著

因為它不是包裝過的大盤:beta +0.21、與大盤相關 +0.13、年化 alpha +12.8%。2022 崩盤年策略 −5.1%,同期大盤 −18.2%。

未證實 ≠ 已證否。t=1.40 的正確處置是用小到不痛的錢繼續累積樣本,不是加碼,也不是關掉。而且前提是講好:頭六個月虧錢是預期內的,不准因此改規格。

這篇真正的重點

三個 bug 都是同一類:檢查因為錯誤的理由而通過,或輸出讀起來像成功。

同一個專案裡還有:自檢腳本掃錯關鍵字所以漏掉整個下單層、preflight 印「全部通過」而券商正在非同步回 Error 201、dry run 也印 sent、欄位名跨層不一致讓數量靜默變成 0。

這類失敗不會拋例外。它只會在真的花錢那天才顯形。

所以寫完任何守衛或回報,順序是:先問「它會不會因為錯誤的理由通過?」再問「它對嗎?」

常見問題

既然稽核完只剩 2.26 倍,為什麼不關掉? 因為 t=1.40 是「未證實」不是「已證否」,而它與大盤的相關只有 +0.13。正確處置是用小到不痛的錢繼續累積樣本,看 t 往哪邊走。判準寫在〈方法論〉,帳戶的真金額在〈績效〉。

−45% 的回落是怎麼算出來的? 把浮動損益逐日算進權益曲線,而不是只在平倉那天更新。原本的 −14% 是後者,那個數字沒有經歷過持倉期間的任何一天。

稽核後的 2.26 倍就可信了嗎? 比 13.25 倍可信,但它仍然是回測。真正的檢驗在實盤:目前這條線的真金額與逐筆紀錄公開在績效頁,t 值會隨樣本更新。期貨那條就是這樣被推翻的,過程在〈我以為它過了,多五天資料後沒過〉。

為什麼三個 bug 都往同一個方向偏? 這正是最該警覺的地方。隨機的 bug 會有正有負,單向偏差表示偏的不是程式,是寫程式的人的預期。