均線在台股的正確用法:靠近新高選股+個股均線停損的純技術策略
均線是台股散戶最熟的技術指標:黃金交叉、死亡交叉、站上年線、跌破季線。但把這些用法放進台股做 11 年回測(2015-2026),拿均線「選股」幾乎都贏不過大盤——散戶最愛的「黃金交叉+多頭排列買進」研究段年化 15.3%、最大回撤卻深達 -45.2%;「跌破均線抄底」更只有 5.2%、回撤 -43.1%,全面輸給含息 0050(全期年化 21.0%、月夏普 1.05、回撤 -34.0%)。問題不在均線,而在用錯了均線的角色。把均線換個用法就翻盤:第一,把均線「往上包住」最近價格高點,算出「收盤對自身過去 280 個交易日滾動最高價的靠近度」(越接近 1 越貼近 52 週新高),當成橫截面選股因子,每月底在可交易宇宙裡挑最靠近波段高點的 20 檔等權持有;第二,用「個股收盤一跌破自身 20 日均線就清空該檔」當個股級停損。把這兩個純均線零件組成一套完全不含基本面的策略:研究段(2015-2021)年化 27.4%、月夏普 1.35,樣本外(2022-2026)年化 30.6%、月夏普 1.21,全期(2015-2026)年化 28.6%、月夏普 1.22、月索提諾 2.28,全期最大回撤 -34.4%——三段都勝過含息 0050(全期年化 21.0%、月夏普 1.05、回撤 -34.0%)。
先用一張表回答你搜尋「均線」時最想知道的事:
| 你想知道的 | 本文用真實台股回測的回答 |
|---|---|
| 均線是什麼 | N 日收盤價的算術平均;常用 20 日(月線)、60 日(季線)、120 日(半年線)、240 日(年線) |
| 黃金交叉買進有效嗎 | 拿來選股不行。黃金交叉+多頭排列研究段年化 15.3%、最大回撤 -45.2%,沒贏過含息 0050 |
| 跌破均線抄底有效嗎 | 不行。低乖離抄弱勢研究段年化僅 5.2%、最大回撤 -43.1%,接近無效 |
| 均線能拿來選股嗎 | 能,但要換個角度:用「靠近 280 日滾動最高價」的均線乖離選最強勢的 20 檔,研究段年化 27.4%、月夏普 1.35 |
| 那它該怎麼用 | 選股:挑最靠近波段新高的個股;風控:個股跌破自身 20 日均線就清空該檔停損 |
| 效果如何 | 純技術策略研究段年化 27.4%、夏普 1.35,樣本外 30.6%、1.21,全期 28.6%、1.22,三段都勝含息 0050 |

本文所有數字皆出自 finlab 套件抓取的上市櫃真實價量資料(
price收盤價與etl:adj_close含息還原股價),回測區間 2015-01 至 2026-06-09,基準為含息買進持有 0050。文末附可下載的strategy.py與data.csv,可自行重現。對回測的觀念還不熟,可先看回測是什麼。
均線是什麼
均線(Moving Average,MA)就是「過去 N 個交易日收盤價的算術平均」,每天往前滾動一格,所以叫「移動」平均。它平滑掉單日的雜訊,反映一段時間裡市場對價格的共識成本。台股最常用的幾條:5 日(週線)、20 日(月線)、60 日(季線)、120 日(半年線)、240 日(年線)。短均線靈敏但雜訊多,長均線平滑但反應慢——這是均線天生的取捨。技術指標的基礎名詞可參考名詞詞彙表。
從均線衍生出幾種散戶最熟的訊號:
黃金交叉:短均線由下往上穿過長均線(例如 20 日穿過 60 日),被視為轉強訊號。
死亡交叉:短均線由上往下跌破長均線,被視為轉弱訊號。
多頭排列:短、中、長均線由上而下依序排開(短 > 中 > 長),被視為趨勢向上。
乖離率:收盤價相對均線的偏離程度,公式為(收盤價 − 均線)/ 均線;本文以「收盤價對 20 日均線的乖離」為標準因子。
這些訊號到底有沒有用?散戶最常拿它們選股:挑剛黃金交叉、挑站上短均線、挑低乖離想等反彈的股票。以下先用回測檢驗這些教科書選股法,再說明把均線換個角度(用「離 52 週新高多近」當選股因子)為什麼就能翻盤。
均線的數學定義
均線的核心只有一條算術平均,黃金交叉則是兩條不同窗長均線的相對位置:
把符號逐一拆開: 是第 天往前數第 天的收盤價, 就是當天收盤; 是均線的窗長(台股常用 20、60、120、240 日); 把最近 天的收盤價相加再除以 ,得到一條平滑後的價格線。窗長 越大,納入的歷史天數越多,曲線越平滑、對最新一根 K 棒的權重越低,因此反應越慢; 越小則越貼近現價、越靈敏,但也越容易被單日跳動帶著走。黃金交叉的定義就是把短窗均線 (例如 20 日)和長窗均線 (例如 60 日)相減:前者由下往上超過後者那一刻叫黃金交叉,反向跌破叫死亡交叉。注意這個公式裡每一天的權重都相同(都是 ),這正是 SMA 和 EMA(指數移動平均,近期權重較高)最大的差別,也是它反應偏慢的根源。
一張圖看懂黃金交叉、死亡交叉,以及它為什麼會「甩巴掌」
理論講完,直接把公式畫到真實個股上。下面兩張圖用台積電(2330)與聯發科(2454)2023 年 7 月到 2024 年 6 月的還原前收盤價,疊上 20 日(短均)與 60 日(長均)兩條 SMA,並在價格面板標出「黃金交叉買進」(藍色三角)與「死亡交叉賣出」(紫色倒三角)的訊號點:

台積電這一年走的是一段乾淨的上升趨勢,20×60 均線只交叉了 3 次(2 次黃金交叉、1 次死亡交叉),訊號清楚、跟著做大致賺得到主升段——這是黃金交叉派最理想的情境。但同一套規則換到聯發科就完全變樣:

同樣一年、同樣的 20×60 規則,聯發科卻觸發了 7 次交叉(4 次黃金交叉、3 次死亡交叉)。看圖就懂問題在哪:在 2023 下半年那段橫盤整理裡,兩條均線黏在一起反覆穿越,每一次穿越都產生一個訊號,買在小反彈的頭、賣在小回檔的底,來回被「甩巴掌」(whipsaw)。這是均線交叉法的結構性弱點:它在趨勢明確時有用,在盤整時卻會被雜訊頻繁觸發,把獲利一刀刀磨掉。這也正好解釋了後面回測的結果:把黃金交叉拿來橫截面選股,會在大量盤整股上累積無效的進出,所以研究段贏不過大盤。
這兩張圖是用下面這段程式碼畫的,你可以換成任何股票自己重畫,直觀感受不同個股的訊號密度:
顯示程式碼
import finlab
from finlab import data
import matplotlib.pyplot as plt
# finlab 會在需要資料時自動引導登入
finlab.login()
# 取單一個股的收盤價,計算短均與長均
close = data.get("price:收盤價")
stock_id = "2454" # 換成你想看的股票代號
px = close[stock_id].loc["2023-07-01":"2024-06-30"]
ma_short = px.rolling(20).mean()
ma_long = px.rolling(60).mean()
# 黃金交叉:短均由下穿上長均;死亡交叉:由上跌破
above = ma_short > ma_long
golden = above & (~above.shift(1).fillna(False)) # 翻為 True 的那天
death = (~above) & (above.shift(1).fillna(False)) # 翻為 False 的那天
# 畫價格 + 兩條均線,標出買賣點
fig, ax = plt.subplots(figsize=(12, 5))
ax.plot(px.index, px, label=f"{stock_id} 收盤", color="#111827")
ax.plot(ma_short.index, ma_short, label="SMA20 短均", color="#7C3AED")
ax.plot(ma_long.index, ma_long, label="SMA60 長均", color="#F59E0B")
ax.scatter(px.index[golden], px[golden], marker="^", color="#2563EB", s=90, label="黃金交叉買進")
ax.scatter(px.index[death], px[death], marker="v", color="#7C3AED", s=90, label="死亡交叉賣出")
ax.legend()
plt.show()把 stock_id 換成 "2330",就會看到台積電那張訊號稀疏的圖;換成盤整股,訊號會明顯變密。光是切換幾檔股票自己看一次,就能體會「均線交叉的有效性高度取決於個股當下是趨勢還是盤整」——這也是它不適合無差別套到全市場選股的直觀原因。
散戶最常見的均線選股,在台股 11 年都沒贏過大盤
我們在可交易宇宙(60 日均量 > 100 萬股、收盤 > 10 元、成交金額前 300 大,排除 ETF、金融股、KY 股、處置股)裡,把幾種「均線選股」用法各跑一次月再平衡的回測。研究段(2015-2021)結果如下:
| 均線選股用法 | 研究段年化報酬 | 研究段月夏普 | 全期最大回撤 |
|---|---|---|---|
| 黃金交叉+多頭排列買進 | 15.3% | 0.7 | -45.2% |
| 追高乖離(買最強勢 30 檔) | 11.5% | 0.61 | -50.0% |
| 跌破均線抄底(買最弱勢 30 檔) | 5.2% | 0.32 | -43.1% |
| 超賣接刀(低乖離搶反彈) | 5.2% | 0.32 | -43.1% |
| 對照:含息買進持有 0050 | 15.3% | 1.0 | -34.0% |

結論很清楚:這些最多人用的均線選股法,在台股研究段不是輸報酬、就是輸風險。 「黃金交叉+多頭排列」年化雖然和含息 0050 打平(都是 15.3%),但月夏普只有 0.7(同期 0050 是 1.0),而且最大回撤深達 -45.2%——報酬一樣、波動與回撤卻大得多。「跌破均線抄底」「超賣接刀」更只有 5.2% 年化,接近無效。
原因不難理解:把均線「對短期均線的瞬間乖離」或「兩條均線交叉」當訊號,是個「雙義訊號」。高乖離(站很遠的均線上方)可能是強勢延續、也可能是過熱準備回檔;低乖離可能是落底反彈、也可能是趨勢轉空的起點。把它單獨拿來橫截面排名選股,等於把兩種互斥邏輯混在一起互相抵消。我們把對短均線的乖離各種橫截面取法(最高、最低、一階差分、二階差分、z-score)都測過,研究段月夏普全部 ≤ 0.61,全面輸給同期含息 0050。問題出在「拿哪一條均線、衡量哪一段乖離」,而不是均線這個工具本身。延伸閱讀:技術面與基本面選股的差異、動能策略。
那均線到底該怎麼用?關鍵是換掉「對短期均線的瞬間乖離」這個訊號來源:改用一條「往上包住最近價格高點的長均線」,看收盤離這條高點包絡線多近——也就是「離 52 週新高多近」。挑最靠近波段新高的股票,再用個股自己的短均線當停損線,故事就完全不同了。
換個角度用均線:把它接成「離 52 週新高多近」的選股因子
散戶的均線選股之所以失靈,問題出在訊號設計:拿的是「對短期均線的瞬間乖離」或「兩條均線剛交叉」這種高頻、雙義的訊號。換掉訊號來源,均線就能變成有效的選股因子。本文用的純技術策略建立在兩個純均線零件上。
零件一:靠近 280 日滾動最高價,當選股因子
第一個零件是把均線「往上包住價格高點」。具體做法是計算每檔股票「收盤價 ÷ 自身過去 280 個交易日的滾動最高價」,我們稱為新高靠近度(prox):這個比值越接近 1,代表收盤越貼近自己過去約 52 週(280 個交易日約一年)的波段高點;越低代表離高點越遠、結構越弱。每月底在可交易宇宙裡,挑 prox 最高的 20 檔等權持有——也就是挑「最靠近自己 52 週新高」的一籃強勢股。
這和散戶用的短均線乖離差在哪?短均線乖離問的是「現在離 20 日成本線多遠」,那只是一兩週的雜訊;新高靠近度問的是「現在離一整年的高點多近」,捕捉的是中長期趨勢結構。前者雙義(高乖離可能過熱也可能強勢),後者單義(靠近年度新高就是趨勢明確向上)。這條「離新高愈近愈強」的選股邏輯,和 Jegadeesh & Titman (1993) 的動能效應一致:過去的中期贏家傾向繼續贏。
零件二:個股跌破自身 20 日均線就清空該檔
選最強勢的 20 檔之後,第二個零件用均線做個股級停損:持股期間日頻檢查,任何一檔的收盤一旦跌破自身 20 日均線,就立刻清空該檔、降為現金(不補倉、不加槓桿),等下次月再平衡才有機會重新選入。20 日均線在這裡扮演的角色是每檔個股的「趨勢止血線」,而非選股依據——強勢股一旦走弱、跌破短期成本線,先出場保護獲利,避免單一持股從高點一路抱到崩。
把這兩個零件組起來,效果一目了然。下圖比較「裸用」(同宇宙、同新高靠近度選 20 檔等權,但不加任何停損)與加上個股 20 日線停損後的完整策略:

裸用版(不停損)全期年化 27.7%、全期最大回撤 -31.2%;加上個股 20 日線停損後,全期年化微升到 28.6%,但全期最大回撤反而略加深到 -34.4%。停損換來的是個股級的止血效果:當某一檔強勢股從高點轉弱、跌破自身 20 日線就先清空該檔,壓低單檔一路抱到崩的風險,代價是出場後可能錯過反彈、整體回撤略深一點。它的價值在降低單檔崩盤風險,整體回撤反而略增,沒有免費午餐。
完整策略:靠近新高選股+個股均線停損
把上面兩個零件組成一套可執行、可重現、完全不含基本面的純技術策略:
- 選股因子:在可交易宇宙裡,每檔算「收盤 ÷ 自身過去 280 個交易日滾動最高價」的新高靠近度,取最高的 20 檔。
- 持股與權重:那 20 檔等權持有,月再平衡。
- 個股停損:持股期間日頻檢查,任一持股收盤跌破自身 20 日均線即清空該檔、降為現金,不補倉、不加任何槓桿。
- 全程不使用任何槓桿 ETF、不含任何財報或月營收輸入。
選股端的核心程式碼(可直接交給你的 AI 助理改寫、或下載完整版執行):
顯示程式碼
import pandas as pd
import finlab
from finlab import data
# finlab 會在需要資料時自動引導登入
finlab.login()
# 1) 載入價量資料
close = data.get("price:收盤價")
amount = data.get("price:成交金額")
# 2) 可交易宇宙:成交額前 300 大、收盤 > 10 元,排除 ETF 與權證/KY
liquidity = amount.rolling(60).mean()
is_common = pd.Series({s: str(s)[:4].isdigit() and not str(s).startswith("00")
for s in close.columns})
universe = liquidity.is_largest(300) & (close > 10) & is_common
# 3) 選股因子:收盤對自身 280 日滾動最高價的靠近度,越接近 1 越貼近 52 週新高
rolling_high = close.rolling(280).max()
prox = close / rolling_high
# 4) 每月底取池內 prox 最高的 20 檔等權
ranked = prox.where(universe).rank(axis=1, ascending=False)
basket = ranked <= 20
# 5) 個股停損:收盤跌破自身 20 日均線就清空該檔(出場條件)
ma20 = close.rolling(20).mean()
exit_signal = close < ma20完整的進出場建構、月再平衡與回測呼叫請見文末可下載的 strategy.py。
這套策略研究段(2015-2021)年化 27.4%、月夏普 1.35、月索提諾 2.22、研究段最大回撤 -34.1%;樣本外(2022-2026)年化 30.6%、月夏普 1.21、月索提諾 2.59;全期(2015-2026)年化 28.6%、月夏普 1.22、月索提諾 2.28、全期最大回撤 -34.4%。三段都勝過含息 0050(全期年化 21.0%、月夏普 1.05、回撤 -34.0%),且全期回撤與 0050 相當。年換手約 8.6 次。
下面是完整互動式回測:月報酬熱力圖、權益曲線、年度績效都可以直接在文章裡操作:
不同大盤狀態下的表現:研究段與樣本外都站得住
判斷一套策略是不是只靠某一段行情湊出來,最直接的方法是把回測切成兩段、各自結算。本文把 2015-2021 當研究段(涵蓋 2015 股災、2018 中美貿易戰急跌、2020 疫情崩跌與反彈),2022-2026 當樣本外(涵蓋 2022 升息熊市與其後的強多頭,2026 標示「截至 2026-06」資料):
| 區間 | 大盤背景 | 策略年化 | 策略月夏普 | 策略最大回撤 | 含息 0050 年化 |
|---|---|---|---|---|---|
| 研究段 2015-2021 | 多次急跌與反彈交錯 | 27.4% | 1.35 | -34.1% | 15.3% |
| 樣本外 2022-2026(截至 2026-06) | 升息熊市後轉強多頭 | 30.6% | 1.21 | -34.1% | 30.4% |
| 全期 2015-2026 | — | 28.6% | 1.22 | -34.4% | 21.0% |

兩段分開看的重點是:策略在研究段與樣本外的年化都落在 27%~31%、月夏普都在 1.2 以上,沒有出現「研究段漂亮、樣本外垮掉」的過擬合特徵。 研究段它大幅領先含息 0050(27.4% vs 15.3%),靠的是「靠近新高」選股在震盪市裡持續挑到趨勢明確向上的強勢股;樣本外它與含息 0050 的差距縮小(30.6% vs 30.4%),因為 2022 之後是台股強單邊多頭,買進持有本來就難贏,但策略仍以相當的回撤微幅勝出。
月營收 YoY 是選配,不在主策略內
本文的主策略是完全不含基本面的純技術策略:選股只用「收盤對 280 日滾動最高價的靠近度」這個純價格因子,風控只用個股自身的 20 日均線停損,沒有任何財報或月營收輸入。這是刻意的設計——純技術訊號每日可得、無財報公布延遲與對齊問題,回測口徑乾淨、可重現性高。
常見的延伸問題是:在選股端疊一層月營收年增率(YoY)過濾,績效會不會更好?這是一個合理的研究方向,但屬於「在純技術主策略之外的選配實驗」,不納入本文主策略的數字。原因有二:其一,主策略選股只取 20 檔、集中度已高,再加營收過濾會大幅縮小可選池,反而犧牲「靠近新高」這個趨勢訊號的純度;其二,月營收是領先指標、公布有時間落差,要正確對齊「當期(含)以前已公布」的資料才不會用到未來資訊,這會把乾淨的純技術口徑複雜化。想實驗的讀者可在下載的程式碼裡,於新高靠近度排名前加一層 monthly_revenue:去年同月增減(%) 的 YoY 過濾自行對照,但要記得只用已公布的資料、避免前視。基本面與技術面如何分工,可延伸看技術面與基本面選股的差異。
回測方法與口徑
量化結論的可信度取決於方法,以下逐項交代:
- 交易成本:策略使用 finlab
sim(),台股預設已內扣手續費(本文以 0.1425% 打三折計)與賣出證交稅 0.3%。 - 滑價:未額外假設滑價,實際成交衝擊取決於資金規模與流動性。
- 股票池:上市櫃普通股,60 日均量 > 100 萬股、收盤 > 10 元、60 日均成交金額前 300 名。
- 排除類別:排除 ETF(代號 00 開頭)、權證/KY/特別股(非 4 碼純數字)、金融保險股、處置與全額交割股,以降低生存者偏差與不可交易標的污染。
- 前視偏差:新高靠近度(收盤 ÷ 280 日滾動最高價)與 20 日均線停損均只使用當日(含)以前的價格;月頻再平衡,選股訊號於當期可得;完全不使用財報或月營收等基本面資料,自然沒有財報公布日對齊問題。
- 權重:選股籃取 20 檔等權,單一資產不另設上限;個股觸發停損後降為現金,不補倉、不加任何槓桿。
- 周轉率:年換手約 8.6 次(選股集中 20 檔 + 月再平衡 + 個股跌破 20 日線即出場),高於被動持有,成本敏感度較高,已在
sim()內扣手續費與證交稅下計算。 - 樣本內外:研究段 2015-2021、樣本外 2022-2026 分開回報,所有數字兩段都列,避免只報漂亮的一段。
穩健度
這套策略的優勢不是靠單一參數湊出來的:
- 跨新高靠近度視窗穩健:把新高靠近度的滾動最高視窗設 240/252/280 日各測一次(持 20 檔、20 日線停損固定),研究段月夏普分別是 1.25/1.32/1.35——長視窗(252~280 日)一帶整片落在 1.3 以上,是一塊連續的高原,不是孤峰。
- 跨持股檔數穩健:持股檔數設 15/20/25 各測一次(280 日視窗),研究段月夏普分別 1.25/1.35/1.24;20 檔附近最高,持 25 檔開始稀釋選股訊號、Sharpe 略降,但仍維持在 1.2 以上。
- 停損天數不敏感:個股停損的均線窗設 20/60/120 日各測一次,全期年化分別 28.6%/28.1%/27.9%、全期最大回撤 -34.4%/-33.0%/-31.9%——換停損天數只在報酬與回撤之間做小幅取捨,沒有哪一格是靠特定數值湊出來的。
- 樣本外不衰退:勝出設定樣本外月夏普 1.21,年化 30.6% 甚至高於研究段年化 27.4%——優勢在最沒見過的資料上沒有打折。
參數最佳化:找一片高原,不是找一根孤峰
策略有兩個關鍵參數:新高靠近度的滾動最高視窗(看多長一段的高點)與等權持股檔數(決定集中度)。最危險的做法是把這兩個參數掃一遍,挑出研究段表現最好的那一格就上線——那幾乎一定是過度最佳化(overfitting)。正確的看法是把整片參數空間畫成色溫圖,看「綠色(高夏普)是連成一片高原,還是只有一格孤峰」。
下面把新高靠近度視窗(240/252/280 日)× 持股檔數(15/20/25 檔)共 9 組組合各跑一次回測(個股 20 日線停損固定),每格標的是研究段月夏普:

讀這張圖的重點是看綠色的分布形狀,而非去搶最綠的那一格。可以看到:持股 20 檔那一列、配上長視窗(252~280 日),整片都落在月夏普 1.3 以上的相近水準,是一塊連續的高原;持 25 檔那一列因為訊號被稀釋而整片轉淡(夏普掉到 1.1~1.24),視窗縮到 240 日反應較快但較雜,Sharpe 也略降。換句話說,策略對「視窗設 252 還是 280、持 15 還是 20 檔」這種微調並不敏感,方向性結論是「視窗別太短、檔數別太多」——這正是穩健、不是過擬合的特徵。
我們本文預設取新高靠近度視窗 280 日、持 20 檔,它落在高原中段:研究段月夏普 1.35、年化 27.4%,樣本外月夏普 1.21、年化 30.6%。前面那張「裸用 vs 加停損」的對照圖已經示範過:在這片高原上把個股停損的均線窗從 20 日換到 60 日、120 日,全期年化只在 27.9%~28.6% 之間小幅移動、全期回撤在 -31.9%~-34.4% 之間:

相鄰設定的差距小到幾乎可以忽略,這恰恰是健康的訊號:如果換個參數就讓績效翻倍,那才該擔心原本的數字是運氣。真正能拿去實單的參數,是那種「附近一整圈都差不多好」的參數;績效對某個精確數值極度敏感的策略,通常一上線就會破功。 過度最佳化的代價不會寫在研究段的漂亮數字裡,只會在樣本外悄悄出現。
策略的限制與取捨
- 集中度帶來較深回撤:策略只持 20 檔、全期最大回撤 -34.4%,與含息 0050 的 -34.0% 相當但並不算淺。選股集中換到較高報酬,代價是單股與類股風險集中,承受得住這級回撤才適合。
- 高周轉、成本敏感:年換手約 8.6 次明顯高於被動持有,又因個股跌破 20 日線即出場、進出頻繁,報酬已在
sim()內扣手續費與證交稅後計算,但實單滑價會進一步侵蝕,資金規模越大越明顯。 - 崩盤型態涵蓋有限:選股與停損主要在 2015/2018/2020/2022 幾次急跌上驗證,資料起點 2015,未對更早期(2008、2011)的崩盤型態做滾動測試,不保證對沒見過的型態同樣有效。
- 二維穩健面已掃,停損窗為單軸:新高靠近度視窗 × 持股檔數的二維掃描已完成(見「參數最佳化」段),結論對長視窗與適中檔數穩健;個股停損的均線窗則以 20/60/120 日單軸測試,未與前兩個參數做三維交叉掃描。
- 容量與成本:選股僅 20 檔、宇宙限前 300 大,大資金部署需重估流動性衝擊;回測未逐筆估算滑價與借券成本。
用均線最常踩的五個坑
把這篇從頭到尾的回測結論,整理成五個一上手就容易犯、且都被資料證明會傷績效的錯誤,方便你對照自己的用法:
-
拿均線交叉去選股。 黃金交叉、多頭排列在台股 11 年研究段全沒贏過含息 0050(黃金交叉+多頭排列研究段年化 15.3%、最大回撤 -45.2%、月夏普 0.7)。「兩條均線剛交叉」是高頻、雙義的訊號——這是用錯了均線的角色,調幾日均線都救不回來。
-
在盤整股上盲信交叉訊號。 前面聯發科那張圖一年觸發 7 次交叉、來回甩巴掌,就是均線在橫盤時的結構性弱點。交叉法只在趨勢明確時可靠;判斷不出個股當下是趨勢還是盤整,就會被雜訊一刀刀磨掉獲利。
-
拿「對短均線的瞬間乖離」當選股訊號。 收盤離 20 日線多遠只是一兩週的雜訊,雙義(過熱或強勢分不出來),各種橫截面取法研究段月夏普全部 ≤ 0.61。要讓均線變成有效的選股因子,得換成「離一整年的高點多近」這種捕捉中長期趨勢結構的訊號——本文的新高靠近度因子研究段月夏普就拉到 1.35。
-
選最強之後不設停損、抱到崩。 靠近新高的強勢股一旦走弱,沒有出場機制就會從高點一路抱下來。本文用「個股收盤跌破自身 20 日均線就清空該檔」當止血線:全期年化從 27.7% 微升到 28.6%,全期最大回撤則從 -31.2% 略加深到 -34.4%。它替每檔個股設一條趨勢止血線、降低單檔從高點崩到底的風險,作用在個股級風控,而非壓低整體回撤。強勢選股要配個股級風控,不能只買不賣。
-
挑研究段最漂亮的那一格參數。 參數最佳化要找連成一片的高原、不是孤峰。色溫圖上長視窗(252~280 日)配持 20 檔整片相近(研究段月夏普 1.3 以上),我們才敢取 280 日 × 20 檔當穩健預設;若改挑研究段單格最高值,換來的只是更高的過擬合風險,樣本外不會更好。
這五個坑的共同根源,都是把均線放到它不擅長的角色,或對選出的強勢股缺乏風控。對指標家族的整體差異與正確分工,可參考RSI、MACD、KD 比較與如何挑選台股。
自己跑一次
把下面這句話交給你的 AI 助理,它會引導你安裝 FinLab Skill、抓台股資料、重現這篇的回測:
用 AI 開始 FinLab
把這句話交給你的AI,它會帶你完成設定並做出第一個策略。
告訴你的AI:
「幫我設定 FinLab,做一個動能策略:https://finlab.finance/setup」
裝好之後,下載本文的 strategy.py 與 data.csv,即可在自己的環境重跑、改參數、換選股因子。登入只需在程式裡寫 finlab.login(),套件會在需要資料時引導你完成登入。想延伸成更完整的量化流程,可參考量化交易總覽與程式交易是什麼。
常見問題
Q:均線參數要設多少?20 日、60 日、240 日哪個最好? 看用途。本文選股用的新高靠近度視窗在 252~280 日一帶都站得住(研究段月夏普 1.3 以上),對天數不敏感;個股停損的均線窗設 20、60、120 日全期年化也只在 27.9%~28.6% 間小幅移動。拿「對短均線的瞬間乖離」去選股則無論幾天都贏不過大盤,那是用法的問題,不是天數的問題——與其糾結幾天,不如先用對角色。
Q:黃金交叉買進真的會賺嗎? 拿來選股的話,台股 11 年回測站不住。「黃金交叉+多頭排列買進」研究段年化 15.3%,和含息 0050 打平,但最大回撤深達 -45.2%、月夏普只有 0.7(同期 0050 是 1.0)——用更大的波動換到一樣的報酬,並不划算。黃金交叉在盤整期還會反覆觸發、來回甩巴掌。
Q:什麼是「新高靠近度」?為什麼比黃金交叉好用? 新高靠近度是「收盤價 ÷ 自身過去 280 個交易日的滾動最高價」,越接近 1 代表收盤越貼近自己約 52 週的波段高點。黃金交叉看的是「兩條均線剛交叉」那一瞬間,高頻又雙義;新高靠近度看的是「離一整年高點多近」這個中長期趨勢結構,訊號單義(靠近新高就是趨勢明確向上)。本文用它選最靠近波段新高的 20 檔,研究段月夏普 1.35,遠勝黃金交叉選股。
Q:跌破均線就該停損嗎? 對「個股級停損」是有效的用法。本文持有的是靠近新高的強勢股,一旦某檔收盤跌破自身 20 日均線就清空該檔、降為現金,等於替每檔個股設一條趨勢止血線。加上這道停損後全期年化從 27.7% 微升到 28.6%,但全期最大回撤反而從 -31.2% 略加深到 -34.4%——它降低的是單檔一路抱到崩的風險,不是整體回撤。要注意它是「個股出場條件」,不是拿單一均線訊號去無腦抓全市場進出。
Q:均線可以單獨拿來當買賣訊號嗎? 拿「對短均線的瞬間乖離」橫截面排名選股不建議,研究段月夏普全部 ≤ 0.61,輸給含息 0050。但把均線接成「對 280 日高點包絡線的靠近度」當選股因子、再用個股 20 日線當停損,就能組成贏過大盤的策略。差別在訊號設計,不在均線本身。
Q:均線和布林通道、肯特納通道有什麼關係? 布林通道的中軌就是均線(常用 20 日),上下軌是中軌加減標準差;肯特納通道則用 ATR 定義通道寬度。均線是它們共同的骨幹。各指標的正確用法可參考台股 ATR 波動度指標與肯特納通道與 ATR 指標。
Q:均線和 KD、RSI、MACD 一起用會更好嗎? 這些大多是同性質的價格衍生指標,資訊高度重疊,硬疊在一起通常是負貢獻。比較有效的組合是讓均線各司其職——用「靠近新高」選股、用「個股跌破短均線」停損,而不是把一堆擺盪指標疊在一起。各指標的差異可參考RSI、MACD、KD 比較。
Q:這套策略適合誰? 適合想要主動選股、能接受 -34% 等級回撤與較高換手成本,追求明顯高於含息 0050 報酬的人:全期年化 28.6%、月夏普 1.22,研究段與樣本外都勝過含息 0050。不適合受不了深度回撤、或偏好低周轉被動持有的人——那種需求直接買進持有含息 0050 更省心。延伸閱讀:如何挑選台股。
最後更新:2026-06|回測區間:2015-01 ~ 2026-06-09|作者:FinLab 量化研究團隊(經量化研究員審閱)
本文僅供量化研究與教學用途,所有回測數字均由 finlab 套件在真實台股資料上產出,過去績效不代表未來表現,不構成投資建議。本文均線選股純技術策略全期最大回撤 -34.4%,實際交易前請自行評估風險、滑價與交易容量。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

