
執行這個策略
複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。
告訴你的AI:
幫我設定 FinLab,重現這篇文章,請讀:https://finlab.finance/setup?relatedUrl=/blog/risk-of-diversification
同一套營收動能策略,只改持股檔數:報酬隨檔數增加一路被攤薄,逐步靠向 0050 的 20.8%。回測區間 2015-01-01~2026-07-22。
「不要把雞蛋放在同一個籃子裡」是投資世界最常被引用的一句話,但持股越多,投資組合的「報酬/風險」比就越高嗎?我們用真實台股回測直接驗證:拿同一套選股邏輯(營收動能策略),其他條件完全不動,只把持股檔數從 10 檔一路加到 100 檔。結果是:年化報酬從 45.4% 被攤薄到 26.3%,波動率卻在 40 檔之後幾乎降不動。分散有用,但它的效益遞減得非常快;超過某個檔數之後,你增加的每一檔股票幾乎只稀釋報酬,換不到多少風險下降。
分散投資的關鍵數字:同一套策略,10 檔到 100 檔
先看完整的回測數字(選股邏輯、成本設定完全相同,只改持股檔數 N):
| 持股檔數 N | 年化報酬率 | 年化波動率 | 日夏普比率 | 最大回撤 |
|---|---|---|---|---|
| 10 檔(集中) | 45.4% | 31.9% | 1.31 | -40.9% |
| 20 檔 | 39.7% | 27.4% | 1.33 | -39.8% |
| 40 檔(甜蜜點) | 36.6% | 23.9% | 1.39 | -27.1% |
| 100 檔(過度分散) | 26.3% | 20.6% | 1.18 | -26.3% |
| 0050 含息(對照) | 20.8% | — | 1.05 | -34.0% |
三個讀法:
- 報酬單調遞減:檔數每往上加一級,年化報酬就掉一截。10 檔對 0050 的超額報酬約 24.6 個百分點,到 100 檔只剩約 5.5 個百分點,將近八成的超額報酬被攤薄掉了。
- 風險下降有地板:波動率從 10 檔的 31.9% 降到 40 檔的 23.9%,但從 40 檔再加 60 檔股票,只再降 3.3 個百分點;最大回撤更明顯,40 檔 -27.1% 對 100 檔 -26.3%,幾乎沒差。
- 夏普比率在 40 檔見頂:1.39 是四個檔數中最高的,往兩邊走都變差。集中到 10 檔換到最高報酬,但要吞下 -40.9% 的回撤;攤到 100 檔連風險調整後報酬都輸給 40 檔。
這張表是本文所有建議的依據。在同視窗(2015-01~2026-07)內,40 檔設定在年化報酬(36.6% 對 20.8%)、日夏普(1.39 對 1.05)、最大回撤(-27.1% 對 -34.0%)三項頭條指標上全數優於 0050 含息買進持有。
為什麼過度分散會攤薄報酬:學術研究怎麼說
分散效益遞減不是新發現。Tang(2004)的分析指出,約 20 檔股票即可消除約 95% 的可分散風險,再加 80 檔也只多降約 4%(見 How Many Stocks Are Sufficient for Equity Portfolio Diversification? A Review of the Literature,MDPI 期刊的文獻回顧)。數學上,若持股彼此的平均相關係數為 ρ、單檔波動率為 σ,等權持有 N 檔的組合波動率近似為:
當 N 越來越大, 趨近 0,組合波動率逼近 這個地板。持股彼此高度相關時(同產業、同因子選出來的股票就是如此),地板很高,加再多檔也降不下去。我們回測裡 100 檔的波動率 20.6%,就是這套策略選股宇宙的風險地板:下圖的紅線在 40 檔之後明顯轉平。
報酬端的代價更直接。Grinold(1989)提出的主動管理基本法則指出,主動組合的資訊比率取決於選股技能與獨立押注的數量(IR = IC × √BR);把次優的股票塞進組合,獨立押注數沒有增加,平均選股品質卻被拉低。實證上,Cohen、Polk 與 Silli 的「最佳點子」研究發現基金經理最有信心的持股每年比其組合中其他持股多出約 2.8%~4.5% 的報酬,其餘為了分散而加入的持股幾乎沒有貢獻超額報酬;Cremers 與 Petajisto(2009)的 Active Share 研究則顯示,持股組成最貼近指數的「隱形指數化」基金,扣除費用後顯著落後基準。持有一個和大盤幾乎一樣的組合,卻付出主動選股的成本與風險,是最不划算的位置。
年化波動率隨檔數下降,但 40 檔(23.9%)之後明顯轉平,100 檔(20.6%)已貼近這個選股宇宙的風險地板。
台股實測:報酬攤薄的速度,比多數人想的快
實驗設計很單純:拿一套已驗證有效的營收動能策略(股價站上 20/60/120 日均線、近 3 個月平均營收高於近 12 個月平均、20 日均量大於 500 張,依 5 日平均動能排序),從符合條件的股票中由強到弱取前 N 檔,每月換股、單檔 10% 停損。整個實驗中選股邏輯、交易成本、換股頻率全部固定,唯一的變數是 N。
核心程式碼如下(完整可執行版本見文末下載):
顯示程式碼
from finlab import data
from finlab.backtest import sim
close = data.get("price:收盤價")
volume = data.get("price:成交股數")
rev = data.get("monthly_revenue:當月營收")
# 選股條件:價格趨勢 + 營收加速 + 流動性
mom5 = (close / close.shift() - 1).rolling(5).mean()
trend = (close > close.average(60)) & (close > close.average(20)) & (close > close.average(120))
rev_up = rev.average(3) > rev.average(12)
liquid = volume.average(20) > 500 * 1000
signal = mom5[trend & rev_up & liquid]
# 同一策略,只改持股檔數 N
for n in [10, 20, 40, 100]:
position = signal.is_largest(n)
report = sim(position, resample="M", resample_offset="11D", stop_loss=0.1)
print(n, report.get_stats()["cagr"])
對數座標淨值曲線:10 檔(藍)報酬最高、40 檔(橘)在 2020 之後回撤明顯較淺、100 檔(紅)逐步向 0050(綠)靠攏。
攤薄的「形狀」本身就有資訊:10 檔到 20 檔,年化報酬掉 5.7 個百分點;40 檔到 100 檔,再掉 10.3 個百分點。因為排序在前面的股票承載了策略大部分的預測力,越往後加的股票,訊號強度越弱,過了 40 檔以後,你買進的其實是「訊號可有可無」的股票,它們把組合往大盤的方向拉。
也要說清楚集中的代價:10 檔版本在 2021 年與 2022 年各出現一次超過三成的回撤(-30.3%、-31.0%),最深的 -40.9% 則從 2018 年年中一路跌到 2020 年 3 月的疫情股災。集中放大的是訊號的力量,訊號有效時放大報酬,訊號失靈時同樣放大虧損。我們在多因子選股回測裡也看過同一件事的反面:當單一因子本身不夠強,集中持股反而是陷阱。集中值得與否,取決於你對訊號強度的信心,以及你的風險承受度撐不撐得住四成回撤。
持股幾檔最好?20~40 檔是這套策略的甜蜜點
把上面的數字換成操作語言:
- 20~40 檔是報酬與風險的平衡區。40 檔保留了大部分超額報酬(36.6% 對 10 檔的 45.4%),卻把最大回撤從 -40.9% 壓到 -27.1%,夏普比率反而是全場最高的 1.39。
- 10 檔適合能承受深回撤、且對策略訊號有高信心的人:多出約 9 個百分點的年化報酬,代價是回撤深度多 13.8 個百分點。
- 100 檔以上基本上是在用主動策略的成本複製大盤:報酬貼向 0050,回撤卻沒有比 40 檔更淺。如果你想要的就是市場報酬,直接持有市值型 ETF 成本低得多。
這個甜蜜點是「本文這套策略、這個視窗」的實測結果,別的策略甜蜜點未必一樣,但「報酬單調遞減、風險降到地板、夏普中段見頂」的形狀,在同質選股策略上具有一般性(原因就是上面的 σ√ρ 公式與 Grinold 法則)。你可以用文末的程式碼把自己的策略掃一遍 N,找出自己的甜蜜點。
多策略疊加的前提:每條腿都要夠強
分散的另一條路是「策略層的分散」:與其把一套策略攤到很多檔,去疊加多個彼此獨立的報酬來源(alpha)。理論上這是對的,Ilmanen 與 Kizer(2012)的實證顯示,把多個低相關的因子策略組合起來,夏普比率可以接近單一策略的兩倍。但這個結論有一個常被忽略的前提:疊加的每一條腿,強度要相當。
我們用同樣 40 檔的總持股數做了對照實驗:一邊是單一營收動能策略取前 40 檔;另一邊把持股拆成三條「獨立」的腿,各取約 13 檔:營收動能、風險調整報酬(6 個月報酬除以波動)、低股價淨值比加品質(ROE > 5 取最低 PB)。結果:
| 組合(同約 40 檔) | 年化報酬率 | 日夏普比率 | 最大回撤 |
|---|---|---|---|
| 營收動能前 40 檔 | 36.6% | 1.39 | -27.1% |
| 三 alpha 疊加(各取 13 檔) | 23.9% | 1.02 | -34.5% |
| 0050 含息 | 20.8% | 1.05 | -34.0% |
疊加版全面落後,夏普甚至略低於 0050。問題出在哪?把三條腿各自單獨回測就一目了然:
三條腿單獨回測的年化報酬:營收動能 39.6% 遠高於基準,風險調整報酬 21.1% 與 0050 相當,低 PB 品質 7.9% 大幅落後。把資金分三分之一給落後基準的腿,等於主動稀釋自己。
營收動能單獨跑年化 39.6%,風險調整報酬 21.1%(只約與 0050 打平),低 PB 品質只有 7.9%。把三分之一的資金分給一條年化 7.9% 的腿,分散掉的正是那條強腿的超額報酬。Grinold 公式裡的 √BR 效果,建立在每個押注的預測力(IC)相近的假設上;一條弱腿貢獻的分散效益,抵不過它拖累的報酬。
同樣約 40 檔:混入弱腿的疊加(紫)夏普 1.02,輸給單一強策略分散(橘)的 1.39,也未勝過 0050(綠)的 1.05。
所以「多策略疊加」正確的操作順序是:
- 每條腿先單獨回測,輸給基準(0050 含息)的腿直接淘汰,分散治不了弱策略。
- 強度要相當:各腿的夏普比率落在同一個量級再疊,強弱懸殊時,寧可只押強腿再用檔數控風險。
- 確認相關性夠低:兩條腿如果選出高度重疊的股票,疊加只是換個名字的同一個押注。
- 疊加後用同一視窗對照單一強腿,疊加版的風險調整後報酬要真的更好才採用。
強度相當的疊加是有效的,我們在多因子選股打贏 0050 的回測中用品質、動能、低波動等強度相近的因子組合驗證過這條路;低波動策略的實測也顯示,把風險調整的邏輯放進報酬因子裡,比單獨拿低波動當一條腿有效得多。
分散投資實務清單
把全文濃縮成六條可以直接執行的判準:
- 主動選股策略,持股 20~40 檔通常已足夠:多數可分散風險在這個區間內已被消除,本文實測的夏普高點在 40 檔。
- 超過 50 檔就要警惕:對照你的策略報酬與大盤的差距,若已縮到幾個百分點,你付出的努力大多在複製指數。
- 想更集中前,先看自己吞不吞得下回撤:10 檔版本的 -40.9% 是真實發生過的數字,而且訊號弱時集中會放大虧損。
- 加一檔股票前問一句:它是策略排序裡的前段班,還是為了「湊分散」加入的後段班?後段班加得越多,報酬越貼向大盤。
- 疊策略前先單測每條腿:輸基準的腿淘汰、強度相當才疊、疊完要贏過單押強腿才算數。
- 想要市場報酬就直接買市值型 ETF:用主動策略的周轉成本去複製 0050,是最貴的指數化方式。
想自己動手驗證,可以用 AI 輔助流程安裝 FinLab,把文末的程式碼丟給你的 AI 助手直接執行:
回測方法與限制
- 交易成本:
sim()內建手續費 0.1425% 與賣出證交稅 0.3%,本文回測全數內扣;未另外假設滑價。 - 股票池與流動性:全上市櫃股票,要求 20 日均量大於 500 張,降低回測買得到、實單買不到的風險;未另外排除金融股或 KY 股。
- 前視偏差:月營收使用 finlab 資料的公告可得時點,換股日設在每月 11 日之後(
resample_offset="11D"),避開營收公告前的未知資料。 - 權重與換股:等權配置,每月換股,單檔 10% 停損;三腿疊加版取三個訊號的聯集,平均持股約 36 檔。
- 基準口徑:0050 含息報酬以還原股價(
etl:adj_close)買進持有計算,區間 2015-01-01~2026-07-22,年化 20.8%、最大回撤 -34.0%。不同文章若使用不同回測區間,0050 數字會不同,比較時請以同視窗為準。 - 樣本內外:本文為全段 in-sample 回測,未做樣本外切分;檔數掃描的目的在於觀察同一策略內的相對變化,這個比較不受 in-sample 高估絕對報酬的影響,但絕對數字請保守看待。
- 周轉率與容量:月換股動能策略周轉率偏高,策略容量未估算;資金規模大時實際成交衝擊會高於回測。
常見問題
分散投資是什麼?持股越多越分散越好嗎?
分散投資是把資金分配到彼此相關性低的標的上,降低單一標的對整體組合的衝擊。但持股數量的效益遞減很快:學術文獻指出約 20 檔即可消除約 95% 的可分散風險;本文的台股實測進一步顯示,同一套策略從 40 檔加到 100 檔,波動率只再降 3.3 個百分點,年化報酬卻掉了 10.3 個百分點。
台股投資組合持股幾檔才夠?
以本文實測的營收動能策略為例,20~40 檔是報酬與風險的平衡區:40 檔的夏普比率 1.39 是 10/20/40/100 檔四種設定中最高,最大回撤 -27.1% 也遠淺於 10 檔的 -40.9%。不同策略的甜蜜點會略有差異,可以用文末程式碼對自己的策略做同樣的檔數掃描。
分散投資能消除所有風險嗎?
不能。分散只能消除個股層面的非系統性風險,組合波動率的下限是 σ√ρ(σ 為個股波動、ρ 為平均相關係數),這部分是系統性風險,加再多股票也降不掉。本文實測中 100 檔組合的波動率 20.6% 就是這個地板,2020 年 3 月與 2022 年的大盤回檔,四種檔數設定全都躲不掉。
多策略疊加一定比單一策略好嗎?
前提是每條腿強度相當。本文實測把年化 39.6% 的強腿與 21.1%、7.9% 的兩條弱腿等額疊加,結果年化 23.9%、夏普 1.02,全面輸給單押強腿分散到 40 檔的 36.6%、1.39。疊加前每條腿要先單獨回測,輸給 0050 含息的腿不該進組合。
買 0050 算不算分散投資?
0050 持有台灣市值前 50 大公司,就消除個股風險而言已是高度分散,適合想拿市場報酬的人。本文討論的是主動選股情境下的分散:目標是保留選股帶來的超額報酬,同時控制風險,這時檔數過多反而會把超額報酬攤薄回市場水準,變成用較高成本複製 0050。
怎麼判斷自己的投資組合過度分散了?
三個訊號:持股檔數多到說不出每一檔的買進理由;組合報酬與大盤的差距長期只有一兩個百分點;新增持股後回測的夏普比率不升反降。滿足其中兩項,就該考慮把後段班持股汰除、把資金集中回訊號最強的前段班。
想看四組檔數掃描與三腿疊加的完整互動回測報告(含逐年報酬、持股明細、換股紀錄),以及可直接重跑的 Python 程式碼與逐日淨值資料,以下 VIP 區域提供:營收動能 40 檔版(年化 36.6%、日夏普 1.39、最大回撤 -27.1%)的互動報告、strategy.py 檔數掃描與三腿單測腳本、data.csv 五組淨值曲線與 sweep_results.csv 完整掃描結果。
VIP 區域包含策略細節
登入後可看策略優化、完整程式碼與互動式回測報告
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始


