4個設計都未通過。下方兩欄摘要可同時比較報酬與最大跌幅,完整參數圖可點開原尺寸。
頭肩頂、頭肩底的形狀可以寫成程式,但本次四個台股設計都未通過驗證。本文以反面教材為主:頭肩底突破後買進,和避開這段持有時間,分別套在個股與0050;沒有一組能穩定超過同期0050含息持有。右肩看起來完成的那天,往往還得再等幾天,才能知道它確實是轉折。
頭肩頂與頭肩底怎麼確認
頭肩型態由連續五個轉折構成。頭肩頂是高、低、更高、低、高;頭肩底把高低反過來。中間的頭必須比左右肩更突出,兩肩與兩個頸線轉折則要相近。將兩個頸線轉折連成直線後,收盤突破頸線才啟動頭肩底買訊,跌破頸線才啟動頭肩頂賣訊。線可以傾斜,不能一律用水平價格代替。
| 情境 | 視覺條件 | 交易條件 | 常見誤讀 |
|---|---|---|---|
| 頭肩底 | 三個低點,中間最低 | 右肩確認後,收盤由下往上穿頸線 | 看到第三個低點就立刻買 |
| 頭肩頂 | 三個高點,中間最高 | 右肩確認後,收盤由上往下穿頸線 | 尚未跌破就當作反轉 |
| 假突破 | 穿過後很快退回 | 本次仍按原規則持有或等賣訊 | 事後刪掉失敗型態 |
| 傾斜頸線 | 兩個頸線轉折高度不同 | 按兩點斜率推算當日線位 | 用今天線位比較昨天收盤 |
Lo、Mamaysky與Wang(2000)以平滑價格與轉折順序定義技術型態,提供自動辨識的研究方法。本文採用這個思路,改為單邊平滑、延後確認及明確突破交易規則;結果是本次實作的表現,不能直接當作原論文策略績效。
四個設計的扣成本結果
報酬與最大跌幅
斜線前是年化報酬,後是從高點最多跌多少。
| 設計 | 年化/最大跌幅 |
|---|---|
| 個股買進 | 5.8% / -41.7% |
| 個股避開 | 20.2% / -58.6% |
| 0050買進 | 0.0% / 0.0% |
| 0050避開 | 22.8% / -34.0% |
| 0050含息 | 22.8% / -34.0% |
下方完整比較表可左右滑動,查看夏普、參數勝出數與平均持股權重。
完整比較
| 設計 | 年化報酬 | 日夏普 | 最大回撤 | 前/後半段日夏普 | 參數贏基準 | 平均在場權重 |
|---|---|---|---|---|---|---|
| 台股個股・頭肩・正向 | 5.8% | 0.44 | -41.7% | 0.81/0.15 | 0/9 | 47.7% |
| 台股個股・頭肩・避開 | 20.2% | 0.72 | -58.6% | 0.55/0.86 | 0/9 | 100.0% |
| 0050・頭肩・正向 | 0.0% | 0.00 | 0.0% | 0.00/0.00 | 0/9 | 0.0% |
| 0050・頭肩・避開 | 22.8% | 1.13 | -34.0% | 1.14/1.16 | 2/9 | 100.0% |
| 0050含息持有 | 22.8% | 1.13 | -34.0% | 1.14/1.16 | — | 100.0% |
本文提供研究結果,沒有推薦這些買賣規則。想自行重跑,可先 設定 FinLab 環境,再 下載研究程式(.py);其他檔案見 研究下載區。
中央設定的個股正向版,平均持股權重不足一半。即使某次買進後漲得多,其他時間的現金仍會拉低整體成績。0050中央設定在本視窗內沒有合格買訊,因此正向版是現金;其他參數有沒有出現訊號,仍全部列入九格檢查,沒有刪掉沒交易的組合。
淨值圖把四個設計與0050從同一天設為1。個股避開版的年化報酬可能比正向版高,仍須看回撤和日夏普;它同時承受大型股集中與日更選股的風險,不能解讀成「頭肩頂底反著做就會贏」。
確認右肩需要多少天
本次用24日單邊Gaussian核權重平滑價格,只放入當天以前的收盤。候選轉折要比前後各三個交易日的平滑價格都高或都低,最早在候選日加三日才加入辨識序列。同方向的新轉折只保留較極端的點,但只影響當下之後的判讀;已產生的歷史持倉不回寫。
例如某個低點出現在週一,後面三個交易日的價格才足以確認它;週一那筆歷史資料不能標成當時已經可買。確認日以前發生的頸線突破,本次也不追認為買點,必須等確認後出現新的穿越。這會漏掉部分快速反彈,卻對應到實際能拿到的資訊。相同問題也出現在道氏理論波段回測。
型態最早與最晚轉折間隔固定22至120日,最後一個轉折後最多等20日突破。頭至少比兩肩突出3%,肩與頸線兩側的相對高度差用2%、3%、4%三種容差;平滑頻寬用2、3、4日,兩者全組合共九組。中央設定為頻寬3日、容差3%。所有數字在執行前固定,沒有看完結果再改成更像成功案例的條件。
九組參數與前後兩段
熱圖每格是該組日夏普減0050日夏普,正值才算贏。四個設計都要至少七格為正,中央設定還要在前後兩段分別領先。切點依台股交易日對半,前段截至2021年11月25日,後段從11月26日起;分段時沒有重設原本的持倉狀態。
這兩段是歷史穩健性檢查,仍屬全段研究,未做真正樣本外或發表後前瞻。多試規則容易挑中碰巧漂亮的結果;Sullivan、Timmermann與White(1999)研究技術規則的資料探勘問題,提醒評估時必須考慮試過的整組規則。九格測試可以暴露參數敏感度,不能取代統計顯著性檢定。更多解釋見回測方法。
股票池、權重與成本
台股個股取每日60日平均原價成交額前300名,股價至少10元、平均成交額至少2千萬元,且有252日價格。股票代碼限四碼、首碼1至9;ETF另測0050。金融股、KY股沒有另剔除,全額交割也未另外標記排除;不使用今天的上市名單回頭篩選,但資料商未保留的下市標的仍可能造成存活偏差。
訊號出現後,當日以流動性排序選最多10檔,每檔權重上限10%,不足10檔的部分留現金;每日排序可能造成換股。0050版最多100%。過去252日曾有至少50%單日異動的股票,從異動隔日起排除,以降低資料異常影響,不用整段歷史最大漲跌回頭刪股票。
當日收盤確認訊號,交由FinLab在次一交易日收盤成交;個股正向版遇頭肩頂跌破出場,最長持有60個交易日。未另加滑價或容量模型。表格日夏普不扣無風險利率;互動報告預設扣2%,讀數因此不同。台股使用sim()預設每邊0.1425%手續費與賣出0.3%證交稅,圖表與表格均已扣成本;基準是0050還原價直接連乘,不另外經過模擬交易扣成本。交易周轉越高,成本差距越不能忽略。
| 設計 | 符合資格買訊 | 實際選入次數 | 平均個股權重固定組夏普 | 年周轉 | 單月最高周轉 |
|---|---|---|---|---|---|
| 台股個股・頭肩・正向 | 177 | 275 | 1.10 | 2.85 | 0.80 |
| 台股個股・頭肩・避開 | 177 | 334 | 1.41 | 3.40 | 0.90 |
| 0050・頭肩・正向 | 0 | 0 | 0.00 | 0.00 | 0.00 |
| 0050・頭肩・避開 | 0 | 1 | 1.13 | 0.00 | 0.00 |
買訊次數計算符合當日股票池資格的正向進場事件;避開版共用同一份買訊計數。實際選入次數則會受名額、順位與重新選入影響。兩種數字用途不同,不能把買訊數當成已成交筆數。周轉以目標權重變動絕對值的一半計算,年周轉為日平均乘252,單月最高值用逐月加總。
持有現金較多時,另外比較「0050乘相同平均總權重」,以及「每支個股用整段平均持有權重固定配置」;後者是事後診斷,不能當成事前可交易策略,缺報價的部分以現金處理。也移除中央設定報酬最高的一年再比較,完整數值在下載檔。四個設計先前的必要條件已失敗,沒有藉著只挑某個診斷表現就推薦交易。
頭肩型態和其他技術訊號的差別
頭肩辨識的資訊是一串高低點的順序與相對高度;均線擇時比較價格與平均線,黃金交叉選股比較兩條均線。把同一段上漲同時叫作三種成功訊號,不能證明三種策略各自有效。W底只需要兩個低點,相關測試另見W底與M頭,不把它混進頭肩的訊號數。
常見問題
頭肩底突破後一定上漲嗎?
沒有。本次沒有刪掉假突破,買入後遇相反訊號或滿60日便出場。事後只看成功型態,會同時漏掉失敗交易與等待期間。
頭肩頂形成時可以放空嗎?
本文只測賣出既有持股,沒有測借券、融券費用與空單回補。空方交易不能沿用此處的報酬數字。
左右肩要完全等高嗎?
不必完全相等,但需要固定容差。容差越寬,涵蓋的圖形越多;是否改善交易結果,要看整個參數區域。
可以一看到右肩就進場嗎?
本次不這樣做。右肩先等三日確認,再等頸線穿越;提前進場屬於另一個設計,不能套用本次成績。
沒有買訊代表頭肩型態不存在嗎?
只能說中央設定在該資料與窗口沒有合格交易。0050和個股波動不同,固定形狀條件不保證每個標的都有訊號。
可以用AI幫忙辨識嗎?
可以請AI依本文數值規則重跑,並檢查前視偏差。辨識圖片與驗證交易績效是兩項工作,輸出像頭肩的圖形仍不足以上架策略。
下載與重跑
可下載逐日淨值 data.csv、完整參數與版本 metrics.json、單一設計 strategy.py,以及整批研究 research.py。整批研究需要把共用 strategy.py放在同一個資料夾;執行 python research.py,會輸出全部參數、各中央設定的回測報告與逐日資料。單篇的程式預設重跑該篇主題;這些規則尚未通過驗證,沒有對應的上架策略。
顯示程式碼
from strategy import load_prices, make_position
from finlab.backtest import sim
prices = load_prices("tw")
position, entries = make_position(prices, family="hs")
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 自動驗證、回測、給你答案
免費開始





