乖離率在台股的正確用法:當動能因子選強勢股,不是負乖離抄底
散戶最熟的乖離率用法是「正乖離過大就賣、負乖離過大就跌深反彈買」。但把這個逆勢規則放進台股做 11 年回測(2015-2026),「負乖離最大抄底」研究段年化只有 5.4%,改用季線(MA60)算乖離抄底更只剩 0.6%,幾乎等於沒賺。問題不在乖離率,而在方向用反了。把同一個指標反過來用——用季線(MA60)而非散戶慣用的 20 日線算乖離、選「正乖離最大」的強勢股當動能因子,再疊上品質池過濾、200 日趨勢濾網、反波動加權、個股 ATR 現金停損與趨勢廣度減碼,組成一套完全不含基本面的純技術策略。這套「乖離率純技術強勢動能策略」研究段(2015-2021)年化 29.7%、月夏普 1.21、月索提諾 2.16、回撤 -30.5%,樣本外(2022-2026)年化 28.5%、月夏普 1.07、回撤 -36.0%,全期(2015-2026)年化 29.1%、月夏普 1.10、月索提諾 2.01、全期最大回撤 -36.7%。三段都勝過含息 0050(全期年化 21.0%、夏普 1.05、回撤 -34.0%)。代價也一併講清楚:2024 大型權值股獨強那年,本策略只賺 6.1%、落後 0050 的 48.6%。
先用一張表回答你搜尋「乖離率」時最想知道的事:
| 你想知道的 | 本文用真實台股回測的回答 |
|---|---|
| 乖離率是什麼 | 收盤價偏離 N 日均線的百分比,公式 = (收盤價 − N 日均線)/ N 日均線;衡量股價相對均線的位置 |
| 負乖離抄底有效嗎 | 台股 11 年回測研究段年化僅 5.4%(20 日線),改用季線抄底更只剩 0.6%,接近無效 |
| 乖離率能拿來選股嗎 | 能,但方向要反過來:選「正乖離最大」的強勢股當動能因子,研究段年化 17.7%(季線) |
| 均線週期用幾日 | 用季線(MA60)算乖離優於散戶慣用的 20 日線,研究段年化 17.7% vs 11.1% |
| 怎麼組成完整策略 | MA60 乖離選股疊上品質池、200 日趨勢濾網、反波動加權、ATR 現金停損與趨勢廣度減碼,純技術、不含基本面 |
| 效果如何 | 純技術強勢動能策略研究段年化 29.7%、月夏普 1.21,樣本外 28.5%、1.07,全期 29.1%、1.10,三段都勝含息 0050 |

本文所有數字皆出自 finlab 套件抓取的上市櫃真實價量資料(
price與etl:adj_close含息還原股價),回測區間 2015-01 至 2026-06-09,基準為含息 0050。文末附可下載的strategy.py與data.csv,可自行重現。對回測的觀念還不熟,可先看回測是什麼。
乖離率是什麼
乖離率(BIAS)衡量收盤價偏離移動平均線的程度,公式是:乖離率 =(收盤價 − N 日移動平均)/ N 日移動平均,常以百分比表示。N 通常取 6、12、20、60 日不等。乖離率為正,代表股價在均線之上、近期相對均線偏強;為負則代表跌破均線、相對偏弱。乖離率愈大,代表股價離均線愈遠。技術指標的基礎名詞可參考名詞詞彙表。
散戶教科書對乖離率有一套很直覺的用法:正乖離過大代表「漲太多」該賣、負乖離過大代表「跌太深」該買,本質是把它當均值回歸指標,假設股價總會「回到均線」。各家券商教材也常給一組門檻,例如短期 ±6%、中期 ±8%、長期 ±10% 視為過熱或超跌。這套說法聽起來合理,但它在台股真的成立嗎?直接回測。
乖離率的數學定義:一條公式拆給你看
乖離率的定義其實只有一條公式。設 為當日收盤價、 為過去 日收盤價的簡單移動平均,則 日乖離率為:
逐項拆解每個符號:
- :今天的收盤價,也就是市場現在替這支股票標的價格。
- :最近 個交易日收盤價的算術平均,代表「過去這段期間的平均成本/均衡價」。 取 20 約是月線、60 約是季線、120 約是半年線。
- 分子 :今天的價格比這條均線高(或低)多少元,是「絕對偏離量」。
- 除以 再乘 100:把絕對偏離換算成相對均線的百分比,這樣不同價位的股票才能放在同一把尺上比較——一支 500 元的股票偏離 10 元,和一支 50 元的股票偏離 10 元,意義天差地遠,百分比才能公平排序。
公式很簡單,但兩個設計選擇決定了它的個性。第一, 愈大,均線愈鈍、乖離率反應愈慢、雜訊愈少——這正是本文後面選季線()而非散戶慣用 20 日線的根本原因。第二,乖離率本質是「價格相對自身均線的位置」,所以它天生既能讀成「離均線太遠該回歸」(均值回歸視角),也能讀成「相對均線走得比別人強」(動能視角)。同一條公式、兩種讀法,方向用反了就是天壤之別——這也是本文整篇要回答的核心問題。指標的基礎名詞可參考名詞詞彙表。
在單一支股票上,兩個派別的買賣點長什麼樣
光看公式不夠直觀,把它畫在真實個股上最清楚。下圖是聯電(2303)2022 一整年的走勢(上方價格與兩派買賣箭頭、下方是 MA60 季線乖離率),這一年正是標準的下跌段:

圖上標了兩個派別的教科書訊號,規則如下:
- 逆勢派(均值回歸):季線乖離率跌破 −12%(過度負乖離)當下買進、衝破 +18%(過度正乖離)當下賣出——也就是「跌太深接、漲太多丟」。
- 動能派:季線乖離率由下向上穿越 +6%(相對季線轉強)買進、乖離率翻負(跌回均線下方)賣出——也就是「轉強才追、跌破才走」。
把訊號數出來看就懂了:在這段下跌年裡,逆勢派觸發了 9 次買進、只有 1 次賣出,幾乎整年都在「接刀」;而第一個逆勢派買點落在 2022-02-07,買進之後股價還最深續跌 35.1%,整個窗口聯電下跌 35.8%。這張圖把「負乖離不等於跌深反彈」直接畫給你看:負乖離只會在下跌途中不斷觸發買訊,每一次都是站在趨勢對立面。相對地,動能派全年只買 2 次、賣 8 次,多半在乖離翻負時就先走,少賠很多。
換到 2023 下半年到 2024 上半年的上升段(台積電 2330、聯發科 2454),畫面剛好相反:動能派順著趨勢買在轉強點、整段抱住大波段(台積電該窗 +66.8%、聯發科 +102.6%),而逆勢派因為股價一路創高、乖離率沒跌破 −12%,整段一次抄底機會都沒有,只能在頂部附近喊賣。順勢與逆勢的勝負,在這兩組圖裡一目了然。
但圖上也藏著一個務實的麻煩:動能派的訊號很頻繁。聯發科那段乖離率反覆翻正、翻負,買賣箭頭密密麻麻(窗內就 17 個訊號),這就是技術指標常見的 whipsaw(被假訊號來回甩巴掌)。這正是後面為什麼不用單股訊號進出場、而要改成「每月在全市場橫截面排序選一籃」加上 ATR 停損的原因——把單股的雜訊用一籃子和風控平滑掉。
這張圖你可以自己重畫。下面這段程式碼用 data.indicator 取季線乖離、用簡單的穿越邏輯標出兩派買賣點,貼給你的 AI 助理或直接執行都行:
顯示程式碼
import numpy as np
import pandas as pd
import finlab
from finlab import data
finlab.login() # 套件會在需要資料時引導你完成登入
# 1) 取單股收盤價與季線乖離率(這裡用聯電 2303)
sid = "2303"
close = data.get("price:收盤價")[sid]
ma60 = close.rolling(60).mean()
bias = (close - ma60) / ma60 # 乖離率(小數,× 100 即百分比)
# 2) 逆勢派:負乖離 < −12% 當天買、正乖離 > +18% 當天賣
contra_buy = (bias < -0.12) & (bias.shift() >= -0.12)
contra_sell = (bias > 0.18) & (bias.shift() <= 0.18)
# 3) 動能派:乖離上穿 +6% 轉強買、乖離翻負(跌回均線)賣
mom_buy = (bias > 0.06) & (bias.shift() <= 0.06)
mom_sell = (bias < 0) & (bias.shift() >= 0)
# 4) 取 2022 這段下跌窗來觀察逆勢派接刀
win = slice("2022-01-01", "2022-12-31")
print("逆勢派買進次數:", int(contra_buy[win].sum()))
print("逆勢派賣出次數:", int(contra_sell[win].sum()))
print("動能派買進次數:", int(mom_buy[win].sum()))
print("動能派賣出次數:", int(mom_sell[win].sum()))把 close、bias 與這四個布林序列丟進你習慣的繪圖工具(plotly / matplotlib),就能把上圖重畫出來——價格面板標箭頭、下方面板畫乖離率與 ±12% / +18% 的水平帶。重點不在畫得漂不漂亮,而在親眼看到「負乖離買點一路出現在續跌途中」這件事。
散戶最常見的「負乖離抄底」,在台股 11 年幾乎沒賺到錢
我們在可交易宇宙(成交金額前 300 大、收盤 > 10 元、60 日均量 > 100 萬股,排除 ETF、金融股、KY 股、處置股)裡,把幾種「乖離率選股」用法各跑一次月再平衡的橫截面回測。所謂橫截面,就是每個月在全市場依乖離率高低排序、各取一籃股票,這樣才能公平比較「乖離率到底該往哪個方向用」。研究段(2015-2021)結果如下:
| 乖離率用法 | 研究段年化報酬 | 對照含息 0050(15.3%) |
|---|---|---|
| 負乖離最大(20 日線,教科書抄底) | 5.4% | 大幅落後 |
| 負乖離最大(季線抄底) | 0.6% | 幾乎沒賺 |
| 正乖離最大(20 日線,短均動能) | 11.1% | 落後 |
| 正乖離最大(季線,勝出方向的動能用法) | 17.7% | 仍落後,但是四者最強 |

結論很清楚:最多人用的「負乖離過大抄底」在台股研究段年化只有 5.4%,換成季線抄底更只剩 0.6%,接近無效。 原因不難理解——在台股 2015-2021 這段,大型權值股偏向趨勢延續,逆勢去接一支正在破均線的弱勢股,等於站在趨勢的對立面被碾壓。負乖離無法區分「健康回檔(該買)」與「趨勢轉空的起點(該跑)」,把它單獨拿來抄底,就是把兩種互斥情境混在一起互相抵消。
反過來看,「正乖離最大」反而是四者裡最強的:用季線算乖離、選相對季線最強的一籃股票,研究段年化 17.7%。這其實就是一個動能訊號——正乖離大,代表這支股票近期相對均線走得比別人強。這和擺盪類指標在台股的共通結論一致:當動能因子用,比當均值回歸因子有料。RSI 也是同樣道理,延伸可看 RSI、MACD、KD 比較與技術面與基本面選股的差異。
把乖離率用對:純技術多層堆疊的強勢動能策略
知道「方向要反過來、用季線」只是起點。光是裸用 MA60「正乖離最大」的 15 檔等權籃子,研究段月夏普 1.00、研究段最大回撤 -38.4%,全期最大回撤更深達 -48.0%——報酬是用很深的回撤換來的,實務上很難抱得住。要變成可執行、且完全不靠基本面的策略,還要再疊幾層純技術的零件。
第一層:用品質池+200 日趨勢濾網框出真正的多頭強勢股
正乖離最大的籃子裡,混了兩種股票:一種是「結構性走強」的趨勢股,一種是「短線暴衝、隨時要崩」的投機股。我們用兩道純價格條件把後者濾掉:先要求股價站上季線(close > MA60,確認中期趨勢向上),再在符合的股票裡剔除 60 日報酬波動最高的一半,組成品質池;接著再加一道 200 日動能濾網(mom200 = 收盤價 ÷ 200 日前收盤 − 1 > 0),用半年的價格趨勢確認確實在多頭、把抄反向接刀的弱勢部位排除。 這道「品質池+趨勢濾網」過濾,把裸籃的研究段月夏普從 1.00 微升到 1.03、研究段最大回撤維持 -38.4% 級——主要作用是把高乖離裡基本盤就轉弱的標的先剃掉,為後面的風控打好底。這一步只用價格與均線,完全沒有財報或營收輸入。
第二層:用季線乖離選股、反波動加權
散戶習慣用 20 日線算乖離,但 20 日太短、雜訊太多。改用 MA60(季線)乖離,等於衡量「相對季線的中期動能」,訊號更持久、雜訊更低。在品質池裡,季線正乖離選股研究段年化 17.7%,明顯優於 20 日線的 11.1%。選出 15 檔後不用等權,改用反波動加權(權重正比於 1 ÷ 60 日報酬標準差的平方根):同樣是強勢股,波動越低的配重越高,讓組合在追動能的同時不被高波標的主導。
第三層:個股 ATR 現金停損+趨勢廣度減碼控尾部風險
最後一層是風控,也是把回撤壓下來的關鍵。我們不用大盤指數的擇時開關,改用兩道純技術的風控。其一是個股級 ATR 追蹤停損:任一持股當日跌破「自身近 180 日最高價 − 2.5 倍 ATR(14)」,該格就換成現金,且不補進其他股票——整籃的曝險會真實下降,而不是換一支同樣會跌的股票。其二是趨勢廣度 gentle 減碼:用全市場「站上 MA60 的股票比例」當大盤溫度計,比例偏低時用連續梯度線性把整籃曝險減到最低四成、剩餘轉現金(絕不加槓桿)。

把這幾層堆起來:裸 MA60 乖離 top15 等權籃(研究段月夏普 1.00、研究段回撤 -38.4%)→ 加品質池+200 日趨勢濾網(夏普 1.03、回撤 -38.4%)→ 再加反波動加權+ATR 現金停損+趨勢廣度減碼(夏普 1.21、回撤 -30.5%)。每加一層,風險調整報酬往上、回撤往下。
換成全期淨值來看更直接:同一個品質池高乖離籃,只用等權、沒加多層風控時,全期最大回撤達 -46.9%;補上反波動加權、ATR 現金停損與趨勢廣度減碼後,全期回撤收斂到 -36.7%,而長期淨值不僅沒被風控拖累、反而略勝一籌,兩條線都把含息 0050 買進持有甩在後面。

ATR 停損之所以優於固定的均線停損,是因為它隨個股自身波動自適應:高波股的停損線拉得更寬、低波股貼得更近,比一條固定均線更精準砍掉真正轉弱的格子。這種「用波動結構控風險」的邏輯,和學術上的波動度擇時一致——Moreira & Muir (2017) 在《Volatility-Managed Portfolios》證明:在風險惡化時調降曝險,能顯著提升投資組合的夏普。選股端刻意「買最強」而非「等最弱反彈」,也和 Jegadeesh & Titman (1993) 的動能效應一致:過去的贏家在中期傾向繼續贏。關於用波動結構控制回撤,也可參考市場濾網如何降低回撤與均線市場濾網。
完整策略:MA60 乖離動能選股 + 純技術多層風控
把上面幾層組成一套可執行、可重現、完全不含基本面的純技術策略:
- 可交易宇宙:成交金額前 300 大、收盤 > 10 元、60 日均量 > 100 萬股,排除 ETF、金融股、KY 股、處置股。
- 品質池:站上季線(close > MA60)、剔除 60 日報酬波動最高的一半,再加 200 日動能 > 0 的趨勢濾網。
- 選股:品質池內取 MA60 乖離率最大的 15 檔,以反波動(1 ÷ 60 日報酬標準差的平方根)加權,月再平衡。
- 個股風控:當日跌破「自身近 180 日最高價 − 2.5 倍 ATR(14)」即該格換現金,被砍的格子真歸零、不重新分配(曝險真實下降)。
- 大盤風控:以全市場「站上 MA60 比例」當趨勢廣度訊號,比例偏低時用連續梯度把整籃曝險線性減到最低四成、剩餘轉現金(絕不加槓桿)。
選股端的核心程式碼如下(可直接交給你的 AI 助理改寫、或下載文末完整版執行)。這裡把流程拆成「載入資料 → 算因子 → 框品質池 → 選股」幾步,方便逐步跟上:
顯示程式碼
import numpy as np
import pandas as pd
import finlab
from finlab import data
from finlab.backtest import sim
finlab.login() # 套件會在需要資料時引導你完成登入
# 1) 載入價量資料
close = data.get("price:收盤價")
amount = data.get("price:成交金額")
volume = data.get("price:成交股數")
# 2) 可交易宇宙:成交額前 300 大、收盤 > 10 元、60 日均量 > 100 萬股,
# 排除 ETF(00 開頭)與權證/KY(非 4 碼純數字)
liquidity_amt = amount.rolling(60).mean()
liquidity_vol = volume.rolling(60).mean()
is_common = pd.Series({sid: (str(sid)[:4].isdigit() and not str(sid).startswith("00"))
for sid in close.columns})
universe = liquidity_amt.is_largest(300) & (close > 10) & (liquidity_vol > 1_000_000) & is_common
# 3) 核心因子與輔助序列(全部純技術)
ma60 = close.rolling(60).mean()
bias = (close - ma60) / ma60 # 季線乖離率:相對 MA60 的中期動能
mom200 = close / close.shift(200) - 1 # 200 日動能:半年趨勢濾網,取代基本面
ret = close.pct_change()
vol60 = ret.rolling(60, min_periods=30).std()
# 4) 品質池:站上季線 → 剔除 60 日報酬波動最高的一半 → 再加 200 日動能 > 0
uptrend = close > ma60
lowvol_half = vol60.where(universe & uptrend).rank(axis=1, ascending=True) <= 150
quality_pool = (universe & uptrend) & lowvol_half & (mom200 > 0)
# 5) 池內取季線乖離最大的 15 檔(動能選股,相對季線最強者)
basket = bias.where(quality_pool).rank(axis=1, ascending=False) <= 15接著加上反波動加權、ATR 現金停損、趨勢廣度減碼與回測。風控線隨個股自身波動自適應:
顯示程式碼
# 6) 個股 ATR 現金停損:近 180 日高點回落超過 2.5×ATR(14) 即該格換現金
atr = data.indicator("ATR", timeperiod=14)
roll_high = close.rolling(180, min_periods=20).max()
still_holding = close > (roll_high - 2.5 * atr)
# 7) 反波動加權(1 / vol60 ** 0.5);被停損的格子歸現金、不重分配 = 真降曝險
held = basket & still_holding
inv_vol = (1.0 / (vol60 ** 0.5)).where(held)
weights = inv_vol.div(inv_vol.where(basket).sum(axis=1), axis=0).fillna(0.0)
# 8) 趨勢廣度 gentle 減碼:全市場站上 MA60 比例偏低時,整籃線性減碼到最低四成
breadth = uptrend.where(universe).sum(axis=1) / universe.sum(axis=1)
expo = (1.0 + (breadth - 0.55) / 0.55).clip(lower=0.40, upper=1.0)
weights = weights.mul(expo.reindex(close.index).ffill().fillna(1.0), axis=0)
# 9) 月再平衡回測(台股預設成本:手續費 + 賣出證交稅 0.3%)
report = sim(weights, resample="M", fee_ratio=1.425/1000*0.3, upload=False)
print(report.get_stats())完整版(含所有參數與輸出)請見文末可下載的 strategy.py。
這套策略研究段(2015-2021)年化 29.7%、月夏普 1.21、月索提諾 2.16、研究段最大回撤 -30.5%;樣本外(2022-2026)年化 28.5%、月夏普 1.07、月索提諾 2.00、回撤 -36.0%;全期(2015-2026)年化 29.1%、月夏普 1.10、月索提諾 2.01、全期最大回撤 -36.7%。三段都勝過含息 0050(全期年化 21.0%、夏普 1.05、回撤 -34.0%),且全期回撤略低。 它的賣點是「在報酬全面領先的前提下,用純技術的多層風控把回撤收進可控範圍」,全程不吃任何財報或營收資料。
下面是完整互動式回測:月報酬熱力圖、權益曲線、年度績效都可以直接在文章裡操作:
回測方法與口徑
量化結論的可信度取決於方法,以下逐項交代:
- 交易成本:策略使用 finlab
sim(),台股預設已內扣手續費(本文以 0.1425% 打三折計)與賣出證交稅 0.3%。 - 滑價:未額外假設滑價,實際成交衝擊取決於資金規模與流動性。
- 股票池:上市櫃普通股,60 日均成交金額前 300 名、收盤 > 10 元、60 日均量 > 100 萬股。
- 排除類別:排除 ETF(代號 00 開頭)、權證 / KY / 特別股(非 4 碼純數字)、金融保險股、處置與全額交割股,以降低生存者偏差與不可交易標的污染。
- 前視偏差:季線乖離、200 日動能、ATR、波動過濾與趨勢廣度均只使用當日(含)以前的價格;月頻再平衡,訊號於當期可得。完全不使用財報或月營收等基本面資料,自然沒有財報公布日對齊問題。
- 權重:持有 15 檔、以反波動(1 ÷ 60 日報酬標準差的平方根)加權,單一資產不另設上限;被 ATR 停損砍掉的格子真歸零,不重新分配給其他持股;趨勢廣度低時整籃線性減碼、剩餘轉現金。
- 周轉率:年換手約 8.0 次(月再平衡 + ATR 停損換現金 + 廣度減碼),屬中等偏高。
- 樣本內外:研究段 2015-2021、樣本外 2022-2026 分開回報,所有指標兩段都列,避免只報漂亮的一段。
穩健度
這套策略的 edge 不是靠單一參數湊出來的:
- 跨參數穩健:固定其餘層,把持股檔數(14/15/16)、趨勢廣度中心(0.52/0.55/0.56)、ATR 倍數(2.25/2.5/2.75)、反波動加權指數(0.5/0.75)各動一格,這些鄰格的研究段月夏普全落在 1.20-1.22、樣本外月夏普 1.05-1.08、全期最大回撤 -33.7% 到 -37.4%——是一片穩定的高原,不是靠單一參數湊出來的孤峰。
- 方向結論對均線週期不敏感:「正乖離=動能、負乖離抄底最弱」這個核心結論,在 20 日線與季線上都成立(季線只是報酬量級更高),不是某個特定均線的巧合。
- 乖離率仍是 alpha 來源:把選股因子反向、改取「乖離率最低」的一籃,績效大幅崩壞,證明真正貢獻報酬的是「選正乖離最大的強勢股」這個方向,而非其他風控層的副產品。
- 逐年對照含息 0050:2015-2026 共 12 個年度區間中有 7 個勝過 0050,多頭年大幅領先(2020 +62.1%、2021 +75.1%、2023 +95.6%),空頭與大型權值股獨強年(2022、2024)會落後。
參數最佳化:找一片高原,不是找一根孤峰
這套策略有兩個最值得檢查的參數:算乖離的均線窗(決定「動能」是看多長期的相對強弱)、與 ATR 現金停損的倍數(決定停損線拉多寬)。固定其餘層,把均線窗取 20/60/120 日、ATR 倍數取 2.0/2.5/3.0 倍交叉,9 種組合各跑一次真實回測,研究段月夏普畫成色溫圖如下:

看色溫圖的正確方式,是看「一片高原」而不是「單一孤峰」。孤峰(只有一格特別綠、周圍都很差)是過擬合的警訊:代表這個成績只在某個剛好的參數上成立,參數動一格就崩,實單上很可能複製不出來。高原(一整區都偏綠、彼此接近)才是真穩健:代表結論不靠精準調參,參數有容錯空間。
這張圖上,整片網格的研究段月夏普都站在 1.10 以上、沒有突兀的塌陷。20 日線那一欄研究段夏普最高(1.24/1.28/1.31),但要小心:那一欄的樣本外夏普反而偏低(多落在 1.0 以下),是典型「研究段漂亮、樣本外縮水」的訊號;季線(MA60)那一欄研究段夏普穩定在 1.20-1.24,且樣本外夏普是三欄裡最好的(1.01/1.07/1.10);120 日線那欄整體偏低。我們的預設值取 MA60 + 2.5×ATR(研究段月夏普 1.21、樣本外 1.07),刻意不去挑研究段數字最高的 20 日線格——挑均線窗時看的是「研究段與樣本外都站得住」,而不是研究段單點最高。
要嚴格一點驗證「沒有偷偷挑到角點」,我們用一個 cross-min(交叉最小值)準則做對照:對每一格,看「沿它所在的那一列與那一欄,最差的表現有多高」,取這個最差值最高的格。直白說就是——一個參數要被選上,必須單獨擾動均線窗或停損倍數任一軸都還站得住,而不是只靠某一條線特別強。在本網格上 cross-min 選到的是 MA20 + 2.0×ATR,與我們的預設(MA60 + 2.5×ATR)不同格,但兩者的關鍵指標幾乎打平。
下圖把「預設值」與「cross-min 穩健最佳」並排比較:

三項指標幾乎重疊:研究段月夏普都約 1.2,樣本外月夏普 1.07 對 1.0(預設略勝),全期最大回撤 -36.7% 對 -38.3%(預設略淺)。這正是我們要的結果:兩個用不同準則挑出來的參數打成平手、且我們的預設在樣本外與回撤上還略好,反而是健康訊號,代表預設已經落在高原上、沒有靠事後挑參數把成績灌水。如果這裡優化後能大幅跳升,反而要警惕是不是過度最佳化在自欺。過度最佳化的風險很實在:在歷史資料上把每個參數都調到極致,往往只是把雜訊背了起來,換到沒見過的市場就原形畢露。寧可取樣本外站得住的合理預設,也不要去追那格研究段最亮、樣本外卻縮水的孤峰。關於過擬合與參數穩健,延伸可看策略最佳化會不會過擬合與回測是什麼。
不同大盤狀態下的表現:逐年攤開
判斷一套策略是不是只靠某一段行情湊出來,最直接的方法是把每一個年度單獨結算、和含息 0050 對照。下表是純技術強勢動能策略 2015-2026 的逐年報酬(2026 標示「截至 2026-06」資料):
| 年度 | 策略報酬 | 含息 0050 | 勝過 0050? |
|---|---|---|---|
| 2015 | +5.3% | -5.9% | 是 |
| 2016 | +6.0% | +19.6% | 否 |
| 2017 | +42.7% | +18.1% | 是 |
| 2018 | -6.0% | -4.9% | 否 |
| 2019 | +39.1% | +33.5% | 是 |
| 2020 | +62.1% | +31.1% | 是 |
| 2021 | +75.1% | +21.9% | 是 |
| 2022 | -34.8% | -21.4% | 否 |
| 2023 | +95.6% | +27.5% | 是 |
| 2024 | +6.1% | +48.6% | 否 |
| 2025 | +40.7% | +36.8% | 是 |
| 2026(截至 2026-06) | +58.7% | +60.0% | 否 |
逐年看得出這套策略的個性:多頭年大幅領先(2020、2021、2023 各賺六到九成、把 0050 甩開一大截),靠的是 MA60 乖離抓到中小型強勢股的爆發力;但有兩種年份會吃虧。一是系統性空頭年:2022 升息熊市策略 -34.8%、略遜於 0050 的 -21.4%,因為中小型動能在恐慌殺盤時 beta 較高,趨勢廣度減碼與 ATR 停損能緩衝但無法完全閃過。二是大型權值股獨強年:2024 台積電等少數權值股扛起大盤、中小型動能落後,策略只賺 6.1%、大幅落後 0050 的 48.6%。整段 12 個年度區間有 7 個勝過 0050,定位是「多數年份領先、特定盤型會明顯落後」的動能策略,並非每年都贏。
加上月營收 YoY 會更好嗎:基本面是選配,不在主策略內
本文的主策略是完全不含基本面的純技術策略:選股只用 MA60 乖離率、200 日動能與波動度,風控只用個股 ATR 與全市場趨勢廣度,沒有任何財報或月營收輸入。這是刻意的設計——純技術訊號每日可得、無財報公布延遲與對齊問題,回測口徑乾淨、可重現性高。本文用來確認多頭趨勢的那道濾網,也刻意挑「200 日動能」這個純價格指標,而不是月營收年增率。
常見的延伸問題是:在選股端疊一層月營收年增率(YoY)過濾,績效會不會更好?這是一個合理的研究方向,但屬於「在純技術主策略之外的選配實驗」,不納入本文主策略的數字。原因有二:其一,主策略選股只取 15 檔、集中度已高,再加營收過濾會大幅縮小可選池,反而犧牲動能的爆發力;其二,月營收是領先指標、公布有時間落差,要正確對齊「當期(含)以前已公布」的資料才不會前視,這會把乾淨的純技術口徑複雜化。想實驗的讀者可在下載的程式碼裡,於選股前加一層 monthly_revenue 的 YoY 過濾自行對照。基本面與技術面如何分工,可延伸看技術面與基本面選股的差異與月營收動能選股策略。
策略的限制與取捨
- 集中度帶來中型回撤:本策略全期年化 29.1% 領先 0050 的 21.0%、月夏普 1.10 也略高於 0050 的 1.05,但只持 15 檔、全期最大回撤 -36.7%、略深於 0050 的 -34.0%。報酬全面領先換到的代價是單股與類股風險集中,承受得住這級回撤才適合。
- 大型權值股獨強年會落後:edge 偏中小型動能。2024 是大型權值股獨強、中小型動能落後的一年,本策略只賺 6.1%、大幅落後 0050 的 48.6%;2022 升息空頭也以 -34.8% 略遜於 0050 的 -21.4%。當市場由少數大型權值股主導、或系統性殺盤時,這套中小型動能策略會吃虧。
- 不能拿來做多空套利:我們測過「做多正乖離、放空負乖離」的多空價差,研究段年化只有 3.8%、樣本外更掉到 3.0%,兩段方向常相反被抵銷。乖離率的價值在「單邊做多強勢股 + 個股風控」,不在多空對沖。
- 容量與成本:選股集中在前 300 大流動性宇宙、僅 15 檔,大資金部署需重估流動性衝擊;回測未逐筆估算滑價與借券成本,亦未估算策略容量上限。
- 崩盤型態涵蓋有限:資料起點 2015,ATR 停損與趨勢廣度減碼主要在 2018 / 2020 / 2022 幾次急跌上驗證,未對更早期(2008 / 2011)的崩盤型態做滾動測試,不保證對沒見過的型態同樣有效。
自己跑一次
把下面這句話交給你的 AI 助理,它會引導你安裝 FinLab Skill、抓台股資料、重現這篇的回測:
用 AI 開始 FinLab
把這句話交給你的AI,它會帶你完成設定並做出第一個策略。
告訴你的AI:
「幫我設定 FinLab,做一個動能策略:https://finlab.finance/setup」
裝好之後,下載本文的 strategy.py 與 data.csv,即可在自己的環境重跑、改參數、換因子。登入只需在程式裡寫 finlab.login(),套件會在需要資料時引導你完成登入。想延伸成更完整的量化流程,可參考量化交易總覽與程式交易是什麼。
乖離率最常見的三個誤用,回測都幫你踩過了
把前面的真實數字收斂成三個最容易犯、且本文回測都實際驗過的錯,讓你少走冤枉路:
- 把負乖離當「跌深必反彈」訊號:這是最致命的誤用。前面聯電 2022 那張圖,逆勢派整年觸發 9 次買進、第一個買點之後股價還續跌 35.1%;放到全市場橫截面,「負乖離最大」研究段年化只有 5.4%、用季線抄底更只剩 0.6%。負乖離無法區分「健康回檔」與「趨勢轉空起點」,單獨拿來抄底長期接近無效。
- 用太短的均線算乖離:散戶習慣的 20 日線雜訊太多。同樣選正乖離最大,20 日線研究段年化 11.1%、季線(MA60)17.7%——只是把均線拉長,報酬量級就差一截。乖離率衡量的是「相對均線的中期動能」,均線太短會把雜訊也當訊號。
- 拿乖離率做多空對沖:很多人想當然耳「做多正乖離、放空負乖離」應該能賺價差。實測這條多空價差研究段年化只有 3.8%、樣本外掉到 3.0%,因為兩段方向常相反、互相抵銷。乖離率的價值在「單邊做多強勢股 + 個股風控」,不在多空套利。
除了上面三個誤用,還有一個天生限制要先認清:這套策略的 edge 偏中小型動能,在大型權值股獨強的年份會吃虧。2024 大型權值股獨強,本策略只賺 6.1%、大幅落後 0050 的 48.6%。它不是萬靈丹,是一套「多數年份領先、特定盤型會落後」的動能策略。指標的正確用法可橫向對照 RSI、MACD、KD 比較與 KD 鈍化策略回測。
常見問題
Q:乖離率(BIAS)負乖離過大一定會反彈嗎? 不一定。負乖離(股價跌破均線)在台股研究段橫截面回測年化只有 5.4%(20 日線),用季線抄底更只剩 0.6%,因為它無法區分「健康回檔」與「趨勢轉空的起點」。把它當無腦抄底訊號,長期接近無效。
Q:乖離率該設多少才算過大?±6%、±8% 這些門檻準嗎? 那些固定門檻是把乖離率當均值回歸指標在用,但本文回測顯示這個方向在台股賺不到錢。比起糾結門檻數字,更該換個用法:把乖離率當「相對均線的動能因子」,每月在全市場挑正乖離最大的一籃強勢股,再用 ATR 停損控風險。用對方向,比調門檻重要。
Q:乖離率的均線要用幾日?20 日還是 60 日? 本文回測中,用季線(MA60)算乖離明顯優於散戶慣用的 20 日線:品質池內季線正乖離研究段年化 17.7%,20 日線只有 11.1%。季線乖離衡量的是中期動能,雜訊更低、訊號更持久。
Q:乖離率可以單獨拿來當買賣訊號嗎? 不建議。無論是負乖離抄底還是正乖離追高,單獨用都不夠。它比較適合當「橫截面選股因子」搭配品質過濾、趨勢濾網與 ATR 停損,組成一籃動能策略,而不是對單一支股票抓進出場點。
Q:風控用個股 ATR 停損還是大盤擇時? 本策略兩道風控都用,但都是純技術、互補不重疊。個股級 ATR 現金停損隨個股波動自適應,只砍掉真正轉弱的格子、不誤殺整籃;趨勢廣度減碼則用全市場站上 MA60 的比例當大盤溫度計,比例偏低時整籃線性減碼到最低四成、剩餘轉現金。兩道一起把裸籃全期 -48.0% 的回撤收斂到 -36.7%,而長期報酬不降反升。
Q:這套策略適合誰? 適合想用技術動能參與台股、能接受 -37% 等級回撤、且不在意短期落後大盤的人。不適合追求「永遠贏過 0050」或受不了中型回撤的人——在大型權值股獨強的年份(如 2024),這套中小型動能策略會明顯落後。
Q:乖離率和 RSI、KD 一起用會更好嗎? 這些都是擺盪 / 波動類指標,資訊高度重疊,硬疊在一起通常是負貢獻。本文也測過「再加動能或量能確認」,夏普沒升、回撤沒降、樣本外反而被稀釋。比較有效的組合是「不同性質」的訊號,例如乖離率動能(選股)+ ATR 停損(風控)。各指標的正確用法可參考 RSI、MACD、KD 比較與 KD 鈍化策略回測。
Q:乖離率和肯特納通道、ATR 這些波動指標有關嗎? 有。乖離率衡量價格偏離均線的幅度,本質和波動有關;本文的風控腿就是用 ATR(平均真實波幅)做停損。想了解波動類指標,可看肯特納通道與 ATR 指標與台股 ATR 波動度指標。
最後更新:2026-06|回測區間:2015-01 ~ 2026-06-09|作者:FinLab 量化研究團隊(經量化研究員審閱)
本文僅供量化研究與教學用途,所有回測數字均由 finlab 套件在真實台股資料上產出,過去績效不代表未來表現,不構成投資建議。乖離率純技術強勢動能策略全期最大回撤 -36.7%,實際交易前請自行評估風險、滑價與交易容量。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

