點圖可查看原尺寸;完整數字也列在下方的研究下載區。 道氏理論的「更高高點、更高低點」加上兩個指數互相確認,我們用台股資料寫成機械規則。確認多頭才持有0050,中心參數日夏普 0.61,同期0050含息是 1.14;把持有時段反過來,也只有 0.74。兩個方向共十八組參數,沒有一組勝過0050,本文以反面教材為主。
本文提供研究結果,沒有推薦這些買賣規則。想自行重跑,可先 設定 FinLab 環境,再 下載研究程式(.py);其他檔案見 研究下載區。
道氏理論的多頭,如何定義
道氏理論以市場價格的波段結構描述趨勢,並要求不同市場指數互相確認。常見多頭判準是高點一個比一個高、低點也一個比一個高;只有高點創高,低點持續降低,不能直接視為同一種多頭結構。
CMT Association 的道氏理論說明指出,經典的指數確認沒有固定時間上限;該協會2026年課綱也把「不同平均指數應互相確認」列為相關假說。這些來源解釋分析框架,並未保證套用台灣兩種指數就能獲利。
本次以加權指數與櫃買指數,取代美國的工業與運輸市場指數,檢查的是台灣市場的機械化改寫。加權與櫃買反映不同上市市場,產業權重與規模分布不同;兩者同向可提供另一個觀察角度,但不等於完整重現原始道氏理論,也沒有加入成交量、主要趨勢的主觀分級或其他經典判讀。
| 判斷層次 | 本文規則 | 不能省略的條件 |
|---|---|---|
| 局部高點 | 一個收盤價為左右各k日、共2k+1日的最高值 | 右邊k日走完才確認 |
| 局部低點 | 同樣窗口內的最低收盤價 | 不能在最低價當天就宣稱已確認 |
| 單一指數多頭 | 最近兩個已確認高點與最近兩個已確認低點都墊高 | 高點與低點兩者都要符合 |
| 兩指數確認 | 加權與櫃買同時為上述多頭,連續維持c日 | 任一條件不符就出場 |
| 互補方向 | 避開上述持有時段,其餘日子持有0050 | 同樣隔日成交、同樣扣成本 |
轉折只用收盤價,不以當日最高、最低價找波段;若同價位再次達到窗口極值,也依同一套比較處理。本文的「波段」由窗口長度定義,沒有事後挑出看起來更像主要趨勢的轉折。
主要測試結果
先看「年化報酬」:平均每年賺或賠多少;「最大回撤」是從高點最多跌多少。日夏普比較報酬與波動,數字越高越好,但不保證獲利。
- 兩指數多頭才持有0050:年化報酬5.7%,期間最大跌幅25.7%。
- 同期持有0050:年化報酬22.5%,期間最大跌幅34.0%。
- 跌幅較小,也少拿許多報酬;兩個方向的十八組參數都沒有勝過0050。
完整逐項數字如下;手機可左右滑動表格比較。
| 設計 | 年化報酬 | 日夏普 | 最大回撤 | 前/後半段日夏普 | 9格贏0050 | 在場比例 |
|---|---|---|---|---|---|---|
| 兩指數多頭才持有0050 | 5.7% | 0.61 | -25.7% | 0.65/0.61 | 0/9 | 21.1% |
| 避開兩指數多頭 | 11.7% | 0.74 | -30.5% | 0.79/0.72 | 0/9 | 78.8% |
| 同期0050含息持有 | 22.5% | 1.14 | -34.0% | 1.25/1.09 | — | 100% |
多頭確認版的年化為 5.7%、最大回撤 -25.7%,在場比例 21.1%;互補版年化 11.7%、最大回撤 -30.5%。同段0050含息年化 22.5%、最大回撤 -34.0%。這些數字同時交代少參與市場的代價:較低回撤本身不代表更有效率,也要看拿到多少報酬。
多頭確認版整段 35 筆交易,互補版 36 筆;沒有每日無條件重新買賣。下方是多頭確認版的中心設定報告,另一份互動報告是互補版。兩者都保留開始等待訊號的現金日,不從第一筆獲利交易才開始計算。
回測方法與判讀限制
資料截至 2026-11-09,重跑日為 2026-11-10,套件 finlab 2.3.8。期間從 2016-01-04 開始。基準採 etl:adj_close 的 0050 還原收盤價,包含配息與分割調整;停牌日沿用前一價格。基準用還原價比值計算買進持有,不經回測引擎,也不扣成本。所有表格與圖都用同一段交易日,起點淨值同為一;訊號還沒出現的空手日也保留。
| 項目 | 設定與限制 |
|---|---|
| 成交時間 | 當天收盤算訊號,隔一個交易日收盤成交;無法用今天的訊號買回今天的收盤 |
| 成本 | sim() 預設手續費買賣各 0.1425%,賣出證交稅 0.3%,未打折;ETF 也沿用這個較高的股票稅率,沒有另切較低稅率 |
| 周轉率 | 本次未計算含價格漂移的實際成交金額周轉率,交易筆數不能直接換算周轉率;下方另列目標權重變化的月周轉估計 |
| 滑價與容量 | 未另外假設滑價,未估算策略容量;實際成交可能受漲跌停、成交量與委託影響 |
| 股票池 | 本文只交易0050,指數只作訊號;個股的流動性、金融股、KY股與下市股篩選不適用 |
| 權重 | 個股對當時持股等權,不限制檔數;0050設計只在持有0050與現金之間切換;現金報酬設為零 |
| 資料可得日 | 價量使用資料原有日期,當日高低價收盤後才完整可得;未使用個別投資人的策略或交易紀錄 |
| 樣本 | 全段樣本內,沒有樣本外或前瞻實盤驗證;切前後半段也不能替代樣本外 |
「贏」採日夏普:日報酬平均除以標準差,再乘以252的平方根,不扣無風險利率。每個設計換兩個參數、各取三個值,共九格,至少七格要高於同期0050;中心參數在交易日對半切的兩段,也各自要高於0050;全部用扣成本結果。平均有多少天持股,就是表中的在場比例。有現金的設計還要高於「每天固定維持同平均權重的0050、其餘現金」對照,避免把少投資帶來的較小波動誤認成擇時能力。這個固定權重對照不扣調倉成本。
通過上述三項後,還須拿掉中心參數報酬最好的一個日曆年,再次高於同期0050,才算通過本次整體檢查;這不能補救前面未過的項目。未通過者不設成公開策略,也不提供把它當成已驗證策略的 Studio 捷徑。若要理解含息與一般收盤價的差異,可看回測方法;量化交易指南則說明研究結果與實際執行的距離。
道氏理論最容易被算錯的地方:轉折日期
一個局部低點,必須和後來的價格比較,才能知道低點有沒有守住。若使用左右各五日的窗口,某個交易日看起來最低,還要等右邊五個交易日都出現,才有足夠資料把它列為局部低點。那時才更新趨勢判斷,再等本次設定的連續確認天數,最後才到隔日收盤成交。
把確認後的低點標記畫回價格圖,作為圖形說明可以;如果在回測時也把買訊移回低點當天,就使用了前視偏差。這會同時增加買得更低、賣得更高的機會,讀者看到的報酬無法實際取得。本次程式在右側窗口走完當天更新高低點,不會回填訊號。
我們用一個額外檢查驗證這點:同一條價格序列分別只給到較早日期,與提供全部後續資料時,前面已產生的趨勢判斷必須一致。三、五、十日的轉折窗口都通過這個檢查。它保證程式沒有讓未來價格修改過去已知的趨勢,不能保證機械規則本身有投資優勢。
窗口左右各三、五、十日,連續確認一、三、五日,中心為五日窗口與連續三日。熱圖的兩個方向都沒有正值,九格各自都輸0050,換成更快或更慢的確認也沒有形成穩定勝出區域。完整九格已公開,不因某格比較接近基準就改成新的主角。
前後半段的0050日夏普分別為 1.25、1.09;多頭確認版是 0.65、0.61。中心版拿掉報酬最好的一年(2025年)後,日夏普 0.40,同期0050拿掉相同一年為 1.11。額外檢查不能把原本未通過的設計改判為通過。
兩個指數都對上,為何還可能太晚
高低點結構確認的是已發生的價格路徑。等待轉折需要右側資料,等待兩個指數同時符合還需要另一段時間;如果上漲快速發生在確認之前,0050買進持有已經參與那段漲幅,訊號策略則還在等待。出場時也有相似延遲,不能假設一出現下跌就正好先賣掉。
互補方向有助於拆解這個問題。若「多頭確認」大多落在行情已走完的時段,其他時段反而可能較好;但這次把兩個方向都測完,十八格仍沒有贏。因此這份資料沒有支持直接把訊號反著用。改成兩個指數輪流持有、容許較長的不同步時間,都是不同規則,需重新寫定與驗證。
兩個市場指數也不能當成兩份彼此獨立的證據。它們都受台灣總體市場與資金風險影響,方向一起變化很常見;同向只表示多了一道條件,不能直接把可信度加倍。讀者想研究另一種市場濾網,可以對照大盤均線濾網;想分清均線斜率與波段結構,可讀葛蘭碧八大法則回測。
資料起點限制與文獻範圍
加權指數歷史較長,但本次使用的 stock_index_price 櫃買收盤指數從2016-01-04開始,因此只能從這天開始做兩指數比較。資料開始後仍要等足夠轉折,不能拿更早的加權指數表現冒充兩指數結果,也沒有補造2008年金融海嘯時的確認訊號。這次樣本沒有覆蓋每一種長期市場環境。
Lo、Mamaysky與Wang(2000)用自動化方法研究技術型態,重點之一是把主觀圖形變成可檢驗規則;這不代表本文的道氏改寫已經通過其統計方法。Sullivan、Timmermann與White(1999)研究大量技術規則的資料探勘偏誤,也提醒不能只報最好看的窗口。本文只有固定網格、分段與成本檢查,未做多重檢定調整。
常見問題
道氏理論的多頭和股價上漲相同嗎?
短期上漲可能仍在前一個高點之下。本文要求兩個已確認高點與兩個低點都墊高,再要求兩個指數同時符合,因此條件比今天漲或近期漲更嚴格。
道氏理論一定要等兩個指數同一天突破嗎?
經典框架容許不同步確認。本次測的是兩個指數「當下皆處於多頭狀態」連續維持幾日,沒有要求高點在同一天形成,也沒有宣稱這是唯一正確的經典寫法。
為何不在波段低點直接買進?
因為當時還不知道它是不是低點。等右側窗口確認後才能使用,否則回測會取得未來資訊。圖上容易辨認的低點,與交易當天能知道的資訊不同。
櫃買指數是拿來買賣的標的嗎?
本文把櫃買當確認訊號,實際模擬持有的是0050。指數方向與0050持股結構不同,不能把櫃買的漲跌直接當成0050報酬。
確認越久越可靠嗎?
確認較久會減少某些短暫切換,也可能延後進場。這次一、三、五日都沒有勝出,不能單靠「多等幾天」就推論較可靠。
這份結果可以拿來做當沖嗎?
不行。資料是日收盤,隔日收盤才成交,沒有盤中訊號與分時成交。基本流程可從程式交易指南了解;其他日線訊號則見台股大盤擇時研究。
用Python保留確認延遲
下載完整研究程式並存為 research.py 後,這段重現中心設定的部位與回測。confirmed_trend內部先把候選轉折延後五日,再與已走完的十一日窗口比較;呼叫時不需再把訊號提前或倒移。
顯示程式碼
from finlab import data
from finlab.backtest import sim
from research import confirmed_trend
taiex = data.get("taiex_total_index:收盤指數")["TAIEX"].loc[:"2026-11-09"]
otc = data.get("stock_index_price:收盤指數")["上櫃櫃買指數:指數"].dropna().loc[:"2026-11-09"]
dates = taiex.index.intersection(otc.index)
both_bullish = (
confirmed_trend(taiex, 5).reindex(dates)
& confirmed_trend(otc, 5).reindex(dates)
)
position = both_bullish.rolling(3).sum().eq(3).to_frame("0050")
report = sim(
position,
retain_initial_cash=True,
end_date="2026-11-09",
upload=False,
)目標權重變化與月周轉
下表將每日目標等權部位的變化取絕對值,買進與賣出相加後按月加總。持股從零到滿倉計100%,再全部賣出另計100%;只轉換同一檔持股的期間不重複計算。這是不含價格漂移的目標權重周轉估計,並非回測引擎實際成交金額除淨值;平均包含空手月份,資料最後不足一個月也納入。交易筆數則可能同時包含許多檔股票,不能拿來替代周轉率。
| 中心設計 | 平均每月雙邊周轉 | 單月最高 |
|---|---|---|
| 多頭確認 | 53.4% | 200.0% |
| 互補方向 | 54.2% | 200.0% |
下載與重跑
只想看結果,不用安裝軟體或執行程式。 下方兩份互動網頁可查看歷年報酬與最大跌幅;要自行重跑全部研究,再選擇下載Python程式。
- 兩指數多頭確認互動報告:看本文主要測試的結果。
- 避開兩指數多頭互動報告:看另一個固定設計。
- 完整研究程式(Python,.py):自行執行三個主題、全部162組。
- 全部統計(JSON):查看本文全部參數與指標。
- 每日淨值(CSV):下載本文中心參數的每日淨值。
選擇性:自行重跑完整研究
- 下載共用研究程式,存成
research.py。 - 依FinLab設定流程準備環境,安裝finlab、numpy與pandas,依套件指示登入。資料權限依登入帳號而定。
- 在程式所在資料夾執行:
顯示程式碼
python research.py --out results這個命令會跑三個主題、十八個設計的全部162組,並非只跑本文。輸出的 results/metrics.json 包含完整參數與統計,各設計另有具名的互動HTML報告與每日淨值CSV;程式不會部署或下單。
兩份互動報告對應表格具名的兩個中心設計,沒有從九格中挑最好者。報告內建市場線不替代本文依同期0050還原價算出的對照表。後續資料修補或套件更新可能使重跑數字小幅不同;本文保留這次執行的數字與日期。
投資有風險,過去績效不代表未來表現。本文僅供教學與研究參考,不構成投資建議,不推薦買賣任何個股。最大回撤、空手機會成本與交易成本請一併評估。
最後更新:2026-11|回測區間:2016-01-04~2026-11-09|作者:FinLab 量化研究團隊。團隊以歷史資料與可重跑程式研究台股及美股策略。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始



