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-29

一套四條件的週線波段策略通過了五道驗證,但它的優勢有 66% 來自十筆交易

站上 20 週均線、突破下降趨勢線、W 底頸線突破、週量爆大量——四個條件同週成立才進場。483 筆交易、每筆淨期望值 +954.7 bp、t 值 3.6,判決是「成立(候選)」。這篇把整個過程公開,包含消融測試指出其中一道濾網可能是負貢獻,以及為什麼我們仍然不建議直接拿去實單。

483 — 主規格交易筆數(150 檔週 K,2015-01 ~ 2026-08)

+954.7 bp — 已平倉每筆淨期望值(扣除交易成本)

t = 3.6 — 已平倉 474 筆的 t 值(含未平倉 M2M 為 3.8)

42.7% — 勝率,但單筆中位數報酬是 −3.2%

4.6 — 賺賠比(平均獲利 +41.9% ÷ 平均虧損 −9.2%)

66% — 前 10 筆交易佔全部損益的比重

起點:一份 PDF 上的四個條件

這個策略不是我們想出來的,是一份文件上的四條規則:股價站上 20 週均線、向上突破下降趨勢線、走出 W 底並突破頸線、當週成交量爆大量。四個條件在同一週的收盤同時成立才進場。出場則由三條規則任一觸發:週收盤跌破 20 週均線、走出 M 頭、週收盤跌破前一個低點。把這種描述變成可回測的東西,本身就是第一道工作——「突破趨勢線」要先定義趨勢線是哪兩點連出來的,「爆大量」要先決定跟哪一段的均量比、倍數多少,「W 底」要先講清楚兩個底相隔多遠還算同一個型態。我們的選擇全部寫在規格書裡:趨勢線取最近兩個已確認的波段高點外插、爆量定義為週量 ≥ 前 20 週均量的 2 倍、W 底要求兩個底相隔 60 週內且後底高於前底、頸線取兩底之間的最高點。母體是 0050 加中型 100 共 150 檔的現任成分股,資料為 2013-06 起的還原日線聚合成週 K,訊號自 2015-01 起算,成本假設一買一賣約 0.571%。

最大的陷阱不在參數,在型態的右半邊

所有型態類策略都有同一個看不見的作弊機會:型態要「完成」才看得出來,但完成的那一刻已經比訊號日晚了。我們用的波段高低點是 pivot(階數 2)——某一週的高點嚴格高於前後各兩週,才算一個波段高點。關鍵是這個 pivot 在它自己那一週是不知道的,要等兩週後右邊的兩根 K 走完才能確認。如果直接拿 pandas 算完整段的 pivot 再回頭判斷訊號,等於讓 2015 年的訊號用到 2015 年兩週後的資訊,回測會漂亮得不像話。引擎因此把每個 pivot 用「確認時點」而不是「發生時點」索引,週 t 的判定只能使用確認時點小於等於 t 的 pivot。單元測試有六組手工構造的案例專門守這件事。這是整個專案裡最容易做錯、做錯了又最不容易被發現的一步。

消融測試:四道進場濾網裡,只有兩道真的在賺錢

把四個進場條件逐一單獨拿掉,重跑,看每筆期望值怎麼動。結果分成很清楚的三類。第一類是核心:拿掉 W 底,訊號從 483 筆暴增到 1087 筆,每筆期望值掉 597 bp;拿掉爆量,訊號變成 1103 筆,每筆掉 373 bp。這兩道濾網確實在做事,而且做的是同一件事——把訊號數壓下來,只留下結構與量能同時到位的那些。第二類是冗餘:拿掉「站上 20 週均線」,筆數只從 483 變成 491,期望值幾乎不動(−5 bp)。原因是前三個條件已經隱含它——收盤價要突破兩個底之間的頸線,通常也已經在均線之上了。這條規則真正在工作的位置是出場端,不是進場端。第三類最有意思:拿掉「突破下降趨勢線」,筆數翻超過一倍到 1076 筆,每筆期望值反而上升 275 bp。也就是說這道濾網很可能不是在濾雜訊,是在把好訊號一起濾掉。我們把它列為待驗證的假設而不是結論——這個發現來自同一份資料上的多重比較,需要新資料或不同母體才能確認。

出場端:扛下八成出場的那條規則,是三條裡最差的一條

483 筆交易裡有 389 筆(80.5%)是因為週收盤跌破 20 週均線而出場,這類出場的平均報酬是 +725 bp、勝率只有 36%。另外兩種出場都好得多:週收盤破前低出場 50 筆、平均 +2045 bp、勝率 62%;M 頭出場 35 筆、平均 +1952 bp、勝率 77%。這個排序初看反直覺——結構型出場照理是「壞消息」才觸發,怎麼會賺比較多?原因在觸發順序:兩個結構型出場需要進場之後新確認的 pivot 才可能成立,而 pivot 要兩週才確認,所以能走到那裡的交易通常已經先漲了一段。均線出場則是最早、最鈍的那一道,很多還沒發展開的部位就被它收掉了。順帶一提,還有 9 筆是期末仍在倉、以最後一週收盤強制計價的未平倉部位,平均 +17340 bp——這九筆是純粹的帳面數字,不是實現損益,所以文章裡所有主要結論都同時給出「只計已平倉」的版本。

賺的形狀:典型的一筆交易是虧錢的

勝率 42.7%、平均每筆 +12.6%,聽起來很好。但單筆報酬的中位數是 −3.2%——換句話說,把 483 筆排成一列,站在正中間的那一筆是虧的。這個策略的損益分布極度右偏:平均獲利 +41.9%、平均虧損 −9.2%,賺賠比 4.6,靠的是少數幾筆走到 +100% 以上的部位。累計貢獻曲線把這件事講得更直接:最大的一筆佔全部損益的 15%,前三筆佔 37%,前十筆佔 66%。這不必然代表策略是假的——趨勢跟隨型的策略本來就長這個形狀,右尾就是它的獲利來源。但它確實代表兩件事:第一,這個期望值的統計不確定性比 483 這個樣本數看起來的要大;第二,實單上你必須真的抱得住那幾筆,只要在其中兩三筆上提早獲利了結,整條績效曲線就會塌掉。

年度分解:三年為負,而 2025 一年就佔了四成

十二個年度中有三年為負:2015(−0.1)、2018(−1.4)、2024(−1.4,單位為「每筆 1 單位」的合計損益)。正的年度裡,2020 貢獻 +12.2、2025 貢獻 +25.8——2025 這一年就等於全部損益的 42.4%。這個形狀跟前一篇短線研究裡那個「獲利集中在最近一年」的警訊很像,但兩者有個重要差別:短線那個案子在其他年度是普遍負的,這個案子在其他年度普遍是正的,2025 是把它從「小賺」推到「大賺」,不是從「虧損」推到「獲利」。即使把 2025 整年剔除,剩下十一年的合計仍是正的。這是它能拿到「成立(候選)」而不是「未成立」的原因之一。

穩健性:鄰域全正、拆池雙正、剔除大贏家仍為正

一個策略只在使用者剛好選的那組參數上是好的,通常代表它是被挑出來的,不是真的。所以我們掃了整個鄰域:均線 16/20/24 週 × 爆量倍數 1.5/2.0/2.5,九格全部為正,範圍在 +887 到 +1572 bp 之間,而且主規格那一格(20 週 × 2.0 倍)不是最好的一格——最好的是 24 週 × 2.5 倍。這比「剛好使用者那格最好」健康得多。pivot 階數改 1 或 3、W 底窗改 40 週,也都在 +1269 到 +1466 bp 之間。拆池同樣過關:0050 的 50 檔子池 121 筆、+2453 bp、t = 2.76;中型 100 的子池 362 筆、+861 bp、t = 2.64——兩池各自顯著,不是靠其中一池撐起來的。滑價從單邊 0.05% 拉到 0.15%,期望值只從 +1260 掉到 +1238 bp,這是週線策略的結構性優勢:平均持有 13.8 週,來回 0.57% 的成本攤在這麼長的持有期上幾乎不痛。最後一道最嚴格的檢查:把前 10 大贏家整批剔除,剩下 473 筆仍有 +440.5 bp、t = 3.44。

判決:成立(候選),以及四項必須一起讀的保留

統計上這個策略通過了我們設定的每一道關卡:t = 3.6(已平倉)、拔靴法 5000 次的 95% 信賴區間是 +679 到 +1959 bp、期望值小於等於零的機率是 0.0%、前三檔個股佔總損益 35.7%(未超過集中度門檻)、拆池雙正、鄰域全正。資金模擬(期初 100 萬、每筆 1% 風險、單檔上限 20%、同時最多 10 筆)為年化 +20.0%、最大回撤 −18.1%。但有四件事必須跟這些數字一起讀。其一,母體是現任成分股,倖存者偏差對「抱住大波段」這種型態的美化最兇——今天還在 0050 和中型 100 裡的公司,正是過去十年漲上來的那些。其二,右尾集中度高,前 10 筆佔 66%,實單的真實績效會非常依賴少數幾次能不能抱住。其三,我們沒有在同一份回測裡跑「等權買進持有同一池」的基準;本站另一份研究在同樣的 150 檔母體上測得的買進持有年化約為 +25.8%,這意味著本策略的超額報酬可能遠比表面數字小,甚至可能沒有。其四,C2 趨勢線那個「拿掉更好」的發現,來自同一份資料上的多重比較,在新資料驗證前不應該直接照做。

下一步與可以帶走的教訓

這個案子的下一步很明確:用歷史成分股名單重跑以消除倖存者偏差、補上等權買進持有基準、以及對 C2 趨勢線的假設做樣本外驗證。在那之前,判決停在「成立(候選)」——值得前進追蹤,不足以直接實單。三個可以帶走的通則。其一,週線比日線更容易活下來,不是因為訊號比較準,而是因為成本被攤在十幾週的持有期上;同樣的 0.57% 來回成本,在持有一到三天的策略上是致命的,在這裡幾乎看不見。其二,消融測試比參數最佳化有價值得多——它回答的是「這條規則有沒有在做事」,而不是「哪個數字比較好看」,而且它經常會告訴你某條你很喜歡的規則其實在扣分。其三,中位數是負的、平均是正的策略,統計上可以成立,心理上很難執行;在把這種策略放上實單之前,先確認自己真的能在連續七、八筆小虧之後照樣按下第九次的買進。