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

RSI 指標台股 11 年回測:當動能選股因子+廣度風控的純技術策略

RSI 指標怎麼用才對?台股 11 年回測:教科書的「RSI 低於 30 超賣買進」研究段年化僅 1.13%,幾乎是死訊號。真正有效的用法剛好相反——把 RSI 當相對強勢動能選股因子(取 RSI 最高的強勢股),再用全市場站上季線的廣度做純現金減碼風控,組成一套不含基本面的純技術策略:研究段年化 25.5%、月 Sharpe 1.23,樣本外 31.7%、1.23,全期 27.8%、1.13,全程不加槓桿,三段都勝過含息 0050,附可下載程式碼與可重現回測。

RSI 是動能不是抄底 CAGR 27.8% Sharpe 1.13

RSI 指標在台股的正確用法:當動能選股因子加廣度風控

幾乎每一篇 RSI 教學都告訴你同一句話:RSI 低於 30 是超賣、該買,高於 70 是超買、該賣。但把這條規則放進台股做 11 年回測(2015-2026),「RSI 低於 30 買進」研究段年化報酬只有 1.13%、月 Sharpe 0.16,幾乎等於沒賺。問題不在 RSI,而在用反了方向。用 finlab 套件抓的上市櫃真實價量資料攤開來看,RSI 在台股真正有效的用法剛好相反——把它當成相對強勢動能選股因子,橫截面取 RSI 最高的強勢股(強者恆強),而不是抄超賣。把這個動能訊號放進「站上季線、站上半年線」的趨勢池選 13 檔強勢股,再用「全市場站上季線的個股比例(廣度)」當純現金減碼風控——廣度跌破 0.40 就把整籃曝險縮到半倉、其餘轉現金,全程不加槓桿。這套「RSI 強勢動能加廣度風控」純技術策略研究段(2015-2021)年化 25.5%、月 Sharpe 1.23、最大回撤 -30.4%,樣本外(2022-2026)年化 31.7%、月 Sharpe 1.23,全期(2015-2026)年化 27.8%、月 Sharpe 1.13、最大回撤 -35.4%——三段都勝過含息 0050(全期年化 21.0%、Sharpe 1.05、回撤 -34.0%),且不含任何基本面、可下載重現。

先用一張表回答你搜尋「RSI」時最想知道的事:

你想知道的 本文用真實台股回測的回答
RSI 是什麼 相對強弱指標,0~100 的動量振盪指標;衡量近期上漲動能占總波動的比例
RSI 低於 30 買進有效嗎 台股 11 年研究段年化僅 1.13%、月 Sharpe 0.16,接近死訊號
那 RSI 該怎麼用 反過來:橫截面取 RSI 最高的強勢股(動能),裸用全宇宙研究段年化 16.7%
裸用 RSI 動能的問題 最大回撤 -40.56%,抱不住;要套趨勢池與廣度風控降回撤
完整策略效果 研究段年化 25.5%、月 Sharpe 1.23,樣本外年化 31.7%,三段都勝含息 0050

RSI 強勢動能選股加廣度風控策略與含息 0050 買進持有的淨值對照圖,2015 到 2026 台股回測,策略線全程在上方

本文所有數字皆出自 finlab 套件抓取的上市櫃真實價量資料(priceetl:adj_close 含息還原股價),RSI 以 TA-Lib RSI 計算,回測區間 2015-01 至 2026-06-09,基準為含息 0050。文末附可下載的 strategy.pydata.csv,可自行重現。對回測的觀念還不熟,可先看回測是什麼;想釐清技術面與基本面選股的差別,可參考技術面與基本面選股的差異

RSI 是什麼

RSI(Relative Strength Index,相對強弱指標)由 Wilder (1978) 在《New Concepts in Technical Trading Systems》提出,是一個動量振盪指標。它把一段期間(常用 14 日)內的上漲幅度與下跌幅度相比,換算成一個 0 到 100 的數值:

RSI = 100 −(100 /(1 + RS)),其中 RS = 該期間平均上漲幅度 / 平均下跌幅度。

直覺上,RSI 衡量「近期的上漲動能占總波動的比例」。連續上漲時 RS 變大、RSI 趨近 100;連續下跌時 RSI 趨近 0。技術指標的基礎名詞可參考名詞詞彙表

RSI 的數學定義:兩個平均,一個壓縮

把上面那句白話寫成公式,RSI 只用兩個量、再做一次壓縮:

RS=UnDn,RSI=1001001+RSRS = \frac{\overline{U}_n}{\overline{D}_n},\qquad RSI = 100 - \frac{100}{1 + RS}

逐項拆解每個符號:

  • Un\overline{U}_n 是過去 nn 日(常用 n=14n = 14)裡,所有「上漲日」漲幅的平均;某日收盤比前一日高多少,就把那個正的差額計入,下跌日記為 0。
  • Dn\overline{D}_n 對應同一段期間裡所有「下跌日」跌幅的平均(取正值);上漲日記為 0。
  • RSRS(相對強弱比,Relative Strength)就是這兩個平均相除:近期漲多於跌時 RS>1RS > 1,跌多於漲時 RS<1RS < 1RSRS 本身範圍從 0 到無限大,不好讀。
  • 後面那條 RSI=100100/(1+RS)RSI = 100 - 100 / (1 + RS) 是一個壓縮函數,把 00\inftyRSRS 映射回 00100100 的有界區間。當 RS0RS \to 0(全是跌日)時 RSI0RSI \to 0;當 RSRS \to \infty(全是漲日)時 RSI100RSI \to 100;漲跌力道相當(RS=1RS = 1)時 RSI=50RSI = 50

實務上 Un\overline{U}_nDn\overline{D}_n 採用 Wilder 設計的平滑遞迴(等效於 α=1/n\alpha = 1/n 的指數移動平均,而非單純的簡單平均),讓 RSI 不會因為某一天的極端漲跌而劇烈跳動。本文用 TA-Lib 的 RSI(timeperiod=14),內部就是這套 Wilder 平滑,與看盤軟體的預設值一致。理解這條公式有個關鍵啟示:RSI 的高低反映的是近期漲跌力道的相對比例,而不是價格的絕對位置——一檔長期上攻的強勢股,RSI 可以長時間維持在 60 到 80,並不會因為「漲多了」就自動掉回 30。這正是後面回測會看到「高 RSI 不該當賣訊號」的數學根源。

教科書對 RSI 的標準解讀是兩條水平線:RSI 高於 70 算「超買」(暗示該賣)、低於 30 算「超賣」(暗示該買)。這套解讀背後的假設是均值回歸——價格漲多了會回檔、跌多了會反彈。聽起來很合理,但合理不等於賺錢。台股到底吃不吃這一套?直接回測。

教科書的「RSI 低於 30 買進」,在台股 11 年幾乎是死訊號

我們在可交易宇宙(成交金額前 300 大、收盤 > 10 元,排除 ETF、金融股、KY 股、處置股)裡,把幾種「RSI 選股」用法各跑一次月再平衡的回測。每個月底依照當下的 RSI(14) 讀數排序選股、持有約 30 檔,研究段(2015-2021)結果如下:

RSI 用法 解讀 研究段年化報酬 研究段月 Sharpe
取 RSI 最低 30 檔(超賣買進) 教科書均值回歸 1.13% 0.16
取 RSI 最高 30 檔(強者恆強) 動能 16.7% 0.89
RSI 一階差分最高(變化速度) RSI 變快 6.51% 0.41
RSI 二階差分最高(加速度) RSI 加速 7.34% 0.46
RSI 時序 z-score 高檔 RSI 自身相對高 9.92% 0.59
RSI 由下向上穿越 50 動能轉強 16.68% 0.89

RSI 不同用法的研究段年化報酬對照長條圖,超賣買進近乎零報酬,取最高 RSI 的動能用法最佳

結論很反直覺,卻很清楚:最多人用、每本教科書都教的「RSI 低於 30 超賣買進」,在台股研究段年化只有 1.13%、月 Sharpe 0.16,幾乎是死訊號。 而被多數教學當成「該賣」訊號的高 RSI,拿來選股反而年化 16.7%,是超賣買進的十幾倍。樣本外(2022-2026)同樣的對比依然成立:取 RSI 最高 30 檔年化 22.23%,取最低 30 檔只有 14.36%。

為什麼會反過來?因為台股具有強烈的動能特性。RSI 高代表近期買盤持續、強勢延續,在月頻再平衡下這個延續性可以被收割;而 RSI 低的股票在台股多半是「下跌中繼」,不是跌深反彈的候選——接刀沒有均值回歸的保護,只會愈攤愈低。這和 Jegadeesh & Titman (1993) 的動能效應一致:過去中期的贏家,傾向繼續贏。而 Asness, Moskowitz & Pedersen (2013) 進一步證明動能效應跨多國股市與多種資產普遍存在,並非單一市場的偶然,這也支持「在台股收割強勢延續」這個方向。

至於把 RSI 再加工的那幾種花式用法——一階差分(變化速度)、二階差分(加速度)、時序 z-score 高檔——研究段年化全部落在 6.51%~9.92%,反而比單純取 RSI 最高還差。原因是 RSI 本身已經是動量振盪指標,再對它取差分只放大噪音、損失訊號。延伸閱讀:把長週期 RSI 搭配基本面追漲的另一種選股做法見長週期 RSI 追漲策略;RSI 和 MACD、KD 的橫向比較見RSI、MACD、KD 三大指標台股實測

看一張圖就懂:兩派訊號在個股上長什麼樣

把公式畫到真實個股上,最能看出教科書兩派用法的問題。下面這張圖取台積電(2330)2023 年 7 月到 2024 年 6 月、約一年的窗,上半部是收盤價並標出兩派的買賣箭頭,下半部是 RSI(14) 與超買 70、超賣 30 兩條帶:

台積電 2330 的 RSI 超賣派與動能派買賣訊號示意圖,超賣抄底訊號整年幾乎不出現、動能訊號頻繁進出顯示 whipsaw 問題

圖上標了兩派常見訊號:超賣派(RSI 跌破 30 買、突破 70 賣)與動能派(RSI 由下向上穿越 55 買、跌破 45 賣)。兩派在這檔強勢股上的行為剛好對照出問題:

  • 超賣派整年幾乎不出手。 台積電這段是緩漲到急攻的多頭,RSI(14) 全年沒有一次跌破 30——超賣買點觸發 0 次,反而是「突破 70 該賣」觸發了 9 次。也就是說,照教科書超賣派操作,你在這檔最會漲的股票上一張都不會買,還會在它一路創高的途中被「超買」訊號勸下車 9 次。
  • 動能派訊號頻繁、來回洗。 動能派在台積電同窗觸發 19 次買、10 次賣,兩派合計 38 個進出訊號——平均每幾週就要你動一次手。多數穿越發生在橫盤段,買完沒多久又跌破 45 出場,這就是典型的 whipsaw(被上下假突破來回甩巴掌)。聯發科(2454)同窗也有 29 個訊號,型態類似:超賣買點只出現 1 次,動能派來回 18 次。

聯發科 2454 的 RSI 超賣派與動能派買賣訊號示意圖,同樣呈現超賣訊號稀少、動能訊號頻繁來回的 whipsaw 特性

兩張圖一起說明了本文的核心:單看一檔股票的 RSI 數值高低來決定進出,在台股強勢股上不是漏掉行情(超賣派)就是被洗到暈頭(動能派穿越)。 RSI 真正的價值不在「某一檔何時買賣」,而在「同一時點橫向比較全市場誰最強」——這也是為什麼後面的策略把它當成月頻的橫截面選股因子,用全市場的廣度訊號統一控曝險,而不是讓 RSI 自己頻繁進出。

想自己畫這張圖、把任一檔股票的 RSI 與兩派訊號標出來,可以用下面這段程式碼當骨架(完整的繪圖樣式放在文末可下載的腳本,這裡先給可讀版):

顯示程式碼
import pandas as pd
from finlab import data
 
# 登入後抓真實台股價量;finlab 會在需要資料時自動引導登入
close = data.get("price:收盤價")
rsi = data.indicator("RSI", timeperiod=14)
 
# 取單一檔、約一年的窗,避免畫太長擠成一團
stock_id = "2330"
window = slice("2023-07-01", "2024-06-30")
px = close[stock_id].loc[window]
ind = rsi[stock_id].loc[window]
 
# 超賣派訊號:RSI 跌破 30 買、突破 70 賣
oversold_buy = (ind.shift(1) >= 30) & (ind < 30)
overbought_sell = (ind.shift(1) <= 70) & (ind > 70)
 
# 動能派訊號:RSI 由下穿越 55 買、跌破 45 賣
momentum_buy = (ind.shift(1) <= 55) & (ind > 55)
momentum_sell = (ind.shift(1) >= 45) & (ind < 45)
 
# 把訊號日期挑出來,疊到價格圖上即可(繪圖可用 plotly / matplotlib)
buy_dates = px.index[oversold_buy | momentum_buy]
sell_dates = px.index[overbought_sell | momentum_sell]
print("買點數:", len(buy_dates), "賣點數:", len(sell_dates))

這段邏輯刻意分開兩派、各自標訊號,你可以把 stock_id 換成任何一檔,自己觀察「超賣派多久才出一次手、動能派被洗幾次」。

動能 RSI 的真正問題:抱不住的 -40% 回撤

那麼把高 RSI 動能照單全收就好了嗎?沒這麼簡單。裸用「全宇宙取 RSI 最高 30 檔」雖然研究段年化 16.7%,但它的月 Sharpe 只有 0.89、最大回撤高達 -40.56%——報酬是用很深的回撤換來的。高 RSI 容易選到高波動的拋物線股,一旦反轉就是急殺,實務上很難抱得住。

要讓 RSI 動能可用,得做兩件事:先把選股池框在有趨勢結構的強勢股裡,再在大盤系統性轉弱時把整籃曝險降下來。 這兩件事都用純價量達成,不碰基本面、不加槓桿。

完整策略:RSI 強勢動能選股加廣度純風控

把上面的洞見組成一套可執行、可重現、完全不含基本面的純技術策略,分成「選股」與「風控」兩層:

  1. 趨勢池:先在可交易宇宙中,只保留同時站上季線(收盤 > 60 日均線)與半年線(收盤 > 120 日均線)的股票。RSI 衡量的是相對強弱,先用絕對趨勢框定方向,才不會在下跌段選到「跌得比較少」的弱股。
  2. 選股(RSI 唯一因子):在這個趨勢池內取 RSI(28) 最高的 13 檔,每檔固定 1/13 權重,月再平衡。這裡的 RSI 用 28 日週期——比看盤軟體預設的 14 日更平滑,過濾掉短線雜訊,更能反映「中期的相對強勢延續」。
  3. 廣度純風控(不加槓桿):每日計算可交易宇宙中「收盤站上季線的個股比例」,當成全市場多空力道的廣度訊號。廣度 > 0.40 維持滿倉持有那 13 檔強勢股;廣度跌破 0.40,代表多數個股結構轉弱,就把整籃曝險縮減到半倉(剩下半數轉現金,不加碼、不放空、不開槓桿),廣度回升次日恢復滿倉。

這套設計的核心是「選股只靠 RSI 動能、風控只靠廣度減碼」,兩者分工、各只用價量。把它逐層拆開看建構過程,最能說明每一層在做什麼。下圖用同口徑(2015 起評、統一台股成本)攤出三層的全期最大回撤:裸用全宇宙高 RSI(-42.4%)→ 收斂到站上季線、半年線的趨勢池選 13 檔(-40.3%)→ 再疊上廣度半倉純風控(-35.4%):

RSI 強勢動能策略逐層建構的全期最大回撤對照長條圖,從裸用全宇宙高 RSI 到趨勢池再到加廣度半倉風控,回撤逐層收斂

廣度風控壓回撤的同時,研究段月 Sharpe 從趨勢池的 1.18 微升到 1.23,並未犧牲報酬。下圖把廣度訊號(宇宙站上季線的個股比例)和策略淨值疊在一起:每一次廣度跌破 0.40,對應的就是策略把整籃曝險縮到半倉、避開大盤系統性下殺的時點。

市場廣度(宇宙站上季線比例)與 RSI 強勢動能策略淨值的雙軸對照圖,2015 到 2026 台股回測,廣度跌破 0.40 時策略減碼半倉

選股端的核心程式碼(可直接交給你的 AI 助理改寫,或下載完整版執行):

顯示程式碼
import pandas as pd
from finlab import data
from finlab.backtest import sim
 
# 抓取真實台股價量資料
close = data.get("price:收盤價")
amount = data.get("price:成交金額")
 
# RSI(28):用 finlab 內建的 TA-Lib 介面計算相對強弱指標
rsi = data.indicator("RSI", timeperiod=28)
 
# 可交易宇宙:60 日均成交金額前 300 大、收盤 > 10 元
liquidity = amount.rolling(60).mean()
universe = liquidity.is_largest(300) & (close > 10)
 
# 趨勢池:同時站上季線與半年線
ma60 = close.rolling(60).mean()
ma120 = close.rolling(120).mean()
trend_pool = universe & (close > ma60) & (close > ma120)
 
# 在趨勢池內取 RSI(28) 最高的 13 檔,等權、月再平衡
high_rsi = rsi.where(trend_pool)
basket = high_rsi.is_largest(13)
position = basket.resample("M").last()

廣度純風控的完整邏輯(每日算宇宙站上季線比例、跌破 0.40 把整籃曝險縮到半倉、其餘轉現金)放在文末可下載的 strategy.py,這裡先呈現選股骨架,讓非工程背景的讀者也能逐步跟上。

完整策略的真實績效

這套「RSI 強勢動能選股加廣度純風控」策略,研究段與樣本外分開回報,所有數字都列出來:

指標 研究段(2015–2021) 樣本外(2022–2026) 全期(2015–2026)
CAGR 25.5% 31.7% 27.8%
月 Sharpe 1.23 1.23 1.13
月 Sortino 2.12 2.77 2.13
最大回撤 -30.4% -35.0% -35.4%

對照含息 0050(研究段年化 15.29%、月 Sharpe 1.0、回撤 -28.22%;樣本外年化 30.42%、Sharpe 1.18;全期年化 20.98%、Sharpe 1.05、回撤 -33.96%),這套 RSI 強勢動能策略研究段、樣本外、全期的年化與月 Sharpe 都勝過含息 0050(全期 27.8% vs 21.0%、Sharpe 1.13 vs 1.05),全期最大回撤 -35.4% 與含息 0050 的 -33.96% 大致相當。年化周轉率約 8.6 倍,屬月頻策略的合理範圍。

下面是完整互動式回測:月報酬熱力圖、權益曲線、年度績效都可以直接在文章裡操作:

回測方法與口徑

量化結論的可信度取決於方法,以下逐項交代:

  • 交易成本:策略使用 finlab sim(),台股預設已內扣手續費(0.1425%)與賣出證交稅 0.3%。
  • 滑價:未額外假設滑價,實際成交衝擊取決於資金規模與流動性。
  • 股票池:上市櫃普通股,60 日均成交金額前 300 名、收盤 > 10 元、60 日均量 > 100 萬股。
  • 排除類別:排除 ETF(代號 00 開頭)、權證/KY/特別股(非 4 碼純數字)、金融保險股、處置與全額交割股(is_flagged_stock),以降低生存者偏差與不可交易標的污染。
  • 前視偏差:RSI(28)、均線與廣度均只使用當日(含)以前的價格;選股月頻再平衡、廣度風控逐日判讀,訊號於當期可得。完全不使用財報或月營收等基本面資料,沒有財報公布日對齊問題。
  • 權重:趨勢池內等權(固定 1/13);廣度風控觸發時整籃曝險縮到半倉、其餘轉現金,不加碼也不放空,單一標的不另設上限。
  • 周轉率:年換手約 8.6 次(月再平衡 + 廣度半倉切換),屬月頻策略的中等水準。
  • 樣本內外:研究段 2015-2021、樣本外 2022-2026 分開回報,所有指標兩段都列,避免只報漂亮的一段。

穩健度

這套策略的優勢不是靠單一參數湊出來的:

  • 逐層拆解都站得住:用同口徑(2015 起評、統一台股成本)拆開三層——裸用全宇宙高 RSI 研究段月 Sharpe 1.18、全期回撤 -42.4%;收斂到趨勢池選 13 檔研究段 1.18、全期回撤 -40.3%;再加廣度半倉純風控研究段升到 1.23、全期回撤收斂到 -35.4%。每一層的角色清楚:趨勢池框方向、廣度風控壓回撤,廣度這層是把研究段月 Sharpe 推到 1.23、全期回撤從 -40.3% 砍到 -35.4% 的關鍵一步,且全程零槓桿、不靠大盤擇時運氣。
  • 單因子先單獨驗證:高 RSI 動能在無任何過濾時就已有訊號優勢(裸用全宇宙取最高 30 檔研究段年化 16.7%),趨勢池與廣度風控是在這個基礎上做風險調整,不是事後拼湊。
  • 跨參數穩健:把 RSI 週期與持股檔數各動一格(見下節色溫圖),鄰格研究段月 Sharpe 普遍站上 1.0、多數站上 1.1,不是靠單一格的孤峰。

參數最佳化:找一片穩健高原,而不是一根孤峰

策略裡有兩個最關鍵、也最容易被「調到漂亮」的旋鈕:RSI 的計算週期(要看多近的動能)與持股檔數(籃子放幾檔)。我們對這兩個旋鈕做 4×4 的網格、每一格都真跑一次完整策略(趨勢池 + 廣度半倉風控)的回測,把研究段月 Sharpe 畫成色溫圖。看色溫圖的正確方法,是找「一整片都偏綠的高原」,而不是「某一格特別深綠的孤峰」——孤峰多半是過度最佳化的產物,換個資料區間就垮;高原才代表結論對參數不敏感、實單站得住。

RSI 週期與持股檔數的研究段月 Sharpe 參數最佳化色溫圖,整片網格都站上 1.0、RSI28 搭 13 檔為高原中段而非單一孤峰

色溫圖讀出三件事:

  • 整片網格的研究段月 Sharpe 鄰格普遍站上 1.0(最低 1.00、最高 1.23,只有 RSI21、20 檔一格微幅低於 1.0),代表這套策略的優勢是一整片參數區域共有的,不是靠某一格運氣。RSI 週期 21 到 35、持股 11 到 20 檔那一片多數偏綠(多落在 1.1 到 1.2),是一片連續的穩健高原。
  • 我們取的預設 RSI28、13 檔正是全圖最深綠的那格(研究段月 Sharpe 1.23),它周邊的 RSI28、11 檔(1.15)與 RSI35、13 檔(1.18)也都站得住,落在高原中段而非孤懸邊角。
  • 右下角持股 30 檔那一欄的長週期格轉淺(RSI35、30 檔掉到 1.01),檔數放太多又搭長週期,會把高 RSI 的強勢訊號稀釋掉、攤平成接近大盤,Sharpe 跟著下滑。

把「預設參數」和「網格內鄰域同樣站得住的穩健格」擺在一起對照,可以看到換個合理參數結論一樣成立:

RSI 策略參數優化前後對照長條圖,預設 RSI28 持股 13 檔與穩健最佳 RSI35 持股 11 檔在研究段樣本外 Sharpe 幾乎打平,顯示結論對參數不敏感

參數組 研究段月 Sharpe 樣本外月 Sharpe 全期最大回撤
預設(週期 28、13 檔) 1.23 1.23 -35.4%
網格穩健最佳(週期 35、11 檔) 1.16 1.14 -39.0%

兩組數字方向一致:把週期拉到 35、持股收到 11 檔,研究段月 Sharpe 1.16、樣本外 1.14,都和預設的 1.23 同一個量級,只是回撤略深到 -39.0%。換句話說,在這片高原上選哪一格結論都成立,沒有「換個參數 Sharpe 就從 0.8 跳到 1.8」的免費午餐——這正是健康的訊號,代表預設值就坐落在高原中段,而不是靠湊參數硬撐。

加上月營收 YoY 會更好嗎:基本面是選配,不在主策略內

本文的主策略是完全不含基本面的純技術策略:選股只用 RSI 動能,風控只用站上季線的廣度,沒有任何財報或月營收輸入。這是刻意的設計——純技術訊號每日可得、無財報公布延遲與對齊問題,回測口徑乾淨、可重現性高。

常見的延伸問題是:在選股端再疊一層月營收年增率(YoY)過濾,績效會不會更好?這是一個合理的研究方向,但屬於「在純技術主策略之外的選配實驗」,不納入本文主策略的數字。原因有二:其一,主策略選股只取 13 檔、集中度已高,會持續走強的股票多半同時伴隨營收動能——強勢與營收成長高度重疊,營收 YoY 想加的資訊,價量訊號往往已經先一步反映,再加一層過濾的邊際增量有限,反而因為縮小可選池而犧牲動能的爆發力;其二,月營收是領先指標、公布有時間落差,要正確對齊「當期(含)以前已公布」的資料才不會前視,這會把乾淨的純技術口徑複雜化。想實驗的讀者可在下載的程式碼裡,於選股前加一層 monthly_revenue 的 YoY 過濾自行對照。基本面與技術面如何分工,可延伸看技術面與基本面選股的差異

不同大盤狀態下,這套策略各自表現如何

同一套策略在多頭、盤整、空頭三種市況下的脾氣差很多,分研究段與樣本外看才知道它怎麼賺、怎麼賠。把兩段的真實數字攤開(樣本外含截至 2026-06 的資料):

區段 年化報酬 月 Sharpe 最大回撤 期間市況
研究段(2015–2021) 25.5% 1.23 -30.4% 多頭為主、夾 2018 年底急殺
樣本外(2022–2026,截至 2026-06) 31.7% 1.23 -35.0% 2022 空頭 + 2023–2024 反彈

三種市況各有重點:

  • 多頭段 是這套策略賺主要報酬的時候。高 RSI 動能在多頭裡最吃香,強者恆強的延續性可以被月頻再平衡一路收割,樣本外 2023–2024 的反彈段就是年化衝到 31.7% 的主力來源。
  • 盤整段 報酬轉弱、回撤累積得快。橫盤時個股輪動快,前面個股示意圖看到的 whipsaw 在這種市況最嚴重;本策略靠的是不依賴單一檔的訊號頻繁進出,而是月頻換股加趨勢池過濾,把盤整段守住。
  • 空頭段 是廣度風控存在的理由。2022 升息殺估值那段,全市場站上季線的個股比例一路崩落、跌破 0.40,策略把整籃曝險縮到半倉、其餘轉現金,才把樣本外最大回撤壓在 -35.0%、與含息 0050 的 -33.96% 相當;若裸用全宇宙高 RSI 動能不做廣度風控,同期回撤一度到 -42.4%。

結論是這套策略的個性是「多頭吃飽、盤整守住、空頭靠廣度減碼少賠」,而不是任何市況都穩賺。理解它在不同市況的脾氣,才能在真正進場時對報酬與回撤有合理的預期。關於用大盤訊號在不同市況降回撤,可延伸看市場濾網如何降低回撤

策略的限制與取捨

  • 集中度帶來較深回撤:策略只持 13 檔、全期最大回撤 -35.4%,與含息 0050 的 -34.0% 大致相當但並不算淺。選股集中換到較高報酬,代價是單股與類股風險集中,承受得住這級回撤才適合。
  • 廣度風控只能減碼、不能歸零:跌破門檻時整籃曝險縮到半倉而非空手,目的是兼顧降回撤與不錯過反彈;在 V 型急殺急彈的市況下,半倉減碼能少賠但不會完全躲過下殺。
  • 樣本外恰逢有明確趨勢的區間:樣本外 2022-2026 經歷 2022 空頭與 2023-2024 反彈,廣度風控在有明確趨勢的市況下表現較好;不同未來市況下風控效益會變動。
  • 容量與成本:持股 13 檔、宇宙限前 300 大成交金額,中大型資金可承載,但集中度高、年換手約 8.6 次,超大資金需放寬檔數,並重估流動性衝擊與滑價。

自己跑一次

把下面這句話交給你的 AI 助理,它會引導你安裝 FinLab Skill、抓台股資料、重現這篇的回測:

免費試用

用 AI 開始 FinLab

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

告訴你的AI:

「幫我設定 FinLab,做一個動能策略:https://finlab.finance/setup」

裝好之後,下載本文的 strategy.pydata.csv,即可在自己的環境重跑、改參數、換風控規則。登入只需在程式裡寫 finlab.login(),套件會在需要資料時引導你完成登入。想延伸成更完整的量化流程,可參考量化交易總覽程式交易是什麼。風控相關延伸:ATR 波動度指標肯特納通道與 ATR用市場濾網降低回撤

常見問題

Q:RSI 參數要設多少?14 是最好的嗎? 14 日是 Wilder 的原始建議,也是看盤軟體預設值。但本文做動能選股時用的是 RSI(28)——較長週期更平滑、過濾短線雜訊,更能反映中期的相對強勢延續。參數網格顯示週期 21 到 35、持股 11 到 20 檔那片研究段月 Sharpe 大多站上 1.1,結論對週期不敏感。重點不在微調週期,而在用法方向——把它當動能選股因子而非超賣訊號。

Q:RSI 低於 30 真的不能抄底嗎? 在台股,把「RSI 低於 30 買進」當無腦抄底訊號,研究段回測年化只有 1.13%、月 Sharpe 0.16,接近無效。原因是低 RSI 無法區分「健康回檔」與「趨勢轉空」,台股低 RSI 股多為下跌中繼。想抄底反彈需要額外的趨勢與基本面條件,單看 RSI 數值不夠。

Q:那 RSI 高於 70 要賣嗎? 本文的回測恰恰相反:橫截面取 RSI 最高的強勢股反而有真實的訊號優勢(裸用全宇宙取最高 30 檔研究段年化 16.7%)。高 RSI 代表動能強,在月頻框架下傾向延續,不是該賣的訊號。真正該管的是「大盤系統性轉弱」時的整籃減碼(廣度跌破門檻縮半倉),而不是看到單一檔 RSI 高就賣。延伸閱讀:技術指標超買該賣股票嗎用事件回測直接檢驗了這個問題。

Q:RSI 可以單獨拿來當買賣訊號嗎? 不建議單獨用 RSI 數值高低決定進出。本文有效的做法是把高 RSI 當「選股因子」、全市場廣度當「整籃風控」,兩者分工。單靠 RSI 穿越 30/70 進出,在台股回測站不住。

Q:RSI 和 KD、MACD 有什麼差別?該用哪個? RSI、KD 都是擺盪類指標、資訊高度重疊,MACD 偏趨勢。台股實測下三者選股能力不同,RSI 相對突出。詳細的橫向比較見 RSI、MACD、KD 三大指標台股實測。硬把多個擺盪指標疊在一起通常是負貢獻,比較有效的是「不同性質」訊號搭配,例如動能選股加廣度風控。

Q:為什麼要用趨勢池,不直接買高 RSI 的股票? 裸用全宇宙高 RSI 動能全期最大回撤高達 -42.4%,抱不住。先用「同時站上季線與半年線」框定趨勢池,等於先確認趨勢結構再選強者,把全期回撤先收斂到 -40.3%,再疊上廣度半倉風控,研究段月 Sharpe 升到 1.23、全期回撤進一步壓到 -35.4%。

Q:這套策略適合誰? 適合想用技術面動能參與台股、又希望把回撤控制在和 0050 相當水準的人。它用 -35% 級的回撤換到研究段、樣本外、全期都勝過含息 0050 的報酬與風險調整報酬。不適合受不了深度回撤、或偏好低周轉被動持有的人——那種需求直接買進持有含息 0050 更省心。

Q:高 RSI 動能會不會只是 2015-2021 那段多頭的運氣? 樣本外 2022-2026 包含 2022 空頭,策略在這段年化仍有 31.7%、月 Sharpe 1.23,研究段與樣本外同向不衰退;加上參數高原(RSI 週期 21–35、持股 11–20 檔那片 Sharpe 大多站上 1.1)與逐層拆解驗證,較不像單段僥倖。但任何回測都無法保證對未見過的市況同樣有效。


最後更新:2026-06|回測區間:2015-01 ~ 2026-06-09|作者:FinLab 量化研究團隊(經量化研究員審閱)

本文僅供量化研究與教學用途,所有回測數字均由 finlab 套件在真實台股資料上產出,過去績效不代表未來表現,不構成投資建議。RSI 強勢動能策略全期最大回撤 -35.4%,實際交易前請自行評估風險、滑價與交易容量。

FinLab AI

想建立自己的策略?

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

免費開始

更多技術指標研究

查看全部