我第一次跑今天這個實驗,隨機選股的年化報酬是 9.92%。
改掉一個過濾條件之後,變成 7.32%。
我當下的結論是:那 2.6 個百分點是偷看未來造成的。因為舊寫法的候選池多要求了一件事——「這檔股票下個月還要有報價」——那在當月是不可能知道的。看起來像在過濾髒資料,實際上是在偷看未來。
這個結論是錯的。
我把隨機組合從 20 組加到 300 組再跑一次,同一個對照:
要求「下個月還有報價」(偷看未來) 年化 +7.75%
只用當月資訊(正確) 年化 +7.66%
→ 虛增 0.09 個百分點
偷看未來確實存在,方向也對,但它只值 0.09 個百分點。剩下那 2.5 個百分點是什麼?是我只用 20 組隨機種子時的抽樣雜訊。
我把雜訊誤認成偏誤了。而且那個誤判非常合理——我先想到一個機制(偷看未來),再看到一個數字(2.6%),兩者方向一致,於是就相信了。
這正是今天要講的事情本身:當你把好幾件事混在一起,你看到的那個數字可能什麼都不代表,而你會很自然地替它編一個理由。
Day 1 講過,「明天要不要買」其實是兩個問題:
選股層(alpha)問的是相對強弱——哪些股票會比別人漲得多。它輸出的是排名。
擇時層(timing)問的是現在該持有多少——完全不看個股。它輸出的是曝險比例。
最後才乘起來:目標持倉 = 排名前 N 檔 × 曝險比例。
分開的理由不是架構好看,是能夠歸因。
樣本 2006 年 1 月到 2025 年 5 月,共 233 個月、2,227 檔上市櫃普通股。
選股層:每月底從成交金額前 300 名裡隨機抽 10 檔,等權持有一個月。這個訊號的預期超額報酬就是零——它是刻意設計成沒用的。跑 300 組不同的隨機種子。
擇時層:0050 月收盤站上 10 個月均線就滿倉,跌破就空手。19 年進出場 32 次,69.5% 的時間在市場裡。
成本:台股來回一趟 0.4710%,每月換股付一次。
方法上刻意守住四件事:
報酬一律用還原股價。adj_close 已經把除權息和減資還原掉。用原始收盤價算,除權息當天會被當成暴跌——台股一年上萬筆除權息事件,會系統性低估報酬。
**流動性用原始成交金額,不用還原後的成交量。**還原量被係數除過,排序會失真。成交金額才是那天真的成交了多少錢。
**候選宇宙只留普通股。**ETF、ETN、存託憑證、特別股全部排除。買 0050 不叫選股;而且 0050 是對照組,把它放進候選池會變成循環。槓桿型 ETF 的報酬性質更是完全不同。
**候選池只用當月已知的資訊。**停牌後又復牌的,報酬算到復牌那個月——那段期間你本來就賣不掉;真的再也沒有報價的,視為在最後一個有效價出場(另做 −100% 的敏感度,結論不變)。

年化報酬 年化波動 夏普 最大回落
0050 買進持有 +10.42% 18.51% 0.63 -53.96%
等權持有前 300 名(未計成本) +7.72% 23.54% 0.44 -61.47%
隨機選股(未計成本) +7.66% 23.52% 0.43 -61.85%
隨機選股(扣成本) +1.75% 23.52% 0.19 -65.14%
隨機選股 + 擇時 -1.19% 16.54% 0.01 -60.00%
隨機挑 10 檔是 +7.66%、夏普 0.43;把整個池子 300 檔全買下來等權持有是 +7.72%、夏普 0.44。圖上兩條綠線幾乎重疊。
這正是它該有的樣子:零預測力的訊號,長期就等於「把整個池子買下來」。如果兩者明顯不同,代表我的實驗設計有問題,得先回頭修——事實上一開始就是這樣,用 20 組種子時隨機挑是 8.26%,比等權高出 0.54 個百分點,那個差距純粹是沒收斂。
20 組種子 → +8.26%
100 組種子 → +8.06%
300 組種子 → +7.66% 基準(等權前 300 名)+7.72%
**注意對照組不是 0050。**0050 是市值加權的大型股,這 20 年權值股(尤其台積電)漲得比中型股多,所以它的 10.42% 高出來是合理的,跟選股能力無關。拿 0050 當「隨機選股的基準」會得到錯誤結論——這本身就是一個小型的歸因錯誤。
同一批持股,只是加上每月換股的來回費用,年化從 7.66% 掉到 1.75%。成本吃掉 5.91 個百分點。
再掉 2.94 個百分點到 −1.19%。但波動從 23.52% 降到 16.54%,最大回落從 −65.14% 拉回 −60.00%。
上面那些是 300 組隨機組合的平均。單獨看每一組呢?

最差的一組 -0.01%
第 5 百分位 +2.47%
中位數 +6.85%
第 95 百分位 +11.44%
最好的一組 +17.18%
同一個完全沒用的訊號,運氣好的那一組年化 17.18%。
而且有 11.3% 的隨機組合,年化報酬贏過 0050 的 10.42%——純靠運氣。
所以如果有人給你看一個「精選 10 檔、年化 11%、回測 19 年」的策略,那個績效完全落在隨機亂選的正常範圍內。19 年的回測聽起來很長,但月頻換股只有 233 個決策點,每次 10 檔,統計上的有效樣本遠比你以為的少。
這也是為什麼我要跑 300 組而不是 1 組。單一回測曲線幾乎不帶資訊,除非你知道「亂做」會長什麼樣。
−54% 到 −65%,看起來高得不太合理。這種數字第一時間應該懷疑資料,所以我去查了。
**時間點對得上。**除了擇時那條,所有序列的最大回落都在 2007 年 6 月到 2008 年 12 月。加權指數從 9,859 跌到 3,955,−60%。
**等權中型股本來就跌得比 0050 兇。**最慘的是 2008 年 9 月(雷曼倒閉那個月):
候選池 300 檔的當月報酬 中位數 -27.28% 平均 -27.31%
同月 0050 -16.87%
不是被幾檔離群股拉下去的——中位數就是 −27%,整片一起跌。跌超過 50% 的只有 1 檔。當年櫃買指數整年從 150 掉到 60,中小型股的慘況遠超過加權指數。
但擇時那條線是另一回事。

最大回落 發生區間
0050 買進持有 -53.96% 2007-09 → 2008-12
隨機選股(未計成本) -61.85% 2007-06 → 2008-12
隨機選股(扣成本) -65.14% 2007-06 → 2008-12
隨機選股 + 擇時 -60.00% 2009-11 → 2020-03
**擇時那條的最深回落不在 2008,在 2020 年 3 月——而高點是 2009 年 11 月。**中間隔了十年四個月。
那不是崩盤,是成本磨出來的。看圖上灰線和橘線:2010 年之後它們幾乎沒有再回到 0,一路在水面下爬。藍線和綠線每隔一兩年就回到高點,灰線和橘線不會——每個月扣掉的 0.4710%,加上擇時進出的費用,比它們賺得還快。
**如果你只看「最大回落 −60.00%」這個數字,你會以為它跟 0050 的 −53.96% 是同一類。**實際上一個是崩盤後會修復的傷口,一個是十年不癒合的失血。這兩件事在單一數字上長得一模一樣。
看回落,有用:改善了 5 個百分點。
看報酬和夏普,沒用:0.19 掉到 0.01。
而且它「改善」到的 −60.00%,離 0050 自己的 −53.96% 還有一段。所以它做的不是保護你,只是把隨機選股多出來的那部分風險拉回接近市場水準。
但重點不在擇時好不好。重點是:
如果我只給你最後那一行,你有辦法分辨出上面任何一件事嗎?
你看不出選股是隨機的。看不出成本吃掉 5.91 個百分點。看不出擇時是賺是賠。看不出這條曲線在 300 種可能裡只是中間那一條。你只會看到一個「低波動、回落可控、報酬平庸」的東西,然後開始調參數——調的還是那個根本沒有訊號的選股層。
**選股層要跟「同一個池子、同樣曝險、隨機挑」比,而且要比整個分布,不是比一條曲線。**上面那兩條綠線就是這個基準。你的選股訊號如果落在隨機分布的中間,它就沒有 alpha——即使它的絕對報酬看起來不錯。這條線我會在 Day 15 定成一把固定的尺。
**擇時層要能單獨改善 0050 的買進持有。**不准掛在選股上一起測。擇時層根本不看個股,那它的效果就應該在不看個股的情況下驗證得出來。連 0050 都改善不了的擇時訊號,套到選股上的改善多半是雜訊。這是 Day 19 的守門員。
那 5.91 個百分點不是意外,可以事先算出來。

手續費 0.1425%,買賣各收一次,券商通常給 5 折到 6.5 折,我用 6 折計。
證交稅 0.3%,只在賣出時收,沒得打折。
來回一趟 = 0.1425% × 0.6 × 2 + 0.3% = 0.4710%
**證交稅佔了將近三分之二。**這也是台股高換手策略特別難做的原因——手續費折扣談得再低,那 0.3% 都在那裡。
乘上換手次數:

一年換手 12 次 → 年化成本 5.7% (月頻換股)
一年換手 24 次 → 年化成本 11.3%
一年換手 50 次 → 年化成本 23.5% (日頻+擇時,保守)
一年換手 100 次 → 年化成本 47.1% (日頻+擇時,積極)
一年換手 250 次 → 年化成本 117.8% (每天換一次)
實驗量到 5.91%,事前預測 5.7%——差距來自持股期間價格變動讓實際成交金額跟期初不完全一致。預測和實測對得上,這個門檻可信。
而 0050 這 19 年的年化報酬是 10.42%。
所以:一個一年換手 24 次的策略,光成本就吃掉 11.3%,等於它必須先做出超過大盤的績效,才回到起跑線。
這是我要在動工前立的規矩。後面每一天,每當我說「我加了 X,績效變好了」,都要先問:好了多少?跨得過這個門檻嗎?落在隨機分布的哪裡?