所有圖均可點開,手機可雙指放大;完整數字與逐日淨值可從文末下載。
十字線、錘子線、多頭吞噬與晨星,這次四個設計、36組參數沒有一個通過驗證。本文以反面教材為主:K線形狀能描述一天的交易,連跌後出現反轉外觀,也還需要檢查隔日成交、持有天數與換股成本。
十字線與錘子線怎麼分
十字線的開盤與收盤很接近,因此實體相對整根高低區間很小;錘子線則有長下影、短上影與較小實體。前者表示當日開收接近,後者表示價格曾向下走、收盤又回到日內較高處。兩種圖形都能出現在上漲、下跌與橫盤,形狀本身沒有說明下一個買方會出多少錢。
實體長度定為開收差的絕對值,全距為最高減最低,下影為開收較小值減最低,上影為最高減開收較大值。這四個定義使用同一天、同口徑的還原開高低收。把還原收盤與未還原最高價混合,可能在除權息或分割日造出不存在的長影線;本研究避免這種混用,也不讓零全距被判成十字線。
| 型態 | 中心參數的數值規則 | 前段跌勢與出場 |
|---|---|---|
| 十字線 | 實體不超過全距10%,全距必須大於零 | 型態前連跌3天,持有5個交易日 |
| 錘子線 | 下影至少2倍實體,上影不超過實體,實體大於零 | 型態前連跌3天,持有5個交易日 |
| 多頭吞噬 | 前日黑K、當日紅K,當日實體包住前日實體,至少為其1.2倍 | 連跌條件包含前日黑K,持有5個交易日 |
| 晨星 | 第一日黑K,中間實體不超過第一日30%,第三日紅K收復第一日實體一半 | 三根型態之前連跌3天,持有5個交易日 |
「低檔」在這裡只用前段連跌描述,沒有用事後最低點或未來漲幅篩選。晨星沒有強制兩次跳空,因此是本文的機械化變體,不能把結果套到每一本教材的晨星定義。吞噬則要求實體包覆,不要求影線也全包住。細節不同就可能是另一個實驗,圖名相同不代表交易規則相同。
四個反轉型態的實測結果
十字線中心設定的平均每年複利變化為 −32.96%,從高點最多跌 99.95%;錘子線為 −34.77%、最多跌 99.97%。同期0050含息持有年化 14.07%、最多跌 52.38%。這些跌幅是整段持續執行的組合結果,不是單筆交易的停損幅度。
下表保留全部型態。手機可左右滑動,看最大回撤與前後半段;日夏普越高,代表報酬相對波動的表現越好。
| 設計 | 年化報酬 | 日夏普 | 最大回撤 | 前/後半段日夏普 | 鄰近參數贏的格數 |
|---|---|---|---|---|---|
| 十字線 | -33.0% | -1.54 | -99.95% | -1.78/-1.28 | 0/9 |
| 錘子線 | -34.8% | -1.57 | -99.97% | -1.59/-1.55 | 0/9 |
| 多頭吞噬 | -35.0% | -1.66 | -99.97% | -1.95/-1.35 | 0/9 |
| 晨星 | -37.0% | -1.57 | -99.99% | -1.79/-1.34 | 0/9 |
| 同期0050含息持有 | 14.1% | 0.75 | -52.38% | 0.39/1.11 | — |
本文提供研究結果,沒有推薦這些買賣規則。想自行重跑,可先 設定 FinLab 環境,再 下載研究程式(.py);其他檔案見 研究下載區。
十字線與錘子線在前後半段的日夏普也都低於同期0050,不能以其中幾次成功反彈代表整套交易有效。
互動報告採十字線中心參數;文末第二份報告採錘子線中心參數,兩者都是事先固定的規則。圖中的多頭吞噬與晨星同樣扣成本。部分最大回撤接近百分之百,表格保留兩位小數,避免四捨五入後被誤讀為恰好歸零。
四種型態都採五日持有;期間再次出現同類訊號就把有效持有窗續到最近訊號後五日。個股按當日訊號等權,持股變化會重新配置部位。這是需要頻繁換股的設計,不能直接當成「每筆只買一次、五天後才全部檢查」的低周轉組合。每日價量訊號不等於免費交易;本次沒有另跑零成本版本,因此不能把所有落後幅度單獨歸因給手續費。
回測方法與驗證門檻
資料截至 2026-11-10,於 2026-11-11 重跑,使用 finlab 2.3.8。區間為2008-01-02至2026-11-10,前置資料從2006年載入以暖機。基準採 etl:adj_close 的0050還原收盤價,包含配息與分割調整,純粹以價格比值計算含息持有,不經回測引擎,也不扣交易成本。所有比較保留相同交易日與空手日,淨值共同從一開始。
| 項目 | 本次設定 |
|---|---|
| 成交時點 | 當日收盤後形成訊號,隔一個交易日收盤成交;未使用當日訊號回買當日收盤 |
| 成本 | sim() 預設買賣手續費各0.1425%、賣出證交稅0.3%,沒有打折或設為零;0050擇時也沿用這個較高的股票稅率 |
| 股票池 | 使用歷史四碼普通股代號,排除0與91開頭;保留下市資料,不按今日上市名單預篩;未另排除金融、KY與全額交割股 |
| 流動性 | 進場須20日平均成交金額至少2,000萬元;成交金額來自 price:成交金額,並非還原股價乘原始成交量 |
| 部位 | 個股每日依訊號等權,持股不設檔數上限;空手時現金報酬為零,沒有槓桿或放空 |
| 滑價與容量 | 未另設滑價,未估計可容納資金;真實委託仍可能碰到漲跌停或成交量不足 |
| 資料可得性 | 開高低收採同口徑還原價;只使用當日及更早資料,不把事後找到的轉折回填 |
| 樣本 | 全段樣本內,沒有樣本外、滾動訓練或前瞻實盤驗證;前後切半不能替代樣本外 |
本研究的「贏」定義為日夏普高於同期0050:日報酬平均除以標準差,再乘252的平方根,不扣無風險利率。每個設計有九組鄰近參數,至少七組要贏;事前指定的中心參數在前、後半段也必須各自贏,全部使用扣成本結果。中心取參數中間值,沒有改採績效最好的格子。
有現金的設計另比較「每天固定維持同平均市場權重的0050,其餘現金」。平均權重取隔日成交後的目標總權重;個股等權持有任意檔時總權重為一,完全空手才是零,不能把股票數量或訊號出現頻率當曝險。固定權重對照不扣調倉成本,用來檢查低波動是否只是少投資造成。通過前三項後,再拿掉報酬最好的一個日曆年,要求日夏普仍高於同期0050。
下表的周轉為目標權重變動絕對值的月合計,包含買與賣,沒有除以二;不是按實際成交金額與價格漂移計算的周轉率。交易筆數也不能當成周轉率。這個估計可以顯示換股負擔,但不足以推算實際資金容量。
| 設計 | 平均持股檔數 | 交易筆數 | 每月目標周轉平均/最高 | 持股日比例 |
|---|---|---|---|---|
| 十字線 | 31.9 | 28,658 | 1197.2%/1745.5% | 99.7% |
| 錘子線 | 12.6 | 11,450 | 1222.9%/1739.0% | 97.7% |
| 多頭吞噬 | 16.1 | 14,779 | 1211.2%/1617.7% | 98.8% |
| 晨星 | 9.2 | 8,481 | 1243.1%/1952.4% | 94.1% |
十字線大小與連跌天數換了,結果有改變嗎
每種型態固定測三個形狀門檻與三個前段連跌天數,共九格。連跌天數都取2、3、4天;十字線的實體比例為5%、10%、15%,錘子線下影倍數為1.5、2、2.5,多頭吞噬實體倍數為1、1.2、1.4,晨星中間實體比例為20%、30%、40%。這些組合在第一個結果出現前寫定,沒有改用績效最好的一套。
四張圖顯示各設計完整九格的扣成本日夏普。這36格沒有一格高於同期0050與固定平均曝險對照;因此擴大或縮小型態門檻,並未在本文範圍內形成穩定優勢。這不等於所有K線條件都沒有研究價值,也不支持把未測過的成交量或基本面條件加進來後,仍沿用本篇數字。
前後半段都用同一中心參數,四個設計在兩段都落後;沒有把早期適用的門檻與後期適用的門檻拼接。可下載結果也附拿掉最好一年的檢查,但前面已未通過,這項檢查無法把失敗改成通過。若改成長期持有、設停損或加入營收因子,應另做新研究,不能在看到本次失敗後悄悄換規則。
研究文獻為何有不同答案
Marshall、Young與Rose(2006)的〈Candlestick technical trading strategies: Can they create value for investors?〉,刊於《Journal of Banking & Finance》30卷8期、2303–2323頁,檢驗美國大型股票的K線交易,沒有得到一般性的獲利支持。市場與年代不同,這篇文獻提供檢驗方法的背景,不能直接取代台股實跑。
Lu、Shiu與Liu(2012)的〈Profitable candlestick trading strategies—The evidence from a new perspective〉,刊於《Review of Financial Economics》21卷2期、63–68頁,則報告台股部分多頭反轉型態具預測力。該文的型態與持有設計和本文不同,不能把學術上的特定結果寫成所有十字線或錘子線都能賺錢。本篇也沒有逐條複製該論文的實驗。
重現十字線的核心程式
完整下載檔包含四種型態與全部參數。下列為十字線中心條件,重點在讓連跌判定只使用型態之前的資料。close.diff() 是今日減昨日,連續三天負值之後還要往後移一天,才不會把型態當日也塞進前段跌勢。
顯示程式碼
import finlab
from finlab import data
from finlab.backtest import sim
finlab.login()
data.truncate_end = "2026-11-10"
open_ = data.get("etl:adj_open")
high = data.get("etl:adj_high")
low = data.get("etl:adj_low")
close = data.get("etl:adj_close")
amount = data.get("price:成交金額")
columns = [s for s in close.columns if len(s) == 4
and s.isdigit() and not s.startswith(("0", "91"))]
body = (close - open_).abs()
falling = close.diff().lt(0).rolling(3).sum().eq(3).shift(1)
event = body.le((high - low) * 0.1) & high.gt(low) & falling
event &= amount.rolling(20).mean().ge(20_000_000)
position = event.rolling(5, min_periods=1).max().eq(1) & close.notna()
report = sim(position[columns].loc["2008-01-02":], resample=None,
upload=False, retain_initial_cash=True, end_date="2026-11-10")
report.to_html("doji_report.html")十字線與錘子線常見問題
十字線一定表示反轉嗎?
開盤和收盤接近只描述當日價格,沒有保證隔日方向。本次連跌後買入的九格都沒贏0050,不能把猶豫的形狀直接換成買入指令。
錘子線紅K比黑K有效嗎?
本文沒有分開紅黑實體,兩者只要符合影線規則都算。顏色篩選是未測條件,不能引用本次數字替它背書。
長下影線就一定是錘子線嗎?
還要看實體、上影與前段走勢;本文把上影限制為不超過實體。只有下影長、上影也很長的K線不算本次錘子線。
吞噬與晨星為何放在同一篇?
它們分別用兩根、三根K線描述反轉,提供單根型態的對照。規則各自測九格,並未把四種訊號合成一套策略。
可以只用收盤價重現嗎?
不行。形狀需要同一天的開高低收;成交金額用於流動性,單靠收盤序列無法區分十字線與長影線。
本文和上影線研究有何差別?
上影線放空研究測的是另一種方向與持有方式;K線波動率研究研究區間大小。這裡測連跌後反轉,不沿用它們的績效。均線糾結與扣抵以及寶塔線回測則分別使用均價與線段狀態,適合用來辨認不同訊號機制。程式交易指南整理這些規則轉成可執行程式時的共通步驟。
研究下載與重跑
- 研究程式 .py:三篇共用的完整程式,一次重跑12個設計、108組回測,每組另存HTML報告。
- 逐日淨值 .csv:只列本文中心參數與0050的每日淨值。
- 完整數字 .json:只列本文全部參數、扣成本指標、前後半段與移除最佳年結果。
- 互動報告 .html:本文主要設計的回測儀表板。
- 對照報告 .html:本文說明的另一組規則報告。
從AI輔助安裝流程設定 FinLab 後,把下載檔交給AI並要求「保留固定日期、參數與預設交易成本,重跑這份研究」。程式會引導登入、讀取所需資料,先產出各組結果,再彙整;資料權限與下載額度依帳號方案,原始資料不隨文章再散布。重跑期間較長,可先閱讀現成的逐日淨值與報告。這些未通過驗證的設計沒有公開策略頁與 Studio 策略捷徑。
歷史資料修補與套件更新可能讓同區間重跑數字不同;本文採本次完整執行結果,不把不同快照的成績拼在一起。若研究自己的新規則,應另留一段完全未看過的資料,並在下一次實驗前寫定條件。回測方法說明常見偏差,量化交易指南則整理從研究到執行需要補足的證據。
投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。本文結果僅涵蓋指定規則、成本與期間,未驗證實盤可成交性,也沒有保證未來報酬。
作者簡介:FinLab量化研究團隊以FinLab資料與Python程式整理台股、美股的策略研究,提供規則、回測與可下載產物,讓讀者能核對研究結果與限制。
最後更新:2026-11|回測區間:2008-01-02~2026-11-10|作者:FinLab量化研究團隊
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始








