跳至主要內容
台股研究 約 10 分鐘閱讀

分散風險不是越多越好:分散投資如何攤薄你的超額報酬

分散風險不是越多越好。用真實台股回測驗證:同一套營收動能策略,持股從 10 檔加到 100 檔,年化報酬 45.4% 被攤薄到 26.3%,波動率卻在 40 檔之後幾乎不再下降;夏普比率最高的甜蜜點落在 20~40 檔。文內含分散投資檔數建議、多策略疊加前的強度檢查清單與可下載回測程式碼。

過度分散陷阱 CAGR 36.6% Sharpe 1.39

分散投資回測:營收動能策略持股 10 檔到 100 檔,年化報酬從 45.4% 被攤薄到 26.3%

依本文重跑

執行這個策略

複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。

告訴你的AI:

幫我設定 FinLab,重現這篇文章,請讀:https://finlab.finance/setup?relatedUrl=/blog/risk-of-diversification

免安裝,開啟 FinLab Studio

同一套營收動能策略,只改持股檔數:報酬隨檔數增加一路被攤薄,逐步靠向 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%

三個讀法:

  1. 報酬單調遞減:檔數每往上加一級,年化報酬就掉一截。10 檔對 0050 的超額報酬約 24.6 個百分點,到 100 檔只剩約 5.5 個百分點,將近八成的超額報酬被攤薄掉了。
  2. 風險下降有地板:波動率從 10 檔的 31.9% 降到 40 檔的 23.9%,但從 40 檔再加 60 檔股票,只再降 3.3 個百分點;最大回撤更明顯,40 檔 -27.1% 對 100 檔 -26.3%,幾乎沒差。
  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 檔的組合波動率近似為:

σportσρ+1ρN\sigma_{port} \approx \sigma \sqrt{\rho + \frac{1-\rho}{N}}

當 N 越來越大,1ρN\frac{1-\rho}{N} 趨近 0,組合波動率逼近 σρ\sigma\sqrt{\rho} 這個地板。持股彼此高度相關時(同產業、同因子選出來的股票就是如此),地板很高,加再多檔也降不下去。我們回測裡 100 檔的波動率 20.6%,就是這套策略選股宇宙的風險地板:下圖的紅線在 40 檔之後明顯轉平。

報酬端的代價更直接。Grinold(1989)提出的主動管理基本法則指出,主動組合的資訊比率取決於選股技能與獨立押注的數量(IR = IC × √BR);把次優的股票塞進組合,獨立押注數沒有增加,平均選股品質卻被拉低。實證上,Cohen、Polk 與 Silli 的「最佳點子」研究發現基金經理最有信心的持股每年比其組合中其他持股多出約 2.8%~4.5% 的報酬,其餘為了分散而加入的持股幾乎沒有貢獻超額報酬;Cremers 與 Petajisto(2009)的 Active Share 研究則顯示,持股組成最貼近指數的「隱形指數化」基金,扣除費用後顯著落後基準。持有一個和大盤幾乎一樣的組合,卻付出主動選股的成本與風險,是最不划算的位置。

風險下降有地板:營收動能策略年化波動率從 40 檔到 100 檔只再降 3.3 個百分點 年化波動率隨檔數下降,但 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 檔、100 檔與 0050 含息對照 對數座標淨值曲線: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%、低 PB 品質 7.9% 對 0050 的 20.8% 三條腿單獨回測的年化報酬:營收動能 39.6% 遠高於基準,風險調整報酬 21.1% 與 0050 相當,低 PB 品質 7.9% 大幅落後。把資金分三分之一給落後基準的腿,等於主動稀釋自己。

營收動能單獨跑年化 39.6%,風險調整報酬 21.1%(只約與 0050 打平),低 PB 品質只有 7.9%。把三分之一的資金分給一條年化 7.9% 的腿,分散掉的正是那條強腿的超額報酬。Grinold 公式裡的 √BR 效果,建立在每個押注的預測力(IC)相近的假設上;一條弱腿貢獻的分散效益,抵不過它拖累的報酬。

相同持股檔數下,混入弱策略的三 alpha 疊加夏普 1.02,輸給單一強策略 40 檔的 1.39 同樣約 40 檔:混入弱腿的疊加(紫)夏普 1.02,輸給單一強策略分散(橘)的 1.39,也未勝過 0050(綠)的 1.05。

所以「多策略疊加」正確的操作順序是:

  1. 每條腿先單獨回測,輸給基準(0050 含息)的腿直接淘汰,分散治不了弱策略。
  2. 強度要相當:各腿的夏普比率落在同一個量級再疊,強弱懸殊時,寧可只押強腿再用檔數控風險。
  3. 確認相關性夠低:兩條腿如果選出高度重疊的股票,疊加只是換個名字的同一個押注。
  4. 疊加後用同一視窗對照單一強腿,疊加版的風險調整後報酬要真的更好才採用。

強度相當的疊加是有效的,我們在多因子選股打贏 0050 的回測中用品質、動能、低波動等強度相近的因子組合驗證過這條路;低波動策略的實測也顯示,把風險調整的邏輯放進報酬因子裡,比單獨拿低波動當一條腿有效得多。

分散投資實務清單

把全文濃縮成六條可以直接執行的判準:

  1. 主動選股策略,持股 20~40 檔通常已足夠:多數可分散風險在這個區間內已被消除,本文實測的夏普高點在 40 檔。
  2. 超過 50 檔就要警惕:對照你的策略報酬與大盤的差距,若已縮到幾個百分點,你付出的努力大多在複製指數。
  3. 想更集中前,先看自己吞不吞得下回撤:10 檔版本的 -40.9% 是真實發生過的數字,而且訊號弱時集中會放大虧損。
  4. 加一檔股票前問一句:它是策略排序裡的前段班,還是為了「湊分散」加入的後段班?後段班加得越多,報酬越貼向大盤。
  5. 疊策略前先單測每條腿:輸基準的腿淘汰、強度相當才疊、疊完要贏過單押強腿才算數。
  6. 想要市場報酬就直接買市值型 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 自動驗證、回測、給你答案

免費開始

更多風險與資產配置研究

查看全部