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

漲停打開要追嗎?月營收動能避開一字漲停打開,
年化 46.8%

漲停打開要追嗎?連續 2 天以上一字漲停的股票第一次打開後,20 天平均落後股票池 1.8%、中位數落後 4.4%。把它當排雷條件加在月營收動能選股上,2015 到 2026 年年化 46.8%、日夏普 1.46,原版 45.9%、1.42,0050 含息 20.2%、1.06;改善不大,附程式碼與三項驗證。

免安裝,用 AI 重跑這篇的策略

在瀏覽器開啟 FinLab Studio,AI 依本文的條件重跑回測,接著可以改條件再測。

在 Studio 重跑
避開漲停打開 CAGR 46.8% Sharpe 1.46

月營收動能避開一字漲停打開回測:本文策略、原版月營收動能與 0050 含息 2015-2026 累積淨值,年化分別為 46.8%、45.9%、20.2%

依本文重跑

執行這個策略

複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。

告訴你的AI:

幫我設定 FinLab,重跑避開一字漲停打開的月營收動能策略,請讀:https://finlab.finance/setup?relatedUrl=/blog/limit-up-open-revenue-momentum

免安裝,開啟 FinLab Studio

連續 2 天以上一字漲停的股票,第一次打開之後 20 個交易日,平均落後股票池 1.8%、中位數落後 4.4%,只有 38.9% 贏。我們把這件事當成排雷條件,加在站上已公開的月營收動能選股上:每月換股時,先把近 10 個交易日內打開過的股票剔除,其他規則一個字都沒改。 2015 年 2 月到 2026 年 10 月回測,年化報酬 46.8%、日夏普 1.46,原版是 45.9%、1.42,同期 0050 含息是 20.2%、1.06。

漲停是台股每天都有的事,一字漲停(開盤就漲停、整天沒有打開)通常跟在重大消息之後。本文回答一個實際問題:做動能選股時,要不要避開剛從一字漲停打開的股票?答案是要,但改善很小:近 12 年 1,403 筆交易只換掉 59 筆,日夏普多 0.04,最大回撤從 -35.6% 變成 -34.6%。這是 當沖、漲停、零股、鉅額交易 14 個設計的研究 裡唯一照規則過關的一個。

關鍵數字:本文策略、原版與 0050

2015-02-11 至 2026-10-30 年化報酬 日夏普 最大回撤 年化波動 最差單一年 最差單月
避開一字漲停打開(本文) 46.8% 1.46 -34.6% 30.4% -2.5%(2022) -27.4%(2021-05)
原版月營收動能 45.9% 1.42 -35.6% 30.9% -2.7%(2022) -30.2%(2021-05)
0050 含息買進持有 20.2% 1.06 -34.0% 19.8% -21.4%(2022) -14.1%(2020-03)

本文策略在年化報酬、日夏普與最差單一年都勝過 0050 含息;最大回撤、年化波動與最差單月輸給 0050。約 11 年 8 個月下來淨值成長為 90.0 倍,原版 83.6 倍,0050 含息 8.7 倍。月營收動能原文寫的年化 46.5%、日夏普 1.44 算到 2026-10-27,本文多了 3 個交易日的資料。所有數字都用 finlab 2.2.24、資料截至 2026-10-30,在 2026-10-31 實際跑出,手續費 0.1425% 與證交稅 0.3% 用 sim() 預設值扣除。

一字漲停打開是什麼

台股個股每天漲跌幅上限 10%(2015-06-01 以前是 7%)。一字漲停是開盤價、最高價、最低價、收盤價都在漲停價,K 線畫出來只有一條橫線,代表整天買單排隊、賣方不願意賣。常見在併購、重大合約、轉機題材等消息之後,有時連續好幾天。「打開」指的是連續一字漲停之後,第一天盤中出現低於漲停價的成交,賣方開始出貨。

FinLab 沒有歷史漲停價,本文自己算:收盤價等於最高價、還原報酬至少 9.5%(2015-06-01 以前用 6.5%),上市未滿 6 個交易日不算;開盤、最高、最低、收盤四個價格相同,就是一字漲停。2015 年以來所有上市櫃普通股:

打開前至少連續一字漲停 2015 年以來次數 每年最少/最多 打開隔天那一天 之後 20 天平均 之後 20 天中位數 20 天後贏股票池
1 天 4,246 169(2019)/728(2026) -0.05% -0.79% -3.0% 41.1%
2 天 1,101 35(2023)/212(2026) -0.34% -1.82% -4.4% 38.9%
3 天 365 9(2023)/66(2020、2026) -1.39% -2.90% -3.8% 41.4%

超額報酬是個股還原報酬減股票池(20 日平均成交金額 2,000 萬元以上的普通股)等權平均,從打開隔天收盤買進起算;股票停牌的日子報酬算 0,復牌第一天補上整段漲跌。「至少連續 1 天」的 4,246 次包含連續 2 天以上的 1,101 次。連續一字漲停的天數越多,打開之後平均落後越多。

這個平均值會隨股票範圍改變。同一批研究只看打開當天 20 日平均成交金額 2,000 萬元以上的股票,2008 年以來 785 次,之後 20 天平均反而多漲 0.98%,中位數仍是 -2.0%。兩種算法的中位數都是負的,多數股票打開之後落後,平均值則看少數大漲股落在哪一邊。

一字漲停打開後 20 個交易日的平均累積超額報酬:連續 1 天以上的 4,246 次最後 -0.8%、連續 2 天以上的 1,101 次 -1.8%、連續 3 天以上的 365 次 -2.9%

平均路徑前 10 天上下震盪,連續 3 天以上的一度多漲 0.9%,第 15 天之後一路往下。Seasholes 與 Wu(2007)在上海證交所看到類似的現象:漲停吸引散戶在隔天大量買進,股價短暫續漲後回落,獲利的是早一步買進、再賣給散戶的人。Barber 與 Odean(2008)也發現,散戶是新聞多、單日大漲大跌這類吸引注意股票的淨買方。連續一字漲停打開,正好是注意力最高、早期買家開始賣的時候。

為什麼要放在月營收動能上

月營收動能選股每個月挑 5 日平均漲跌幅最強的 10 檔,剛連續漲停的股票,5 日漲幅很容易排到最前面。原版近 12 年 1,403 筆交易裡,有 59 筆在進場訊號日前 10 個交易日內剛從連續一字漲停打開,這 59 筆平均每筆賺 2.5%、勝率 40.7%,其他 1,344 筆平均 3.7%。這些股票的動能是消息推出來的,打開之後常是消息反映完、開始回落。

策略規則:沿用原版,只加一條

基底是站上已驗證的 原版策略頁,參數在 2026 年初公開,這次完全不動:

  1. 近 3 個月平均營收高於近 12 個月平均營收。
  2. 收盤價同時站上 20、60、120 日均線。
  3. 5 日平均漲跌幅最強的 10 檔,每月 11 日(月營收公布期限後)換股,單檔跌 10% 停損。

唯一新增的是第 4 條:近 10 個交易日內,連續 2 天以上一字漲停後打開過的上市櫃普通股,換股時排除。 排除後空出來的名額,由動能排名下一檔遞補,持股維持 10 檔。

顯示程式碼
import pandas as pd
from finlab import data
from finlab.backtest import sim
 
close = data.get("price:收盤價")
rev = data.get("monthly_revenue:當月營收")
 
# 1. 月營收動能(原版):營收動能、站上三條均線、5 日平均漲跌幅
rev_up = rev.average(3) > rev.average(12)
trend = (close > close.average(60)) & (close > close.average(20)) & (close > close.average(120))
momentum = (close / close.shift() - 1).rolling(5).mean()
 
# 2. 一字漲停:開高低收同價,還原報酬至少 9.5%(2015-06-01 前用 6.5%),上市滿 6 個交易日
price = pd.DataFrame(close)
open_ = pd.DataFrame(data.get("price:開盤價"))
high = pd.DataFrame(data.get("price:最高價"))
low = pd.DataFrame(data.get("price:最低價"))
adj_close = pd.DataFrame(data.get("etl:adj_close")).reindex_like(price)
 
limit = pd.Series(0.095, index=price.index)
limit[limit.index < "2015-06-01"] = 0.065
limit_up = (
    (price == high)
    & adj_close.pct_change(fill_method=None).ge(limit, axis=0)
    & adj_close.shift(5).notna()
)
one_word = limit_up & (open_ == high) & (low == high)
 
# 3. 打開:連續 2 天以上一字漲停之後,第一天不是一字漲停
total = one_word.cumsum()
streak = total - total.where(~one_word).ffill().fillna(0)
opened = ~one_word & (streak.shift(1) >= 2) & price.notna()
 
# 4. 近 10 個交易日打開過的普通股,換股時排除
avoid = opened.astype(float).rolling(10, min_periods=1).max() > 0
common = [s for s in avoid.columns if len(s) == 4 and s.isdigit() and not s.startswith(("0", "91"))]
avoid = avoid[common].reindex(columns=avoid.columns, fill_value=False)
 
position = momentum[trend & rev_up & ~avoid].is_largest(10).loc["2015-01-01":]
report = sim(position, resample="M", resample_offset="11D", stop_loss=0.1, upload=False)
report.display()

用 report.creturn 算出的年化 46.8%、日夏普 1.46 與上表相同;report.display() 顯示的夏普扣了 2% 無風險利率,會略低一些。完整版 strategy.py 另外輸出淨值與統計,和 策略頁 用的是同一份程式。

回測結果:報酬與夏普小幅提高,回撤略淺

月營收動能避開一字漲停打開、原版與 0050 含息每年報酬:12 年裡有 8 年高於原版,2016、2020、2024、2026 年低於原版;2022 年本文策略 -2.5%、0050 含息 -21.4%

12 個年度(2015 從 2 月、2026 到 10 月)裡,本文策略有 8 年高於原版,2016、2020、2024、2026 年低於原版;差最多的是 2025 年多 16.6 個百分點(73.8% 對 57.2%)與 2020 年少 21.4 個百分點(159.0% 對 180.4%)。跟 0050 含息比,只有 2016 年(-1.3% 對 19.6%)與 2019 年(7.5% 對 33.5%)輸。

最深的回撤從 2018-06-25 跌到 2020-03-19,跌幅 -34.6%,2020-06-08 回到前高;原版同一段跌了 -35.6%。最差的單月是 2021 年 5 月的 -27.4%,原版同月 -30.2%。

三項穩健性驗證:鄰近參數、前後兩段、交易成本

三項檢查的「贏」都是同一個意思:日夏普高於同一段期間的 0050 含息買進持有(用 etl:adj_close 還原價算報酬、不扣成本)。日夏普用日報酬平均除以標準差、乘上 √252,不扣無風險利率。條件與鄰近參數在看結果前寫定,之後沒有改。另外還要比原版好:原參數日夏普高於原版,而且 9 組至少 7 組高於原版。

檢查 標準 結果
鄰近參數 連續一字天數(1、2、3)乘上打開後排除天數(5、10、20),9 組至少 7 組贏 0050 9/9 組贏(日夏普 1.36 到 1.47,0050 1.06),過
前後兩段 2015-02-11 到 2020-12-18、2020-12-21 到 2026-10-30 兩段都贏 前段 1.40 對 0.87,後段 1.52 對 1.22,過
交易成本 原參數、sim() 預設成本 日夏普 1.46 對 1.06,過(成本設成 0 是 1.70)
比原版好 原參數高於原版,9 組至少 7 組高於原版 1.46 對 1.42,7/9 組高於原版,過

月營收動能避開一字漲停打開鄰近參數 9 組日夏普熱圖:連續 2 天、3 天的 6 組都比原版高 0.04 到 0.05,連續 1 天的 3 組在 1.36 到 1.43,其中 2 組比原版低

9 組的日夏普都高於 0050,差異在比原版好多少。要求連續 2 天或 3 天以上一字漲停的 6 組,比原版高 0.038 到 0.051;只要求 1 天的 3 組,排除 5 天、10 天的比原版低 0.06、0.04,排除 20 天的只高 0.003。門檻降到 1 天,2015 年以來的事件從 1,101 次增加到 4,246 次,打開後 20 天的平均落後從 1.8% 縮小到 0.8%,排除的多半是落後不多的股票,反而換掉太多正常的強勢股。

前後兩段日夏普:前段 2015-2020 本文策略 1.40、原版 1.38、0050 含息 0.87;後段 2020-2026 分別為 1.52、1.47、1.22

前後兩段都比原版高,前段多 0.02、後段多 0.05。

換掉了哪些交易

本文策略與原版的差別,只在 59 筆被排除的交易與 61 筆遞補進來的交易(停損與換股時點會讓筆數差 2 筆)。被排除的 59 筆在原版裡平均每筆 2.5%、勝率 40.7%;遞補進來的 61 筆平均 3.5%。全期 1,405 筆交易,每年約 120 筆,勝率 43.0%,平均每筆 3.7%。

改善全部來自這一百多筆交易,數量不多,所以本文把它看成原版的一個小修正:如果你已經在用月營收動能,加這一條的代價很低;如果期待它大幅改變報酬或回撤,回測不支持。

同一批研究的其他濾網

同一批研究還把 6 個交易行為訊號當濾網疊在同一個原版上,都沒有通過「比原版好」的規則:

濾網 日夏普(原版 1.42) 9 組高於原版
排除近 5 天剛漲停 1.34 0 組
排除當沖比率前 20%(2016-03 起) 1.38 1 組
排除近 10 天當沖驟升(2016-03 起) 1.40 1 組
排除近 20 天鉅額交易 1.40 1 組
排除近 10 天盤後零股暴增(2016-02 起,原版 1.43) 1.26 0 組
只留近 20 天爆量過的 1.52 6 組

一般的漲停反而不該排除:原版有 45% 的交易在進場前 5 天內剛漲停,這些交易平均比其他交易賺得多。要排除的只有「連續一字漲停後打開」這種特定型態。各個訊號單獨做的結果,在 當沖、漲停、零股、鉅額交易回測。

回測方法與限制

項目 本文做法
交易成本 sim() 預設手續費 0.1425%(買賣各一次)與證交稅 0.3%(賣出),未打折
滑價 未另外假設,以收盤價成交
股票池 finlab price:收盤價 裡有月營收的上市櫃股票,含已下市股票;一字漲停只看上市櫃普通股(四碼數字,不含 ETF 與存託憑證)
流動性過濾 沒有,沿用原版
排除類別 只排除近 10 個交易日內連續一字漲停後打開的股票,未排除金融股、KY 股或全額交割股
前視偏差 月營收用公布可取得日;一字漲停與打開都用當天收盤後的價格判斷,sim() 在訊號隔天收盤成交
權重 10 檔等權,沒有單檔上限,單檔跌 10% 停損
周轉率 1,405 筆交易,每年約 120 筆,平均持有約 24 個日曆天
樣本內外 全段樣本內;原版參數在 2026 年初公開,一字漲停條件的定義與鄰近參數在看結果前寫定,同一批還測了 13 個設計

FinLab 的漲停是自己算的,台股漲停價要捨去到最小跳動單位,少數股票漲停時的還原報酬會略低於 9.5%,可能漏算。每月只持有 10 檔,單一股票對結果影響很大,本文沒有估算策略容量。這類在同一段資料上測多個規則的風險,可以看 回測過度擬合的機率,前視偏差 與 周轉率 的定義在名詞解釋頁。

適合誰、不適合誰

適合:已經在用月營收或動能選股、想多一條簡單排雷條件的人;能接受每月換股、單月可能大跌的人(最差的一個月是 2021 年 5 月的 -27.4%);想用 K 線型態做研究、但需要可回測規則的人。

不適合:要求回撤比 0050 小的人,這個策略最深回撤 -34.6%,跟 0050 差不多深、年化波動 30.4% 比 0050 高很多;資金很大、需要分散到幾十檔的人;期待一條濾網大幅提高報酬的人,本文的改善只有日夏普 0.04。

常見問題

漲停打開要追嗎?

連續 2 天以上一字漲停後第一次打開,2015 年以來 1,101 次,之後 20 天平均落後股票池 1.8%、中位數落後 4.4%,只有 38.9% 贏。只看 20 日平均成交金額 2,000 萬元以上的股票、從 2008 年起,打開隔天收盤買進持有 5 天的策略,扣成本後日夏普 0.32,同期 0050 0.80。

一字漲停是什麼?

開盤價、最高價、最低價、收盤價都在漲停價,K 線只有一條橫線,代表整天買單排隊、沒有人願意在漲停價以下賣。通常出現在重大消息之後,有時連續好幾天。

漲停打開代表什麼?

一字漲停之後第一次出現低於漲停價的成交,表示有人願意賣了。連續一字漲停的天數越多,打開之後落後越多:連續 3 天以上的 365 次,之後 20 天平均落後 2.9%。

為什麼只排除連續 2 天以上的?

門檻降到 1 天,2015 年以來的事件從 1,101 次增加到 4,246 次,打開後 20 天的平均落後從 1.8% 縮小到 0.8%;這樣排除,排除 5 天、10 天的兩組日夏普反而比原版低。條件在看結果前就定為 2 天,鄰近的 1 天、3 天一起驗證。

月營收動能本來就會買到漲停股嗎?

會。原版 45% 的交易在進場前 5 天內剛漲停,這些交易平均每筆賺 4.1%,比其他交易的 3.3% 多,一般漲停不需要避開。被排除的只有 59 筆連續一字漲停後打開的交易,平均 2.5%。

這個策略可以直接照做嗎?

可以重跑,但數字是全段樣本內的回測。最大回撤 -34.6%,2021 年 5 月單月 -27.4%;改善來自一百多筆交易,未來不一定重現。實際下單前請先用 策略頁 的程式在自己的環境重跑。

參考文獻

延伸閱讀

下載資源

檔案 內容
strategy.py 本文策略的完整程式碼,輸出 data.csv 與 metrics.json
data.csv 本文策略與 0050 含息的每日淨值
metrics.json 本文策略與 0050 含息的統計
research.py 鄰近參數、前後兩段、原版對照、一字漲停打開的事件統計
report_strategy.html 本文策略的互動式回測報告

風險提示

本文所有策略與回測結果僅供教學與研究用途,不構成投資建議。過去績效不代表未來表現,本文策略最大回撤 -34.6%,單月也可能下跌超過兩成。投資一定有風險,請依自身風險承受能力審慎評估。

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

FinLab AI

想建立自己的策略?

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

免費開始

更多動能與趨勢研究

查看全部