FinLab

PEG 策略實戰:用本益成長比挖掘被低估的成長股

January 16, 2026

投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。


低本益比就是便宜?小心掉入價值陷阱

很多投資人看到低本益比(PE)就興奮,以為撿到便宜。但你有沒有想過:為什麼市場給它這麼低的估值?

答案可能是:這家公司正在衰退。

一家 PE 只有 5 倍的公司,如果營收正在萎縮、獲利逐年下滑,那 5 倍的 PE 其實一點都不便宜——市場只是在反映它黯淡的未來。

相反的,一家 PE 25 倍的公司,如果每年獲利成長 50%,那它可能才是真正被低估的。

這就是為什麼彼得·林區(Peter Lynch)在《彼得林區選股戰略》中提出了 PEG(本益成長比) 這個指標:

PEG = PE / 盈餘成長率

當 PEG < 1,代表股價相對於成長性是便宜的;PEG > 2 則可能過貴。

白話解釋: PEG 就像看一間餐廳的性價比 — 不只看價格(PE),還要看份量(成長率)。舉例來說,A 公司 PE 20 倍、盈餘成長率 40%,PEG = 20/40 = 0.5,表示你用半價買到它的成長力道,非常划算。B 公司 PE 30 倍、成長率 10%,PEG = 30/10 = 3,表示股價已經遠超過它的成長速度。

PEG 範圍 解讀 說明
< 0.5 非常便宜 股價遠低於成長潛力
0.5 - 1.0 合理偏低 值得關注
1.0 - 2.0 合理 股價反映成長性
> 2.0 偏貴 股價超過成長速度

今天我們要用數據驗證:**PEG 策略在台股真的有效嗎?**透過 4 輪迭代優化,我們找到了一個年化報酬 25.6%、最大回撤僅 37% 的策略。


PEG 策略在台股的實際表現

在開始優化之前,先看看最基礎的 PEG 策略表現如何。

請用 FinLab 建立一個基礎的 PEG 策略:選出 PEG 最小的 10 檔股票,每月換股。 條件:PEG 介於 0~2、營業利益正成長、有基本流動性。

顯示程式碼
from finlab import data
from finlab.backtest import sim
 
# 取得資料
pe = data.get("price_earning_ratio:本益比")
營業利益成長率 = data.get("fundamental_features:營業利益成長率")
當月營收 = data.get("monthly_revenue:當月營收")
volume = data.get("price:成交股數")
 
# 計算 PEG
peg = pe / 營業利益成長率
 
# 建立條件
cond = (
    (peg > 0) & (peg < 2) &           # PEG 合理範圍
    (營業利益成長率 > 0) &             # 確保正成長
    (當月營收.average(3) / 當月營收.average(12) > 1.1) &  # 營收動能
    ((volume / 1000).average(20) > 300)  # 流動性
)
 
# 選出 PEG 最小的 10 檔
position = (peg * cond)
position = position[position > 0].is_smallest(10)
position = position.reindex(當月營收.index_str_to_date().index, method="ffill")
 
# 回測
report = sim(position, resample="M", stop_loss=0.15, upload=False)
stats = report.get_stats()
print(f"年化報酬率: {stats['cagr']:.1%}")
print(f"夏普比率: {stats['monthly_sharpe']:.2f}")
print(f"最大回撤: {abs(stats['max_drawdown']):.1%}")

執行結果:

指標 數值
年化報酬率 9.7%
夏普比率 0.40
最大回撤 50.5%

基礎版策略確實能打敗定存,但有兩個明顯問題:

  1. 報酬率普通:9.7% 只比大盤好一點
  2. 回撤太大:50% 的最大回撤,一般人很難承受

這就是我們需要優化的地方。


用 AI 迭代優化:從 9.7% 到 25.6%

接下來是這篇文章的核心:4 輪 AI 輔助優化的完整過程

我設定了三個優化目標:

指標 目標 原因
年化報酬率 > 15% 顯著優於大盤
夏普比率 > 0.6 風險調整後報酬合理
最大回撤 < 40% 一般投資人可承受

迭代 1:探索參數空間

請測試不同的參數組合:更嚴格的 PEG 門檻、加入 RSI 動能、不同持股數量、不同換股頻率。 找出哪些因子對績效影響最大。

顯示程式碼
# 測試週換股 + RSI 動能濾網
rsi = data.indicator("RSI", timeperiod=14)
roe = data.get("fundamental_features:ROE稅後")
 
cond_rsi = (
    (peg > 0) & (peg < 1.5) &
    (營業利益成長率 > 5) &
    (當月營收.average(3) / 當月營收.average(12) > 1.1) &
    ((volume / 1000).average(20) > 500) &
    (roe > 5) &
    (pe > 5) & (pe < 30) &
    (rsi > 50)  # RSI 動能向上
)
 
position = (peg * cond_rsi)
position = position[position > 0].is_smallest(10)
position = position.reindex(當月營收.index_str_to_date().index, method="ffill")
 
# 週換股
report = sim(position, resample="W", stop_loss=0.10, upload=False)

測試結果發現一個重要現象:

配置 年化 夏普 MDD
月換股(基礎) 9.2% 0.38 49.6%
週換股 + RSI 28.8% 0.83 54.8%

發現:換股頻率提高後,年化報酬從 9.2% 暴增到 28.8%!但最大回撤也達到 54.8%,仍超過目標。

迭代 2:嘗試降低回撤

試著用各種風控手段降低回撤:更嚴格的停損、移動停損、止盈。

顯示程式碼
# 測試不同停損/移停配置
configs = [
    {"stop_loss": 0.10, "trail_stop": None},   # 基準
    {"stop_loss": 0.08, "trail_stop": None},   # 嚴格停損
    {"stop_loss": 0.10, "trail_stop": 0.05},   # 移停
    {"stop_loss": 0.10, "take_profit": 0.20},  # 止盈
]
 
for cfg in configs:
    report = sim(position, resample="W", **cfg, upload=False)
    # ... 記錄結果

結果令人意外:

風控方式 年化 MDD 結論
10% 停損 28.8% 54.8% 基準
8% 停損 27.9% 58.3% MDD 反而上升
5% 移停 14.1% 63.2% 大幅惡化
20% 止盈 28.5% 53.2% 小幅改善

發現:傳統的停損/移停對成長股策略無效!因為成長股在系統性下跌時會同步下跌,停損只會鎖定虧損。

迭代 3:調整策略結構

既然風控無效,那就從策略結構本身著手。

測試不同的換股頻率(週、雙週、月、季)和持股數量,觀察對 MDD 的影響。

顯示程式碼
# 測試雙週換股
report = sim(position, resample="2W", stop_loss=0.12, upload=False)
換股頻率 年化 夏普 MDD
週換股 28.8% 0.83 54.8%
雙週 24.9% 0.83 48.4%
月換股 16.0% 0.57 55.0%
季換股 25.6% 0.93 37.0%

關鍵發現:降低換股頻率可以有效降低 MDD!季換股的 MDD 只有 37%,而且報酬還維持在 25%+。


回測結果

經過 4 輪迭代,我們找到了達標的策略配置。

指標 基礎版 優化版 目標 狀態
年化報酬率 9.7% 25.6% > 15%
夏普比率 0.40 0.93 > 0.6
最大回撤 50.5% 37.0% < 40%

策略解析:為什麼季換股 MDD 最低?

這個發現反直覺:降低交易頻率反而能降低風險?原因如下:

  1. 避免追漲殺跌:高頻換股容易在股價高點買入、低點賣出
  2. 減少交易成本:頻繁換股累積的手續費和滑價會侵蝕報酬
  3. 讓贏家充分發揮:好股票需要時間發酵,太早賣掉反而錯過大波段
  4. 過濾短期雜訊:季度層級只看中期趨勢,不被日常波動干擾

成長股策略的 MDD 很難用傳統風控降低,必須從策略結構本身著手。

想建立自己的策略?

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

免費開始