跳至主要內容
美股研究 約 7 分鐘閱讀

杯柄型態回測:杯柄未過,
頭肩排除版通過

杯柄型態怎麼辨識?本次固定杯深、杯長、柄回檔及確認時點,測美股個股杯柄突破,並以頭肩型態作對照。杯柄兩個設計未過關,頭肩排除版通過鄰近參數、前後兩段及每邊百分之零點一成本檢查,但最大回撤約五成。附參數熱圖、訊號數、可下載程式及同規則策略頁。

回測報酬與風險

年化報酬、歷史最大跌幅與基準比較。

看報酬與最大跌幅
頭肩排除:最大跌幅50%

杯柄型態各設計的日夏普與同期基準

杯柄未通過;僅頭肩排除版通過,歷史最大跌幅約50%。

杯柄型態的兩個美股設計沒有通過;同批頭肩對照中,「排除頭肩底持有區段、其餘持有流動性高的個股」通過三項驗證。它的年化報酬28.0%、日夏普0.95,但最大回撤約50%,高於QQQ的35.1%。杯柄正向版則只有六次合格買訊,平均在場權重不足1%,無法把少數成功突破當成可持續投入的證據。

依本文重跑

執行這個策略

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

告訴你的AI:

幫我設定FinLab,重跑這篇文章已通過驗證的美股頭肩底排除選股,請讀:https://finlab.finance/setup?relatedUrl=/blog/cup-and-handle-backtest

免安裝,開啟 FinLab Studio

Cup and Handle是什麼

杯柄型態由先漲、回落、回升成杯,再小幅下修成柄構成。突破右杯口附近的壓力才形成買訊。William O'Neil的《How to Make Money in Stocks》第四版(2009)將這類形狀放進CAN SLIM選股體系;本文只測機械化價格形狀,沒有把盈餘、營收成長及市場判讀等完整方法一起測進來。

部位 本次中央設定 在圖上代表什麼
原有上漲 左杯口相對63日前漲至少30% 杯子前已有一段上升
杯長與杯底 35至325交易日,底在全長20%至80%之間 排除過短與底太偏一側的形狀
杯深 12%至33% 回落深度相對左杯口計算
右杯口 與左杯口相差不超過5% 價格回到接近原高的位置
柄長與柄深 5至25日,回檔不超過12% 小幅整理,且位於杯的上半部
完成條件 柄低點確認後再穿越右杯口 使用確認後的新突破

這個四轉折代理規則不能保證每個杯底都像人工畫的圓弧;它僅限制底部位置,未加入曲率、突破放量或柄量縮。把程式找到的所有形狀都稱為完整O'Neil策略,會超出本次實驗範圍。圖像辨識若要加上這些條件,應先固定新規則再另做研究。

杯柄與頭肩對照結果

報酬與最大跌幅

斜線前是年化報酬,後是從高點最多跌多少。

設計 年化/最大跌幅
杯柄買進 0.6% / -2.3%
杯柄排除 27.4% / -50.0%
頭肩買進 7.1% / -29.6%
頭肩排除 28.0% / -50.0%
QQQ 20.1% / -35.1%

下方完整比較表可左右滑動,查看夏普、參數勝出數與平均持股權重。

完整比較

設計 年化報酬 日夏普 最大回撤 前/後半段日夏普 參數贏基準 平均在場權重
美股個股・杯柄・正向 0.6% 0.41 -2.3% 0.04/0.72 0/9 0.8%
美股個股・杯柄・避開 27.4% 0.93 -50.0% 1.21/0.71 9/9 100.0%
美股個股・頭肩・正向 7.1% 0.53 -29.6% 0.53/0.54 0/9 71.4%
美股個股・頭肩・避開 28.0% 0.95 -50.0% 1.23/0.72 9/9 100.0%
QQQ total return 20.1% 0.92 -35.1% 1.22/0.63 — 100.0%

杯柄正向版年化約0.6%,大部分資金留在現金。避開杯柄版有九格參數贏QQQ,但前半段日夏普1.212低於QQQ的1.223,仍未通過。頭肩正向版也未過;通過的是頭肩排除版,不能把它的成績掛在「杯柄突破」名稱下。

杯柄型態中央設定的同日起始淨值與含息基準

圖中四個設計和QQQ都從2017年1月3日設為1。頭肩排除版的較高報酬伴隨更大回撤與波動,沒有槓桿ETF,仍會因為個股集中而大跌。策略的核心優勢只在本視窗的年化與風險調整後報酬;它沒有提供較小跌幅這項好處。

轉折確認與參數如何固定

價格用24日單邊Gaussian核權重平滑,候選轉折比前後各三日高或低,三日後才確認。杯柄依序取高、低、高、低四個轉折,最後的柄低點確認後,再要求一次新的突破。當日收盤形成訊號,下一交易日收盤成交;過去那個看起來較漂亮的突破價不回填。

杯深上限測25%、33%、40%,柄深上限測8%、12%、16%,全組合九格;中央設定為33%與12%,平滑頻寬固定3日。杯柄買入後,收盤跌破柄低點或買訊日價格的92%,或持有滿60交易日,就發出賣訊。停損以收盤判斷、次日成交,沒有保證成交在停損線上。

頭肩對照沿用同一個平滑與確認時點,用五個連續轉折,頭至少突出3%,左右肩與頸線兩端容差2%、3%、4%,頻寬2、3、4日共九格。跨度22至120日,右肩後最多等20日突破。頭肩底突破開啟正向持有狀態,頭肩頂跌破或60日結束該狀態;排除版從每日合格股票池剔除處於這個狀態的股票,再依流動性選最多10檔。

Lo、Mamaysky與Wang(2000)將技術型態寫成平滑與極值關係,提供了這項對照的辨識基礎。本文新增確認及交易條件,沒有把原文的條件報酬研究等同本次組合績效。台股結果另見頭肩頂、頭肩底回測。

三項驗證與額外比較

固定鄰近參數的日夏普差熱圖,正值代表贏同期含息基準

杯柄熱圖每格是日夏普減QQQ日夏普,至少七格為正才符合鄰近參數條件。頭肩的參數軸不同,另外列圖,不能把杯深和肩高容差混為同一個數值。

美股頭肩型態九組頻寬與容差的日夏普差

前半段與後半段日夏普和同期含息基準比較

美股依交易日對半,前段截至2021年12月2日,後段由12月3日起,保留原持倉。表格日夏普不扣無風險利率;互動報告預設扣2%,所以讀數會不同。美股主結果使用sim()預設零佣金、零交易稅,再額外對每次買賣各扣0.1%,當作價差與滑價的壓力測試。

頭肩排除版九格全贏QQQ;兩半日夏普1.226、0.723,分別高於1.223、0.625。每邊0.1%後的日夏普0.939仍高於QQQ的0.917,年化降到27.7%。月索提諾1.72,達到本次發布的風險調整指標門檻;但前段的領先幅度很小,不能描述成每段都有明顯優勢。

再扣BIL每日含息報酬,頭肩排除版夏普0.874、QQQ為0.814;移除報酬最好的一年2023後,兩者為0.796與0.779。與既有策略在共同週日期比較,最高相關為QQQ波動度目標策略的0.896,低於0.95,因而保留獨立策略頁。這項相關檢查只涵蓋既有已上線策略,無法保證未來的分散效果。

流動性、持股與現金的影響

股票池每日取60日平均原價成交額前500名,股價至少10美元、平均成交額至少1千萬美元,需有252日價格。曾發生50%以上單日異動的股票,從隔日起排除252日。沒有用今天的指數成分或市值回填歷史;金融、REIT及其他產業未另排除,資料商沒有保留的下市股票仍可能造成存活偏差。

股價形狀使用含息還原價格,最高最低價依同一還原因子換算;流動性用未還原價乘成交量。每日在合格股票中按成交額選最多10檔,單檔上限10%,不足部分留現金,沒有槓桿。這個排名本身可能帶來大型股集中,選股規則的整體效果不能全部歸功於形狀。

設計 符合資格買訊 實際選入次數 平均個股權重固定組夏普 年周轉 單月最高周轉
美股個股・杯柄・正向 6 6 0.99 0.06 0.15
美股個股・杯柄・避開 6 123 1.20 1.15 0.90
美股個股・頭肩・正向 353 478 0.89 4.80 1.40
美股個股・頭肩・避開 353 130 1.20 1.22 0.90

買訊數是正向策略當日符合股票池資格的事件,避開版共用原買訊數;選入次數則包含排名變動及再次選入。周轉採目標權重變動絕對值的一半,年周轉為日平均乘252,單月最高值逐月加總。未估算容量,實際大額交易的市場衝擊可能高於成本壓力測試。

現金多的設計另與相同平均權重的QQQ比較,並列各股票事後平均權重固定持有作診斷。頭肩排除版接近全倉,它的固定個股平均權重組夏普反而更高,表示本次不能證明排除型態優於保留這些事後選出的個股權重。這個對照用了未來整段權重,並非事前能部署的組合;公開它是為了讓較高QQQ相對績效的來源保持可判讀。

研究結果與可執行策略

通過檢查的美股頭肩底排除選股策略持有美股個股,與以QQQ或槓桿ETF擇時的既有美股研究持有方式不同。策略頁與Studio使用下方同一份strategy.py,會隨每日資料更新;杯柄研究的cup-research.py則是重現未通過的杯柄設計,兩份程式在下載區分開標示。

頭肩排除版會避開正處於這種型態持有狀態的股票,再從其他高流動性股票選最多十檔。在Studio重跑頭肩排除版。登入並使用可用的AI研究額度執行,會拿到歷史績效報告與部位分析,不會下單。

所有檢查都在歷史資料上完成,沒有獨立樣本外或發表後前瞻。Bailey等人(2015)討論回測過擬合;本次一次測24個設計,保留失敗結果仍不等於已校正多重檢定。前半段小幅勝出及50%回撤,都需要在使用前理解。量化研究方法、選股方法和交易成本名詞提供相關背景。

常見問題

杯柄型態突破一定要放量嗎?

完整人工判讀常會看量價,但本文價格代理沒有突破量條件;結果只適用於這套形狀規則,不能替完整CAN SLIM下結論。

杯柄突破和頭肩排除版是同一策略嗎?

不是同一交易規則。前者買入完成杯柄的股票,後者排除處於頭肩底正向持有狀態的股票。通過的策略頁只對應後者。

六次買訊可以證明杯柄無效嗎?

只能說本次定義訊號很少,平均投入資金太低且未通過。無法據此否定所有人工辨識方式,也不能靠刪掉現金日來改善結果。

為什麼美股不用S&P 500當股票池?

FinLab歷史成分資料的起點不足以覆蓋完整2017起的窗口,因此使用每日滾動成交額股票池,避免把今天成分套回去。

通過驗證就適合全部資金投入嗎?

驗證只支持這段歷史的固定規則,最大回撤約50%,而且前半段僅小幅領先。資金容量、個別稅務與前瞻表現均未驗證。

要怎麼用AI重跑已通過的版本?

在策略頁按開啟Studio,或下載strategy.py;歷史重現將DATA_END設為2026-11-10,日更則保留None。設定流程見FinLab安裝指南。

下載與重跑

已通過的strategy.py是頭肩排除選股,策略頁和Studio使用同一份程式。以下範例將它固定在文章資料日重跑。

可下載逐日淨值 data.csv、完整參數與版本 metrics.json、杯柄研究 cup-research.py,以及整批研究 research.py。整批研究請另建資料夾,只放研究程式與共用引擎,勿用通過版覆蓋共用引擎。整批研究需要把共用 strategy.py放在同一個資料夾;執行 python research.py,會輸出全部參數、各中央設定的回測報告與逐日資料。杯柄的cup-research.py預設重跑杯柄正向版;已通過的頭肩排除版另用strategy.py,下載後要分別保存。

顯示程式碼
from strategy import build_position
from finlab.backtest import sim
 
position = build_position(end="2026-11-10")
report = sim(position, position_limit=0.1, upload=False,
             end_date="2026-11-10")
report.to_html("report.html")

範例需先下載同資料夾的程式。環境使用 FinLab 2.3.8、pandas 3.1.1,另需 NumPy、SciPy、Numba、Plotly、Kaleido 與 python-dotenv。資料截至2026年11月10日,重跑日為11月11日;資料日與執行日分開記錄,日後上游修訂可能讓同視窗數值不同。安裝步驟見FinLab設定指南,名詞可查量化交易詞彙。

FinLab量化研究團隊以資料與可重跑規則研究投資方法。本文尚未做發表後的前瞻驗證,也未估算資金容量。

投資有風險,過去績效不代表未來表現。本內容僅供教學參考,不構成投資建議,請依個人風險承受度審慎評估。

最後更新:2026-11|回測區間:2017-01-03至2026-11-10|作者:FinLab量化研究團隊

FinLab AI

想建立自己的策略?

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

免費開始

更多技術指標研究

查看全部