跳至主要內容
台股研究 約 8 分鐘閱讀

道氏理論回測:兩指數確認,
18組參數都輸0050

道氏理論怎麼判斷多空?我們用已確認的波段高低點,檢查加權與櫃買是否同時出現更高高點、更高低點,再決定持有0050。兩個方向共十八組參數都沒勝過同期含息0050。文章交代轉折點如何延後確認、為何資料只能從二〇一六年開始,以及避開訊號的互補方向、前後半段與成本結果。

這次沒有穩定贏過 0050

不用操作程式,直接看報酬、最大跌幅與比較結果。

看比較結果
未通過本次驗證

道氏理論台股兩指數確認及避開方向的日夏普

點圖可查看原尺寸;完整數字也列在下方的研究下載區。 道氏理論的「更高高點、更高低點」加上兩個指數互相確認,我們用台股資料寫成機械規則。確認多頭才持有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日夏普 道氏理論兩方向與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程式。

選擇性:自行重跑完整研究

  1. 下載共用研究程式,存成 research.py。
  2. 依FinLab設定流程準備環境,安裝finlab、numpy與pandas,依套件指示登入。資料權限依登入帳號而定。
  3. 在程式所在資料夾執行:
顯示程式碼
python research.py --out results

這個命令會跑三個主題、十八個設計的全部162組,並非只跑本文。輸出的 results/metrics.json 包含完整參數與統計,各設計另有具名的互動HTML報告與每日淨值CSV;程式不會部署或下單。

兩份互動報告對應表格具名的兩個中心設計,沒有從九格中挑最好者。報告內建市場線不替代本文依同期0050還原價算出的對照表。後續資料修補或套件更新可能使重跑數字小幅不同;本文保留這次執行的數字與日期。

投資有風險,過去績效不代表未來表現。本文僅供教學與研究參考,不構成投資建議,不推薦買賣任何個股。最大回撤、空手機會成本與交易成本請一併評估。

最後更新:2026-11|回測區間:2016-01-04~2026-11-09|作者:FinLab 量化研究團隊。團隊以歷史資料與可重跑程式研究台股及美股策略。

FinLab AI

想建立自己的策略?

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

免費開始

更多技術指標研究

查看全部