量化模型說這檔股票營收暴增 50%,可以買嗎?每 3 檔就有 1 檔是地雷!
量化模型說這檔股票營收暴增 50%,可以買嗎?每 3 檔就有 1 檔是地雷!
前言:會計魔術的真相
你的量化模型說這檔股票營收暴增 50%,可以買。
但翻開財報註腳:「本月營收增加主要係合併子公司及會計政策變更所致。」
翻譯:這是會計魔術。
這種雷,很多人踩過。某科技股、某營建股,量化篩選都過關:
- 營收成長?✅ 有
- 市值夠大?✅ 有
- 本益比合理?✅ 有
但財報藏著三大地雷:
- 營收波動率異常(忽高忽低)
- 營收漲但股價跌(市場不買單)
- 單月暴增 100%(不可持續)
有時候量化模型看不見這些訊號。
實測:740 檔「好股票」,272 檔是地雷
FinLab 實測,簡單篩選:
- 營收成長 >20%
- 市值 >50 億
結果:740 檔通過
看起來很棒?我們用 AI 掃完財報後,發現:
272 檔(36.8%)有問題。
每 4 檔「好股票」就有 1 檔是地雷。
三大地雷類型
地雷 1:營收波動(99 檔,13.4%)
特徵:今天 10 億,下個月 3 億,再下個月 8 億
這種公司可能靠一次性訂單撐場面:
- 單一大客戶下訂
- 季節性需求(農曆年、聖誕節)
- 工程案認列時間不固定
案例:某電子零組件廠
- 營收變異係數 (CV) = 2.95
- 去年 12 月營收 15 億(接到蘋果訂單)
- 今年 1 月營收 2 億(訂單結束)
- 年增率看起來「暴增 6851.9%」,實際上不穩定
檢測方法:營收變異係數
顯示程式碼
# 計算過去 12 個月的營收波動率
revenue_std = revenue_億.rolling(12).std()
revenue_mean = revenue_億.rolling(12).mean()
revenue_cv = revenue_std / (revenue_mean + 1e-9)
# 變異係數 > 0.5 代表波動異常
trap1_volatile = (revenue_cv > 0.5) & passed_round1計算營收波動率,找出忽高忽低的不穩定公司
顯示程式碼
import pandas as pd
import numpy as np
from finlab import data
# 取得月營收數據
revenue = data.get("monthly_revenue:當月營收")
revenue_億 = revenue / 1e5 # 轉換為億元
# 計算過去 12 個月的營收標準差和平均
revenue_std = revenue_億.rolling(12).std()
revenue_mean = revenue_億.rolling(12).mean()
# 變異係數 = 標準差 / 平均(越大越不穩定)
revenue_cv = revenue_std / (revenue_mean + 1e-9)
# 顯示變異係數最高的股票
print("營收波動最劇烈的股票(CV > 0.5):")
latest_cv = revenue_cv.iloc[-1]
volatile_stocks = latest_cv[latest_cv > 0.5].sort_values(ascending=False)
print(volatile_stocks.head(10))
圖 1:三大地雷分布統計。價格背離是最大陷阱(195 檔),佔比 26.4%
地雷 2:營收價格背離(195 檔,26.4%)⚠️ 最大陷阱
特徵:營收漲 10%,股價跌 5%
市場在說:「我不相信你的成長」
可能原因:
- 毛利壓縮:營收增加但毛利率下降(薄利多銷)
- 應收帳款爆表:營收認列了,但錢還沒收到
- 內部人倒貨:董監事、大股東趁高點出貨
案例:某 AI 伺服器概念股
- 營收 3 個月成長 2848.9%(合併子公司)
- 股價 3 個月下跌 2.7%
- 市場看穿營收灌水,不買單
檢測方法:營收 vs 股價報酬率
顯示程式碼
# 計算營收 3 個月報酬
revenue_3m_return = (revenue_億 / revenue_億.shift(3) - 1) * 100
# 計算股價 3 個月報酬
close = data.get("price:收盤價")
price_3m_return = (close / close.shift(60) - 1) * 100
# 營收漲但股價跌 = 背離
trap2_divergence = (revenue_3m_return > 0) & (price_3m_return < 0)比較營收與股價的 3 個月報酬率,找出背離個股
顯示程式碼
from finlab import data
import pandas as pd
# 取得數據
revenue = data.get("monthly_revenue:當月營收")
revenue_億 = revenue / 1e5
close = data.get("price:收盤價")
# 計算 3 個月報酬
revenue_3m_return = (revenue_億 / revenue_億.shift(3) - 1) * 100
price_3m_return = (close / close.shift(60) - 1) * 100
# 找出背離個股(營收漲但股價跌)
divergence = (revenue_3m_return > 0) & (price_3m_return < 0)
# 顯示背離程度最大的股票
latest_rev = revenue_3m_return.iloc[-1]
latest_price = price_3m_return.iloc[-1]
divergence_stocks = latest_rev[divergence.iloc[-1]].sort_values(ascending=False)
print("營收價格背離最嚴重的股票:")
for stock_id in divergence_stocks.head(10).index:
print(f"{stock_id}: 營收 {latest_rev[stock_id]:.1f}%, 股價 {latest_price[stock_id]:.1f}%")這是最大的陷阱!
在我們的研究中,195 檔(26.4%)的股票有這個問題。這表示超過 1/4 的「營收成長股」,市場根本不認同。
地雷 3:單月暴增 >100%(33 檔,4.5%)
特徵:上個月 5 億,這個月突然 12 億
可能原因:
- 併購:合併子公司,財報突然變大
- 會計政策變更:認列方式改變
- 一次性大訂單:不可持續的營收跳增
案例:某 IC 設計公司
- 月增率 107,530%(不是打錯,真的超過 10 萬%)
- 前一個月營收 0.04 億
- 這個月營收 43 億
- 原因:併購海外子公司,合併報表
檢測方法:月增率
顯示程式碼
# 取得月增率
revenue_mom = data.get("monthly_revenue:上月比較增減(%)")
# 月增率 > 100% 代表單月暴增
trap3_surge = (revenue_mom > 100)找出單月營收暴增超過 100% 的異常個股
顯示程式碼
from finlab import data
# 取得月增率
revenue_mom = data.get("monthly_revenue:上月比較增減(%)")
# 找出單月暴增股票
latest_mom = revenue_mom.iloc[-1]
surge_stocks = latest_mom[latest_mom > 100].sort_values(ascending=False)
print("單月營收暴增 >100% 的股票:")
for stock_id in surge_stocks.head(10).index:
print(f"{stock_id}: 月增率 {latest_mom[stock_id]:.1f}%")這種暴增通常不可持續,下個月很可能打回原形。
地雷重疊:有些股票同時踩到多個地雷
更可怕的是,有些股票不只踩一個地雷:
- 僅價格背離:163 檔(最常見)
- 僅營收波動:58 檔
- 波動 + 背離:18 檔(雙重警告)
- 波動 + 暴增:13 檔
- 三地雷全中:10 檔(超級地雷!)

圖 2:地雷重疊分析。163 檔股票只有價格背離,但有 10 檔股票同時踩到三個地雷
篩選漏斗:兩輪過濾的威力
第一輪量化篩選:
- 營收成長 >20% 且 市值 >50 億
- 通過:740 檔
第二輪地雷檢測:
- 檢測三大地雷
- 安全:468 檔(63.2%)
- 地雷:272 檔(36.8%)

圖 3:篩選漏斗。740 檔初始通過 → 468 檔安全 → 272 檔有地雷。流失率 36.8%
回測驗證:證據確鑿!
好的,特徵分析說 36.8% 有地雷。但真的會影響報酬率嗎?
我們用 2020-01-01 到 2026-02-10 的數據,回測三個組合:
- 不篩選地雷組(基準,740 檔)
- 無地雷組(過濾後,468 檔)
- 有地雷組(只買地雷股,272 檔)
回測結果:無地雷組完勝
| 指標 | 不篩選地雷(基準) | 無地雷組 ✅ | 有地雷組 ⚠️ | 差距 |
|---|---|---|---|---|
| 總報酬率 | 231.07% | 274.53% | 137.51% | +137% |
| 年化報酬率 | 21.97% | 24.49% | 15.43% | +9.06% |
| Sharpe Ratio | 1.05 | 1.11 | 0.79 | +0.32 |
| 最大回撤 | -33.10% | -32.01% | -35.89% | +3.88% |
| 波動度 | 19.53% | 20.54% | 18.37% | +2.17% |
結論:無地雷組在 3/3 主要指標完勝!