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

三項現金流全正 = 飆股?數據告訴你真相

很多人把營業、投資、融資三項現金流全正當成飆股訊號,但 2015 至 2026 年台股回測顯示三項全正 CAGR 只有 7.41%,是七種現金流組合裡墊底的一個。把它換成營業現金流正搭配營收與股價創新高的集中策略,年化衝到 24.7%,看似大勝 0050 含息的 21.15%,但風險調整後的夏普、索提諾、卡爾瑪反而全輸,最大回撤逼近腰斬。

三項全正反而墊底 CAGR 24.7% Sharpe 0.95

優化版現金流策略 vs 0050 含息累積淨值對數圖

「營業現金流正、投資現金流正、融資現金流正的公司,三項全部是正號,體質最好,就是飆股。」這是流傳很廣的一句財報口訣。我們用 finlab 把它放進 2015 年 2 月到 2026 年 7 月的台股實測,兩個結論可以先講清楚。第一,三項現金流全正不是好訊號,它在七種現金流組合裡年化報酬只有 CAGR 7.41%,墊底。第二,把選股條件換成營業現金流正再疊上營收與股價動能、集中選 5 檔的優化版,年化衝到 24.7%,帳面上比含息 0050 的 21.15% 高,但這個高報酬是拿更集中的持股與更深的回撤換來的,風險調整後其實輸給單純持有 0050。這篇文章把兩張真實回測表、逐年勝負和方法口徑全部攤開,程式碼可下載自行重跑。

兩個迷思,一句話講完

在往下看細節之前,先把答案放在最前面:

  • 迷思一:三項現金流全正 = 飆股。 回測結果相反。三項全正的年化報酬 7.41%、月夏普 0.35,是七種現金流組合裡最差的一組。表現最好的反而是最單純的「營業現金流正」,年化 13.46%。
  • 迷思二:把濾網疊到最猛、集中選 5 檔就穩贏。 也沒有那麼乾脆。優化版策略年化 24.7%,看起來大勝含息 0050 的 21.15%,但它的最大回撤 −49.58% 接近腰斬(0050 只有 −33.96%),日夏普、索提諾、卡爾瑪三個風險調整指標全部輸給 0050,而且 12 個年度裡只有 6 年跑贏,等於擲硬幣。

下面先看七種現金流組合的完整比較,再看優化策略的真實對照。

七種現金流組合比較:三項全正墊底

我們把營業、投資、融資三種現金流的正負號,組合出七種常見的選股條件,各自在同一段視窗(2015-02 至 2026-07)、finlab 預設交易成本下跑月換股回測。年化報酬與月夏普如下:

現金流組合 年化報酬(CAGR) 月夏普
營業現金流正 13.46% 0.64
營業正+投資負 13.33% 0.63
營業正+融資負 13.27% 0.64
自由現金流正 12.66% 0.61
融資現金流正 9.60% 0.46
投資現金流正 9.25% 0.46
三項全正 7.41% 0.35

七種現金流組合的年化報酬長條圖,三項全正墊底

上面這張長條圖把七種組合的年化報酬並排,最右邊那根最矮的就是三項全正。表現最好的三組(營業現金流正、營業正+投資負、營業正+融資負)年化都在 13% 出頭,夏普集中在 0.63 到 0.64 之間,彼此差距很小,共通點都是「營業現金流為正」。反觀把三種現金流都要求為正的組合,報酬直接掉到 7.41%,比只看營業現金流正的 13.46% 幾乎少了一半。

為什麼三項全正反而墊底

關鍵在於三種現金流的正負號各自代表不同的財務狀態,把它們的含義攤開就清楚了:

現金流 正號代表 負號代表
營業現金流 本業有賺到現金(好) 本業在燒錢(差)
投資現金流 在賣資產、縮減投資(要留意) 在買設備、擴張投資(成長樣態)
融資現金流 在借錢、增資(要留意) 在還債、發股利(財務穩健)

把三個正號放在一起讀,一家公司「營業現金流正、投資現金流正、融資現金流正」的真實面貌是:本業有賺錢,但同時在賣資產、縮減投資,還一邊借錢或增資。這是一個「本業還撐得住,卻在縮編又籌錢」的組合,不像積極擴張的成長股。真正的成長樣態應該是營業現金流為正、投資現金流為負,也就是本業賺錢並且把錢再投回擴張,這也是為什麼「營業正+投資負」在上表名列前段。三項全正之所以墊底,是因為把兩個帶警訊的正號(賣資產、借錢)硬綁進條件,反而篩掉了真正在投資未來的公司。

一個優化策略的嘗試,與 0050 的真實對照

既然營業現金流正是最有效的單一條件,我們以它為底,疊上兩個動能條件試著把報酬做高:營收創 12 個月新高(成長動能)、股價創 20 日新高(價格動能),加上流動性過濾,再用營收年增率排序集中選最強的 5 檔,月換股、單檔上限 20%、停損 10%。這個優化版在同一段視窗(2015-02 至 2026-07)的真實成績,和含息 0050 買進持有並排如下。0050 的報酬是把股息再投入的還原口徑,不是只看價格。

指標 優化版策略 0050 含息(基準)
總報酬率 +1122.73% +781.27%
年化報酬(CAGR) 24.70% 21.15%
日夏普 0.95 1.12
日索提諾 1.32 1.53
最大回撤 −49.58% −33.96%
卡爾瑪比率(Calmar) 0.50 0.62

優化版策略與 0050 的回撤比較圖

上面這張回撤比較圖把兩者的水下曲線疊在一起。優化版策略最大回撤 −49.58%,比 0050 含息的 −33.96% 深了將近 16 個百分點,接近腰斬。原因是這個策略只集中持有 5 檔、又偏向創新高的中小型成長股,個股波動遠大於分散的指數,在系統性下跌時跌得更兇。這正是它「更高年化」背後要付出的代價。

優化版策略與 0050 的逐年報酬長條圖

逐年報酬把勝負分佈畫得更清楚。優化版在 12 個年度裡只有 6 年跑贏 0050,逐年報酬(優化版/0050,單位 %)如下:2015 年 9.1/−10.9、2016 年 17.9/19.6、2017 年 53.5/18.1、2018 年 −14.5/−4.9、2019 年 3.7/33.5、2020 年 27.1/31.1、2021 年 77.3/21.9、2022 年 0.2/−21.4、2023 年 48.6/27.5、2024 年 15.9/48.6、2025 年 60.0/36.8、2026 年 12.2/69.0(YTD 未完整年)。策略贏得最漂亮的是 2017、2021、2023、2025 這幾個中小型成長股表態的年份;輸得最明顯的是 2019、2024、2026 這種權值股與 0050 領漲的多頭,集中在 5 檔創新高股的策略在這種行情裡明顯落後。

這個策略到底好不好

把上面的數字合起來看,結論要說清楚,不能只講「年化 24.7% 打敗 0050」。優化版的年化報酬確實比 0050 高約 3.5 個百分點,但這個差距是拿更集中的持股(只有 5 檔)與更深的回撤(−49.58% 對 −33.96%,接近腰斬)換來的。一旦把風險算進去,日夏普 0.95 輸給 0050 的 1.12、日索提諾 1.32 輸給 1.53、卡爾瑪 0.50 輸給 0.62,三個風險調整後的指標全部落後;再看逐年,12 年裡只贏 6 年,勝率等同擲硬幣。換句話說,這個策略更刺激但不見得更好,對多數投資人來說,直接買含息 0050 承擔的波動更小、每單位風險換回的報酬更高,可能是更務實的選擇。這篇文章真正可以帶走的知識,是前面那張七種現金流組合的比較表(看營業現金流、避開三項全正),而不是這個集中策略本身。

回測方法與限制

  • 回測區間與換股:2015 年 2 月至 2026 年 7 月,共約 11.3 年。組合比較與優化版都用月換股(resample="M")。2026 年為 YTD,非完整年度。
  • 交易成本與稅:使用 finlab sim() 預設,已內含手續費 0.1425%(未打折)與賣出證交稅 0.3%,未另外假設滑價。實際下單的衝擊成本取決於資金規模與個股成交量,本文未估算策略容量。
  • 流動性過濾:優化版要求 20 日均量達門檻,避免回測買得到、實單買不到的情況。
  • 集中度與停損:優化版只持有 5 檔、單檔上限 20%、設 10% 停損,集中度高,單一個股漲跌對組合影響大,最大回撤 −49.58% 深於 0050。
  • 前視偏差:財報現金流以公布後才可得的資訊對齊,月營收與股價創新高用的都是當期收盤即可得的數據,選股時點不會用到尚未揭露的資料。
  • 股票池與生存者偏差:本文未特別排除金融股、ETF、KY 股或全額交割股,也未做上市櫃分層,回測母體以 finlab 資料庫的當期可交易標的為準。過去被下市的個股是否完整涵蓋,會影響生存者偏差,讀者若要做研究應自行檢查母體定義。
  • 樣本內結果:本文是單一視窗(2015–2026)的全段回測,未做樣本外切割(in_sample_only)。優化版的參數是在同一段歷史上選定的,逐年勝負請當成對這段資料的觀察,而非對未來的保證。

現金流因子的學術根據

看「營業現金流」而不是只看帳面盈餘,有其學術基礎。Sloan (1996) 提出著名的應計項目異常(accruals anomaly):他發現盈餘裡屬於現金流的部分,比屬於應計項目(尚未收到現金的帳面調整)的部分,更能預測未來的盈餘,而市場往往沒有正確區分兩者,導致高應計、低現金流的公司未來報酬偏低。這個發現正好對應本文的觀察,選股時把「本業真的有收到現金」(營業現金流為正)當成核心條件,比堆砌一堆現金流正負號的組合更有意義。

可讀版:七種組合怎麼跑出來

下面是七種現金流組合比較的人類可讀版本,登入後即可重跑。完整的優化版策略在可下載的 strategy.py 裡:

顯示程式碼
import finlab
from finlab import data
from finlab.backtest import sim
 
finlab.login()  # finlab 會自動引導登入
 
# 三種現金流與流動性
operating = data.get("financial_statement:營業活動之淨現金流入_流出")
investing = data.get("financial_statement:投資活動之淨現金流入_流出")
financing = data.get("financial_statement:籌資活動之淨現金流入_流出")
volume = data.get("price:成交股數")
 
liquidity = volume.average(20) > 300 * 1000
 
# 七種現金流組合
combos = {
    "營業現金流正": (operating > 0),
    "投資現金流正": (investing > 0),
    "融資現金流正": (financing > 0),
    "自由現金流正": (operating + investing > 0),
    "營業正+投資負": (operating > 0) & (investing < 0),
    "營業正+融資負": (operating > 0) & (financing < 0),
    "三項全正": (operating > 0) & (investing > 0) & (financing > 0),
}
 
# 逐一回測,比較年化報酬與月夏普
for name, cond in combos.items():
    position = (cond & liquidity).loc["2015":]
    report = sim(position, resample="M", position_limit=0.1, upload=False)
    stats = report.get_stats()
    print(name, round(stats["cagr"] * 100, 2), round(stats["monthly_sharpe"], 2))

結論

在 2015 至 2026 這段期間、本文設定下,「三項現金流全正 = 飆股」這句財報口訣不成立:三項全正年化只有 7.41%,是七種現金流組合裡最差的,因為投資現金流正代表在賣資產、融資現金流正代表在借錢,把這兩個警訊硬綁進條件,反而篩掉了真正在擴張的成長股。表現最好的其實是最單純的「營業現金流正」。至於把它疊到最猛、集中選 5 檔的優化版,年化 24.7% 帳面上贏過含息 0050 的 21.15%,但那 3.5 個百分點是拿接近腰斬的回撤(−49.58%)與只贏一半年份換來的,風險調整後的夏普、索提諾、卡爾瑪全部落後,對多數人而言未必比直接持有 0050 更好。想用最新資料即時重算、或換成自己的現金流條件,跑下方的程式即可。

免費試用

用 AI 開始 FinLab

把這句話交給你的AI,它會帶你完成設定並做出第一個策略。

告訴你的AI:

幫我設定 FinLab,重現這篇文章的三項現金流組合比較與現金流優化策略回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/triple-cashflow-strategy

延伸閱讀

VIP 區域接著提供完整可下載程式與互動式回測報告:strategy.pydata.csv 可自行重現本文優化版 CAGR 24.7%、日夏普 0.95、最大回撤 −49.58% 的全部數字,並附可逐年檢視持股與交易明細的互動式回測儀表板,跑一次即得當月這個策略實際選出的持股清單。

本文內容僅供教學與研究參考,不構成投資建議或推薦。投資有風險,過去績效不代表未來表現。本文優化版策略最大回撤達 −49.58%(接近腰斬),且風險調整後的夏普、索提諾、卡爾瑪皆輸給含息 0050,12 個年度裡只有 6 年跑贏。讀者應自行評估風險承受度,並在做出投資決策前諮詢專業顧問。

VIP 區域包含策略細節

登入後可看策略優化、完整程式碼與互動式回測報告

FinLab AI

想建立自己的策略?

用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案

免費開始

更多動能與趨勢研究

查看全部