技術分析 vs 基本面分析:台股 15 年回測的終極對決
February 16, 2026
投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。
技術分析 vs 基本面分析:到底誰贏?
這是投資界最經典的爭論:
「技術分析就是看線圖算命!」 「基本面分析太慢了,等你看完財報股價早就漲完了!」
兩派各有擁護者,但很少有人用數據來驗證。
今天,我們用 15 年的台股回測數據(2010-2025),一次搞清楚:
- 純技術分析策略能賺多少?
- 純基本面分析策略能賺多少?
- 兩者結合又會如何?
結果可能出乎你的意料。
什麼是技術分析?什麼是基本面分析?
技術分析(Technical Analysis)
核心理念:價格反映一切。
技術分析不看財報、不管營收,只看股價和成交量的走勢。常用工具包括:
- 均線(MA):趨勢方向
- RSI:超買超賣
- MACD:動能變化
- KD 隨機指標:短期轉折
白話比喻: 技術分析就像看天氣預報——不管為什麼會下雨(氣壓、氣流),只看雲層和濕度來預測。
基本面分析(Fundamental Analysis)
核心理念:股價終究會回歸企業價值。
基本面分析看的是公司的財務數據:
- 營收成長:公司賺的錢有沒有變多
- 本益比(PE):股價相對於獲利是否合理
- ROE:股東權益報酬率
- 現金流:公司有沒有真的賺到現金
白話比喻: 基本面分析就像買房——你會看坪數、地段、屋齡,不會只看最近成交價的漲跌。
回測設計:公平對決
為了公平比較,我們設計了三組策略,回測條件統一:
| 設定 | 數值 |
|---|---|
| 回測期間 | 2010-2025(15 年) |
| 流動性篩選 | 20 日均量 > 300 張 |
| 持股數量 | 10 檔 |
| 換股頻率 | 月度 |
| 單一持股上限 | 12% |
策略 A:純技術分析
建立純技術分析策略:RSI > 50、MACD 黃金交叉、股價在 60 日均線之上
顯示程式碼
from finlab import data
from finlab.backtest import sim
# 取得數據
close = data.get('price:收盤價')
volume = data.get('price:成交股數')
# 技術指標
rsi = data.indicator('RSI', timeperiod=14)
macd, macd_signal, _ = data.indicator('MACD', fastperiod=12, slowperiod=26, signalperiod=9)
sma60 = close.average(60)
# 技術分析條件
cond_rsi = rsi > 50 # RSI 多頭
cond_macd = macd > macd_signal # MACD 在信號線之上
cond_trend = close > sma60 # 價格在 60 日均線上
vol_filter = volume.average(20) > 300 * 1000
# 選出動能最強的 10 檔(用 RSI 排序)
cond = cond_rsi & cond_macd & cond_trend & vol_filter
position = rsi[cond].is_largest(10)
# 回測
report = sim(position.loc['2010':], resample='M', position_limit=0.12, upload=False)策略 B:純基本面分析
建立純基本面策略:營收年增 > 15%、營收創 12 月新高、ROE > 8%
顯示程式碼
from finlab import data
from finlab.backtest import sim
# 取得數據
rev = data.get('monthly_revenue:當月營收')
rev_yoy = data.get('monthly_revenue:去年同月增減(%)')
roe = data.get('fundamental_features:ROE稅後')
volume = data.get('price:成交股數')
# 基本面條件
rev_ma3 = rev.average(3)
rev_new_high = (rev_ma3 == rev_ma3.rolling(12).max()) # 營收創新高
rev_growth = rev_yoy > 15 # 營收年增 > 15%
roe_good = roe > 8 # ROE > 8%
vol_filter = volume.average(20) > 300 * 1000
# 選出成長最強的 10 檔(用營收年增率排序)
cond = rev_new_high & rev_growth & roe_good & vol_filter
position = rev_yoy[cond].is_largest(10)
position = position.reindex(rev.index_str_to_date().index, method='ffill')
# 回測
report = sim(position.loc['2010':], resample='M', position_limit=0.12, upload=False)回測結果:兩者勢均力敵
| 指標 | 純技術分析 | 純基本面分析 | 差距 |
|---|---|---|---|
| 年化報酬率 | 17.7% | 16.5% | +1.2% |
| 夏普比率 | 0.66 | 0.61 | +0.05 |
| 最大回撤 | -54.7% | -48.8% | 基本面較好 |
結果出乎意料:兩者差距很小!技術面略高,但基本面回撤更小。
兩者各有優勢
技術分析的強項:
- 進場時機:等 RSI > 50 再買,避免接下墜刀
- 趨勢確認:均線多頭排列才進場,過濾假突破
- 反應速度快:每天都有新信號
基本面分析的強項:
- 營收是硬數據:股價可以被短期情緒影響,但營收是真金白銀
- 回撤較小:選到好公司即使短期下跌也會回來
- 適合長期持有:不需要頻繁操作