市值營收比是我很喜歡的一個基本面指標,因為它反應夠快:市值天天變、月營收每個月更新,比起一季才更新一次的財報,它對股價的便宜程度更敏感。但「指標好用」跟「照著它重押就會賺」是兩回事。我把市值營收比的幾種常見用法,用 finlab 從 2013 年 4 月一路回測到 2026 年 6 月,結果跟很多人的直覺差很多。
一句話結論: 大家最愛的用法「挑便宜(低市值營收比)又高獲利(高 ROE)的股票重押」,13 年下來年化只有 15.80%、夏普 0.62,最大回撤竟然吃到 -60.58%,是不折不扣的價值陷阱。低市值營收比真正能用的方式,是把它當成一個分散的濾網,再疊上營收成長與價格動能,這樣才拿到年化 21.64%、夏普 1.22、最大回撤 -31.66% 的成績,報酬與回撤都贏過同期含息 0050(21.01%、-33.96%)。
| 用法(2013-04~2026-06,月調倉) | 年化報酬 | 夏普 | 最大回撤 | 平均持股 |
|---|---|---|---|---|
| 含息 0050(基準) | 21.01% | — | -33.96% | — |
| 便宜+高獲利(低 PS+高 ROE,重押) | 15.80% | 0.62 | -60.58% | 8 |
| 分散多因子(低 PS+營收成長+動能) | 21.64% | 1.22 | -31.66% | 124 |
先看最關鍵的一張圖:把低市值營收比集中在「便宜高獲利」少數股(紅色填滿區),2020 年那一段回撤直接灌到 -60%,遠比多因子版本與含息 0050 慘烈。

想自己換因子、改條件重跑,可以用 AI 輔助安裝流程把 finlab 裝起來:
用 AI 開始 FinLab
把這句話交給你的AI,它會帶你完成設定並做出第一個策略。
告訴你的AI:
幫我設定 FinLab,重現這篇文章,請讀:https://finlab.finance/setup?relatedUrl=/blog/price-to-sales-ratio-cheap-revenue-stocks
市值營收比是什麼?為什麼反應快
市值營收比的算法很單純,就是市值除以一段期間的營收:
數字越小,代表你用越便宜的價格,買到同樣多的營收,直覺上就是便宜的高營收股。它最大的特色是反應快:市值每個交易日都在變,月營收每個月都更新,所以它比一季才更新一次的本益比、股價淨值比都更靈敏。算分母時用月營收加總,實測效果也比直接抓季營收總額好一些。這個指標的名詞定義可以對照量化投資詞彙表。
但反應快不等於賺得到。便宜本身只是一個起點,不是答案。
第一個發現:只看「便宜」,贏不了大盤
我先用最直覺的方式:每天把全市場依市值營收比排序,買進最便宜的 30%,每月換股、等權重。13 年下來年化 15.58%、夏普 0.97、最大回撤 -31.92%,平均持有高達 491 檔。
報酬落後含息 0050 超過 5 個百分點。原因不難理解:便宜的股票常常是「便宜有便宜的道理」,營收高但獲利差、產業在走下坡、甚至財務有疑慮的公司,都會被這個純便宜的濾網撈進來。光靠便宜,等於買了一籃子問題股的平均。
第二個發現:把「便宜+高獲利」重押,是 -60% 的陷阱
那加上獲利濾網呢?這正是這個指標最多人推的用法,也是這篇文章舊版本當初的主張:挑便宜(低市值營收比)又賺錢(高 ROE)的股票。聽起來無懈可擊,但實測結果是場災難。

低市值營收比再要求 ROE 大於 10,符合條件的股票平均只剩約 8 檔,等於把資金重押在極少數標的上。年化 15.80% 看起來跟純便宜差不多,但夏普掉到 0.62、最大回撤吃到 -60.58%。再多疊一個動能條件(上表的 P4),持股更少到約 5 檔,最大回撤一樣慘到 -57.47%。
問題不在「便宜」或「高獲利」這兩個條件本身,而在「集中」。便宜又高 ROE 的股票數量少、又常擠在同一兩個景氣循環產業,一旦那個產業反轉,整個組合一起崩。把這種選股法當成存股重押,遇到 2020 那種急殺,帳面直接腰斬。
第三個發現:當成分散濾網,才換到更穩的報酬
真正能用的方式剛好反過來:別重押,讓市值營收比當一個分散組合裡的便宜濾網,再疊上兩個跟「便宜」低相關的因子,也就是營收成長與價格動能。低相關是重點,因為這兩個因子失靈的時機跟「便宜」不一樣,一個拉回時另一個還撐得住,整體的波動就被壓了下來。其中價格動能的長期有效性,最早由 Jegadeesh & Titman (1993) 在美股實證提出,後續在台股也反覆被驗證。
顯示程式碼
import numpy as np
from finlab import data
from finlab.backtest import sim
# 市值營收比 = 市值 ÷ 近 12 個月營收(越低代表用越便宜的價格買到同樣的營收)
market_value = data.get("etl:market_value")
monthly_revenue = data.get("monthly_revenue:當月營收")
trailing_revenue = monthly_revenue.rolling(12).sum()
ps_ratio = (market_value / trailing_revenue).replace([np.inf, -np.inf], np.nan)
# 另外兩個與「便宜」低相關的因子:營收成長與價格動能
revenue_yoy = data.get("monthly_revenue:去年同月增減(%)")
close = data.get("price:收盤價")
momentum = close / close.shift(60)
# 三條件同時成立才買進,維持分散(約 120 檔)而非集中重押
position = (
(ps_ratio.rank(axis=1, pct=True) < 0.3)
& (revenue_yoy > 0)
& (momentum > 1)
)
report = sim(position, resample="M", name="市值營收比多因子")這組條件平均持有約 124 檔,分散程度跟純便宜版本接近,但因為多要求了「營收還在成長」與「股價已經止穩往上」,等於先把那些便宜但走下坡、或還在破底的股票濾掉。13 年下來年化 21.64%、夏普 1.22、最大回撤 -31.66%,報酬小幅超過含息 0050,回撤還更淺。

把四種用法的持股數和最大回撤畫在一起,這個教訓會更清楚:越往左、持股越集中,回撤就越深。

完整的互動報告(每筆交易、年度報酬與部位明細)在這裡:
策略程式碼可以直接下載重跑:strategy.py,回測權益曲線在 data.csv。這種「單因子先過濾、再疊低相關因子分散」的做法,在自由現金流上也成立,可以對照自由現金流多因子實測。
怎麼把市值營收比用對
把前面三個發現收斂成三條可以馬上用的原則。第一,別把便宜當成買進理由。市值營收比低只代表相對便宜,它是篩選的起點而不是終點;單獨用它選股,13 年實測還輸給含息 0050。第二,永遠保持分散。便宜股最大的風險來自群聚:便宜股常一整群擠在同一個衰退產業裡,景氣一反轉就一起崩盤,單檔的漲跌反而是小事。把資金重押在符合「便宜+高獲利」的少數幾檔,最大回撤就從 -30% 級別惡化到 -60% 級別,那段帳面腰斬的痛,多數人是抱不住的,抱不住就會在最低點認賠出場。第三,疊上跟便宜低相關的因子。營收還在成長、股價已經止穩往上,這兩個條件會幫你把便宜但體質正在惡化的股票濾掉,留下的才是便宜、有人氣、基本面也還在進步的標的。這三條原則合起來,等於把市值營收比從一個危險的重押指標,變成一個穩健的分散濾網,這也是這次回測最值得帶走的一課。
幾個要老實講的限制
第一,這是 2013-04 到 2026-06 的樣本內結果,台股這段偏多頭,換期間、換參數數字一定會變。第二,多因子版本平均持有約 124 檔,它是一個分散的因子組合,不是「只買幾檔長抱」的存股清單;想拿來重押少數幾檔,反而會掉回前面那個 -60% 的陷阱。第三,回測未計交易成本與滑價,月調倉的周轉要把手續費算進去。把這三點放心裡,市值營收比真正的角色是一個反應快的便宜濾網,而不是一張明牌。
常見問題
市值營收比越低就越值得買嗎? 不一定。低市值營收比只代表「相對便宜」,但便宜常常有原因。實測中純買最便宜的 30%,年化還輸給含息 0050。它比較適合當分散組合裡的初篩條件,再用營收成長、動能等因子把走下坡的便宜股濾掉。
「便宜+高獲利」聽起來很合理,為什麼回測那麼差? 合理的不是條件,是「分散」。低市值營收比再要求高 ROE,符合的股票常只剩個位數,等於把資金重押在少數同類股上,最大回撤因此吃到 -60.58%。同樣兩個條件,如果放在上百檔的分散組合裡當濾網,結果就完全不同。
這個指標用月營收還是季營收算比較好?換股頻率呢? 分母用月營收加總(近 12 個月)的反應速度與效果都比季營收總額好。換股頻率上,含動能的策略不適合放到一年才換一次,每月或每季比較合理。完整選股流程與其他面向,可參考台股選股完整指南,估值因子的橫向比較則可看PE、PB、PEG 三大估值因子台股回測。
延伸閱讀
本文由 FinLab 量化研究團隊撰寫。所有回測均以 finlab 套件在真實台股歷史資料上實證,程式碼與權益曲線數據皆可下載重跑,歡迎自行驗證與挑戰。
投資警語:本文所有回測數據來源為 finlab 真實實測(2013-04 至 2026-06),僅供教學與研究參考,不構成投資建議。過去績效不代表未來表現,投資有風險,請依個人風險承受度審慎評估。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

