ThinkTradeLab {{ t.brand }}
{{ t.heroKicker }}

{{ t.heroTitle }}

{{ t.heroSub }}

{{ t.heroCta1 }}
{{ t.heroCta2 }}
{{ t.coverageKicker }}

{{ t.coverageTitle }}

{{ t.coverageSub }}

{{ item.tag }}

{{ item.title }}

{{ item.body }}

{{ t.pillarsKicker }}

{{ t.pillarsTitle }}

{{ item.n }}

{{ item.title }}

{{ item.body }}

{{ t.latestKicker }}

{{ t.latestTitle }}

{{ t.viewAll }} →
{{ item.imageNote }}
{{ item.category }}{{ item.date }}

{{ item.title }}

{{ item.excerpt }}

{{ t.faqKicker }}

{{ t.faqTitle }}

{{ item.q }}

{{ item.a }}

{{ t.voicesKicker }}

{{ t.voicesTitle }}

{{ t.placeholderNote }}

{{ item.quote }}

{{ item.who }}

{{ t.subTitle }}

{{ t.subSub }}

{{ subscribeNote }}
{{ t.researchKicker }}

{{ t.researchTitle }}

{{ t.researchSub }}

{{ item.label }}
{{ item.category }}

{{ item.title }}

{{ item.excerpt }}

{{ item.date }}

{{ t.placeholderNote }}

← {{ t.backToResearch }}
{{ article.category }}{{ article.date }}

{{ article.title }}

{{ article.excerpt }}

{{ t.byline }}
{{ shareLabel }}
{{ item.v }}
{{ item.k }}
{{ t.chartPlaceholder }}

{{ item.h }}

{{ item.p }}

{{ item.cap }}
{{ item.cap }}

{{ tbl.title }}

{{ hc.v }}
{{ cell.v }}

{{ tbl.note }}

{{ t.subTitle }}

{{ t.subSub }}

{{ t.subBtn }}
{{ t.signalsKicker }}

{{ t.signalsTitle }}

{{ t.signalsSub }}

{{ item.v }}
{{ item.k }}
{{ t.equityPlaceholder }}

{{ t.signalTableTitle }}

{{ t.thSignal }}
{{ t.thOpened }}
{{ t.thHorizon }}
{{ t.thStatus }}
{{ t.thReturn }}
{{ item.name }}
{{ item.opened }}
{{ item.horizon }}
{{ item.status }}
{{ item.ret }}

{{ t.signalsDisclaimer }}

{{ t.courseKicker }}

{{ t.courseTitle }}

{{ t.courseSub }}

{{ item.n }}

{{ item.title }}

{{ item.body }}

{{ item.meta }}
{{ t.courseCardKicker }}

{{ t.courseCardTitle }}

  • · {{ line }}
{{ t.courseCta }}

{{ t.courseCardNote }}

{{ t.pricingKicker }}

{{ t.pricingTitle }}

{{ t.pricingSub }}

{{ item.tag }}
{{ item.badge }}

{{ item.name }}

{{ item.price }}

{{ item.body }}

  • · {{ f }}
{{ item.cta }}

{{ t.pricingNote }}

{{ t.aboutKicker }}

{{ t.aboutTitle }}

{{ t.aboutLead }}

{{ t.methodTitle }}

{{ item.n }}

{{ item.title }}

{{ item.body }}

{{ t.principlesTitle }}

{{ item.title }}

{{ item.body }}

{{ t.contactKicker }}

{{ t.contactTitle }}

{{ t.contactSub }}

{{ item.k }}
{{ item.v }}
{{ contactNote }}
{{ t.legalKicker }}

{{ t.legalTitle }}

{{ item.h }}

{{ item.p }}

← 回到研究列表
方法論 2026-08-28

一套看起來很合理的台股短線策略,為什麼扣完成本就死了

982 筆交易、五道驗證關卡、三次規則修正,最後的結論是不要交易它。這篇把整個否證過程與統計數據完整公開——包含那個一度轉正、最後被換母體推翻的版本。

982 — 主規格總交易筆數(2015-01 ~ 2026-08)

−29.9 bp — 每筆淨期望值(扣除交易成本)

32.3% — 勝率

0.74 — 獲利因子 PF

+27.3 bp — 零成本毛期望值(訊號本身)

≈57 bp — 一買一賣交易成本(手續費+證交稅+滑價)

起點:一個看起來很合理的想法

上升趨勢中的個股急殺到布林通道之外,隔天收紅站回帶內——這是幾乎每本技術分析書都會提到的「拉回買進」形態。我們把它寫成一套完全無歧義的規則:加權指數 50 日均線在 200 日均線之上才允許開新倉;個股要站上並且正在上揚的 60 日均線;前一日的盤中低點跌破 5 日布林下軌;當日收紅、站回下軌之上、但收盤仍低於 5 日均線才進場。出場有五道:停損、收盤再度跌破下軌、突破 5 日線減碼一半、盤中觸及上軌出清、以及三日不創新高的時間停損。母體是 0050 現任成分股,資料為 2015-01 至 2026-08 的還原日線(729 個除權息事件自行還原),成本假設一買一賣約 0.57%。

第一次修正:規則裡藏著一個數學上不可能的條件

初版寫的是「收盤跌破 5 日布林下軌」。實際上這件事永遠不會發生——當通道由最近 5 根收盤價的平均數與母體標準差構成時,第 5 根收盤價在數學上不可能落在自己造出來的 ±2σ 之外(Samuelson 不等式的直接結果)。我們用 200 萬組隨機 K 線驗證,違反次數為零。規則因此改以「前一日盤中低點」認定跌破。這是整個專案裡最便宜的一次修正:如果沒有先做這件事,後面所有回測跑出來都會是空集合,而且你不會知道為什麼。

交易死在哪裡:出場分解

把 982 筆交易依出場原因拆開,虧損的來源非常集中:64% 的交易以停損收場——盤中停損 488 筆、平均 −158 bp,跳空停損 138 筆、平均 −215 bp。而兩種「會漲才會發生」的出場平均都是賺的:觸及上軌出清 257 筆、平均 +222 bp;三日未創高的時間停損 99 筆、平均 +206 bp。也就是說問題不在賺的時候賺太少,在於停損觸發得太頻繁。這決定了下一步要動的是停損,不是停利。

第二次修正:停損與濾網的消融測試

停損換成三種候選——進場 K 線低點、進場日的下軌值、逐日上移的下軌——三者一致顯示放寬停損比較好,每筆期望值從 −29.9 bp 改善到 −22 bp 附近,但沒有一個把期望值推回正的。真正有效的單一改進是「回檔深度濾網」:要求刺穿當日自近 6 個交易日高點回檔至少 5% 才進場,訊號數從 982 筆砍到 515 筆,每筆期望值提升到 −9.1 bp(同一組合在零成本下是 +48.2 bp)。實際案例是:不加濾網時,策略會在死水股兩分錢的假急殺上反覆進出,純繳成本。方向很清楚:少做、做深、抱久。

十二個年度裡只有三年是正的

年度分解顯示 2015 到 2026 的十二個年度中,只有 2019(+8%)、2023(+15%)、2026(+63%)為正,最傷的是 2024(−77%)與 2017(−56%)。大盤濾網雖然擋掉大部分空頭期,但濾網「剛轉多、將轉空」的邊界期,正好就是急殺最多、反彈最弱的時候。2026 迄今是最佳年份(125 筆、勝率 42%),但單一年度不足以推翻十一年的整體證據——這個「獲利集中在最近一年」的形狀,等一下在 Minervini 版本上會原封不動地再出現一次。

典型交易是「小虧一次停損」

單筆報酬分布解釋了獲利因子為什麼是 0.74:中位數 −0.97%,整個分布的重心壓在小幅虧損那一側,右尾最大 +20.8% 但出現頻率遠不足以覆蓋大量的小虧加上每筆約 57 bp 的成本。這是一個右偏但右尾太短的分布——賺的時候平均 +2.6%、賠的時候平均 −1.7%,賠率是好的,可惜勝率只有 32.3%,兩者相乘剛好落在成本線下方。

第三次修正:唯一一次翻正,以及它為什麼不算數

把個股濾網從 60 日均線換成 Minervini 趨勢模板的八個條件(相對強度以 3/6/9/12 個月加權報酬代理、取母體內百分位 70 以上),出現了第一個扣成本後為正的版本:主版 315 筆、每筆 +9.5 bp;再加上深度濾網與移動下軌停損後,235 筆、勝率 47.2%、每筆 +42.8 bp、獲利因子 1.30。看起來像是找到東西了。但 t 值只有 1.38,期望值小於等於零的機率仍有 7.8%;而且獲利高度集中——2026 這一年就貢獻了總損益的 79%,前三檔個股合計貢獻 232%。這種形狀的績效通常不是優勢,是雜訊加上倖存者偏差。

換母體:唯一一次真正的驗證

把母體從 0050 擴大到 0050 加中型 100 共 150 檔,相對強度改在這 150 檔內排名。同一套規則,每筆期望值從 +42.8 bp 掉到 −1.9 bp(t = −0.11),Minervini 主版從 +9.5 bp 掉到 −20.4 bp。關鍵的拆解是:在這 150 檔裡,大型 50 檔子集仍有 +54.8 bp,中型 100 檔子集則是 −32.7 bp。優勢只存在於「現任 0050 成員」這個被結果篩選過的樣本。把中型股滑價從單邊 0.05% 提高到 0.10% 與 0.15%,數字再掉到 −11.9 bp 與 −21.9 bp。

結論與方法論教訓

本策略家族——趨勢股急殺後以 5 日布林反轉低接、持有一到三日出場——在台股大中型股扣除成本後,未被證明存在可交易的優勢。我們不建議依照這套規則實單。三個可以帶走的教訓:其一,毛利在 30 到 60 個基點級別的訊號,在台股來回約 0.57% 的成本結構下沒有生存空間,訊號是對的不代表策略能活;其二,單一母體上跑出來的正期望值,預設要先假設它是倖存者偏差加上多重測試的產物,直到新資料證明為止;其三,換母體比調參數更能殺死一個策略,也因此更值得先做。真正的翻案只剩兩條路:用歷史成分股資料重跑,或者改成持有二到四週的波段家族——那是另一個策略,不是參數調整。