
執行這個策略
複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。
告訴你的AI:
幫我設定 FinLab,重跑海龜交易法則在美股 ETF 與台股的回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/turtle-trading-strategy-backtest
我們把 Curtis Faith 在《Way of the Turtle》(2007)公開的海龜交易法則改用每日收盤價判斷,測了 18 檔美股 ETF,期間 2016 年 9 月到 2026 年 11 月,涵蓋股票、債券、金屬、能源、農產品和貨幣。兩套系統都沒有贏 QQQ,也沒有贏固定權重持有同一批 ETF。系統二(55 日突破)年化 6.5%、日夏普 0.49;系統一(20 日突破)年化 5.1%、0.44。含息 QQQ 是 19.2%、0.89,用系統二平均權重固定持有這 18 檔 ETF 是 8.7%、0.92。台股版用 0050 加上市市值前 30 大,2013 到 2026 年系統二年化 9.6%、夏普 0.62,含息 0050 是 18.4%、1.01。
海龜當年交易的是期貨,小額保證金就能控制大部位。換成不開槓桿的 ETF,規則要求每個單位承擔 1% 的風險,加起來的部位中位數接近帳戶的九倍,所以大多數日子每個部位都得縮小才放得進去。
海龜交易法則關鍵數字
| 設計 | 日夏普 | 年化報酬 | 最大回撤 | 贏基準 | 前/後半段夏普 | 含成本的夏普 | 固定持有同一批標的 |
|---|---|---|---|---|---|---|---|
| 美股 ETF 系統一(20 日進、10 日出) | 0.44 | 5.1% | -38.4% | 0 / 9 | 0.96 / -0.01 | 0.11 | 0.90 |
| 美股 ETF 系統二(55 日進、20 日出) | 0.49 | 6.5% | -32.4% | 0 / 9 | 0.87 / 0.23 | 0.29 | 0.92 |
| SPY 含息 | 0.85 | 14.5% | -33.7% | 對照 | 0.93 / 0.76 | ||
| QQQ 含息 | 0.89 | 19.2% | -35.1% | 美股基準 | 1.16 / 0.64 | ||
| 台股系統一 | 0.11 | 0.3% | -51.2% | 0 / 9 | -0.39 / 0.42 | 0.11 | 0.80 |
| 台股系統二 | 0.62 | 9.6% | -41.3% | 0 / 9 | -0.03 / 1.03 | 0.62 | 0.80 |
| 0050 含息 | 1.01 | 18.4% | -34.0% | 台股基準 | 0.88 / 1.13 |
美股是 2016-09-01 到 2026-11-05,前後半段以 2021-10-01 切開,含成本一欄是每邊 0.1%。台股是 2013-05-02 到 2026-11-06,以 2020-01-16 切開,主結果已含 finlab 台股預設的手續費 0.1425% 與證交稅 0.3%,所以兩欄相同。股息都再投入。最後一欄是各系統的平均權重固定持有、其餘現金、每月再平衡。
測試的海龜交易法則
Richard Dennis 和 William Eckhardt 在 1983 年把這套規則教給「海龜」學員,Faith 是其中一位,後來把規則完整公開。本文只測做多。海龜原本在盤中價格一碰到關卡就進場或停損,本文全部改用收盤價判斷、隔天開盤成交。
- N 值: 20 日平均真實區間(ATR),用 Wilder 平滑,代表市場一天通常波動多少。ATR 的算法可以看 ATR 指標與肯特納通道。
- 進場: 收盤突破前 E 日最高價(唐奇安通道上緣)就買。系統一 E = 20,系統二 E = 55。
- 出場: 收盤跌破前 X 日最低價就賣,系統一 X = 10,系統二 X = 20。
- 停損: 收盤比最後一個單位的買價低 2N 以上就賣。
- 單位大小: 一個單位每 N 承擔帳戶 1% 的風險,所以權重是 1% × 價格 ÷ N。
- 加碼: 收盤每比上一個單位的買價再漲 0.5N,就加一個單位,一天最多加一次。上限是單一市場 4 個、同一類市場 6 個、全部 12 個。
- 系統一的濾網: 同一個市場上一次突破如果是賺錢的單位交易(不論當時有沒有真的進場),就跳過這次 20 日突破;被跳過的市場仍可以在 55 日突破時進場。
每套系統都在原設定周圍跑 3 × 3 參數:系統一進場 15、20、25 日,出場 8、10、12 日;系統二進場 45、55、65 日,出場 15、20、25 日。
18 檔美股 ETF 代替海龜當年交易的期貨,分成六類:
| 類別 | ETF |
|---|---|
| 股票 | SPY、QQQ、IWM、EFA、EEM |
| 債券 | TLT、IEF |
| 金屬 | GLD、SLV、CPER |
| 能源 | USO、UGA |
| 農產品 | DBA |
| 貨幣 | FXE、FXB、FXF、FXY、FXC |
台股版的標的是 0050,加上每月底上市普通股市值前 30 大,下一個交易日生效。股票只有在名單內才能進場,出場照規則走。台股沒有分類上限,只有單一市場 4 個、全部 12 個。
不開槓桿時的部位大小
債券 ETF IEF 的 N 值中位數只有價格的 0.43%,所以一個「虧 1N 就損失帳戶 1%」的單位,等於帳戶的 2.3 倍。貨幣 ETF 一個單位約是帳戶的 2 倍,SPY 是 0.92 倍。在中位數的一天,規則要求的目標權重加起來是帳戶的 8.78 倍(系統一)和 8.14 倍(系統二)。finlab 的 sim 會把超過 100% 的那一列等比例縮回 100%,美股兩套系統分別有 93.7% 和 90.9% 的日子被縮小。縮小之後,每個單位實際承擔的風險大約只剩帳戶的 0.1%,原設計是 1%。
兩套系統幾乎一直在場內,平均投入 94.9% 和 92.3%,完全空手的日子只有 4.1% 和 6.8%,同時持有三到四個市場、約八個單位。台股版也一樣:目標權重中位數是帳戶的 6.14 和 6.40 倍,91.1% 和 88.1% 的日子被縮小。
策略怎樣才算過關
「贏」的意思是同一段交易日裡,日夏普高於含息基準:美股是 QQQ,台股是 0050。夏普是日報酬平均除以標準差,再乘以 √252,不扣無風險利率。以下條件都在看到結果之前寫定。
- 鄰近參數: 9 組參數裡七成以上要贏基準。
- 前後兩段: 回測期間對半切,原設定兩段都要贏。
- 含成本: 美股在 finlab 預設成本(0)和每邊 0.1% 下都要贏;台股用 finlab 預設的手續費與證交稅。
- 不靠單一年份: 拿掉領先最多的那一個年度,仍要贏。
- 固定持有同樣曝險: 要贏「平均權重固定持有同一批標的、每月再平衡」的組合。美股用系統自己的 18 檔 ETF 平均權重;台股用 0050 加市值前 30 大等權,再乘上系統的平均投入比例。
- 現金(只看美股): 規則可能留現金,所以扣掉 BIL(短期國庫券)後的夏普也要贏 QQQ。
四個設計每一項都沒過。
美股 ETF 的系統一與系統二
前半段兩套系統都不錯。2016 年 9 月到 2021 年 9 月,系統一年化 11.7%、夏普 0.96,接近 SPY 的 0.93;2020 年是它最好的一年,賺 27.2%。後半段就不行了:系統一年化 -1.1%、夏普 -0.01,系統二年化 2.6%、夏普 0.23,同期 QQQ 是 0.64。

趨勢追蹤常被當成空頭市場的保護,2022 年兩套系統卻走向兩邊。QQQ 跌 32.6%,系統二賺 4.2%,系統一虧 21.9%,是它最差的一年。拿掉 2022 年,系統一夏普 0.71、系統二 0.54,QQQ 是 1.23。系統二最好的年份是 2020 年(21.0%)和 2025 年(20.1%);2023 年 QQQ 漲 54.9%,系統二虧 3.9%。扣掉短期國庫券後,兩套系統的夏普是 0.27 和 0.34,QQQ 是 0.79。
哪些市場賺錢

系統一平倉 517 筆,系統二 321 筆,勝率都在四成左右,賺錢的交易比虧錢的大很多:系統一賺錢的平均 +5.4%、虧錢的 -2.2%,系統二是 +7.0% 對 -2.2%。單筆最多賺 60% 和 81%,持有中位數 14 和 15 個交易日。
兩套系統都是能源和金屬每筆賺最多,股票小賺,債券和貨幣小虧。系統一的 517 筆裡有 124 筆是貨幣 ETF,僅次於五檔股票 ETF,勝率只有 30%,平均每筆 -0.27%。
系統一的濾網跳過的突破不多。系統一沒持有的市場出現 2,288 次突破,其中跳過 505 次,佔 22%。

粗體是原設定,36 格全部低於同期基準。美股系統一從 0.27 到 0.60,進場 25 日最好(0.55 到 0.60);系統二從 0.36 到 0.54。
成本與固定持有
美股兩套系統的權重大多數日子都被縮小,這時任何一筆買賣都會改變其他所有部位的大小。系統一有 902 天、系統二有 676 天要調整部位,目標權重單邊一年週轉 21.8 次和 15.0 次。每邊 0.1% 成本下,系統一夏普從 0.44 掉到 0.11,年化只剩 0.6%;系統二從 0.49 掉到 0.29,年化 3.3%。實際的 ETF 買賣價差和滑價會讓成本更高。
對海龜規則最不利的是固定持有的對照組。用系統平均權重一直持有同一批 ETF、每月再平衡,夏普 0.90(對系統一)和 0.92(對系統二),年化 8.1% 和 8.7%,最大回撤 -19.8% 和 -21.7%。用唐奇安通道替同一批 ETF 擇時,報酬變少,回撤變深。我們的多空股票與趨勢追蹤回測用更簡單的訊號也得到一樣的結果:QQQ、IEF、GLD、DBC 的跨資產時間序列動能在 2017 到 2026 年夏普 1.09,固定持有同樣組合是 1.19。
台股:0050 加市值前 30 大

台股版的系統二全期年化 9.6%、夏普 0.62,系統一只有 0.3%、0.11,含息 0050 是 18.4%、1.01。兩段的差距很大:2013 年 5 月到 2020 年 1 月,系統二年化 -1.1%,系統一 -5.9%,0050 是 11.6%;2020 年以後,系統二年化 21.3%、夏普 1.03,接近 0050 的 25.4% 和 1.13。
前半段的虧損大多來自 2015 年,系統二虧 34.2%,系統一虧 29.4%,0050 只跌 6.3%。一個單位的權重是 1% 除以 N 佔股價的比例,N 只有股價 2% 的股票,一個單位就是帳戶的一半。2015 年下半年,系統二有 65% 的交易日只持有一到三檔,一次假突破就是一大筆虧損。12 月 2 日買進和碩(4938),權重 47%,8 個交易日後出場虧 13.3%,帳戶少了 6.2%。6 月底聯發科(2454)以 46%、大立光(3008)以 37% 的權重進場,7 月 8 日一起出場,分別虧 5.8% 和 6.5%。2016 年 1 月還一度把整個帳戶放在中華電(2412)。
後半段的好成績集中在少數年份。系統二 2023 年賺 57.4%,0050 是 27.5%;拿掉 2023 年,夏普從 0.62 掉到 0.46,0050 是 0.96。2024 年 0050 漲 48.6%,系統二只賺 12.0%。系統二持有最久的是 0050(769 天)、台積電(709 天)和中華電(699 天)。
0050 加市值前 30 大等權、乘上系統的平均投入比例固定持有,夏普 0.80,年化 11.8% 和 11.4%,兩套系統都輸。系統一的 9 組參數從 -0.08 到 0.36,系統二從 0.28 到 0.76,最好的一格也低於 0050。台股的結果已含手續費和證交稅:系統二一年週轉 10.0 次,系統一 16.6 次。平倉交易方面,系統二 353 筆、勝率 39.1%,賺錢的平均 +13.7%、虧錢的 -4.6%,單筆最多賺 245%;系統一 614 筆、勝率 37.6%。
台股其他和停損、突破有關的研究:ATR 移動停損回測讓動能策略年化從 8.0% 掉到 -3.6%,sustain 語法避免假突破測的是創新高的突破股。
和其他研究對照
支持趨勢追蹤的證據大多來自期貨。Moskowitz、Ooi 與 Pedersen(2012)在 58 種流動性高的期貨與遠期合約上發現,過去 12 個月的報酬可以預測下個月的報酬,分散持有這些交易的組合有可觀的報酬。Hurst、Ooi 與 Pedersen(2017)把類似策略回推到 1880 年,在一個多世紀裡持續獲利。通道突破是最早被測試的規則之一:Brock、Lakonishok 與 LeBaron(1992)用 1897 到 1986 年的道瓊指數測試區間突破,發現買進訊號之後的報酬比較高。
本文結果比較差,可能有三個原因。本文的 ETF 和股票不開槓桿,每個部位只有原本設計的一小部分。18 檔 ETF 比第一篇研究的 58 種合約少很多。十年對一個靠少數長期趨勢賺錢的策略來說,樣本也短。
程式碼
這段是簡化版的美股系統二:每個市場一個單位,不加碼、不停損、沒有上限。用到 2026-11-05 的資料,它印出的日夏普約 0.67,比完整規則的 0.49 高。research.py 跑的是完整規則,包含兩套系統、美股與台股、36 組參數和各項檢查。
顯示程式碼
import finlab
import numpy as np
from finlab import data
from finlab.backtest import sim
finlab.login()
data.set_market("us_fund")
etfs = ["SPY", "QQQ", "IWM", "EFA", "EEM", "TLT", "IEF", "GLD", "SLV", "CPER",
"USO", "UGA", "DBA", "FXE", "FXB", "FXF", "FXY", "FXC"]
# 還原的最高、最低與收盤價:原始價格乘上除息調整比例
# 基金價格表在美股休市日有空白列,只保留交易日
close = data.get("us_fund_price:adj_close")[etfs].dropna(how="all")
factor = close / data.get("us_fund_price:close")[etfs].loc[close.index]
high = data.get("us_fund_price:high")[etfs].loc[close.index] * factor
low = data.get("us_fund_price:low")[etfs].loc[close.index] * factor
# N 值:20 日平均真實區間,Wilder 平滑
previous = close.shift(1)
true_range = np.maximum(high, previous) - np.minimum(low, previous)
n = true_range.ewm(alpha=1 / 20, adjust=False, min_periods=20).mean()
# 系統二通道:突破前 55 日最高價進場,跌破前 20 日最低價出場
enter = close > high.shift(1).rolling(55).max()
leave = close < low.shift(1).rolling(20).min()
held = enter.hold_until(leave)
# 一個單位每 N 承擔帳戶 1% 風險,權重是 1% x 價格 / N
# 權重在進場日固定;sim 會把超過 100% 的列縮回 100%
unit = (0.01 * close / n).where(enter & ~held.shift(1, fill_value=False))
position = unit.ffill().where(held, 0).loc["2016-09-01":]
report = sim(position, trade_at_price="open", upload=False)
returns = report.creturn.pct_change().dropna()
print("日夏普:", round(returns.mean() / returns.std() * 252 ** 0.5, 2))簡化版為什麼比較高,是看到結果之後才問的問題,以下只能當探索性結果。傷害最大的是加碼:每個市場一個單位加上 2N 停損,夏普 0.71;有加碼和上限、但沒有停損,只有 0.31。即使是 0.71,也低於 QQQ 和固定持有的對照組。
不想自己寫也可以。照 AI 輔助安裝流程裝好 FinLab skill,或直接到 FinLab Studio 用白話請 AI 重跑,例如「海龜系統二只用 SPY、TLT、GLD 三檔」或「台股海龜每檔最多 2 個單位」。
回測方法
| 項目 | 做法 |
|---|---|
| 回測區間 | 美股 2016-09-01 至 2026-11-05,FinLab 美股基金價格從 2016 年 1 月開始,前幾個月用來暖機 55 日通道和 N 值。台股 2013-05-02 至 2026-11-06 |
| 標的 | 美股:事先固定的 18 檔 ETF,分六類;其中 USO 等在期間內改過期貨持有方式。台股:0050 加每月底上市普通股市值前 30 大,含後來下市的股票 |
| 訊號 | 通道、N 值和停損只用訊號日以前的價格,避免前視偏差 |
| 部位 | 每個單位每 N 承擔帳戶 1%;超過 100% 的列縮回 100%,不開槓桿、不放空;現金沒有利息 |
| 成交 | 收盤算訊號、隔天開盤成交,使用還原價。原版在盤中突破或碰到停損就成交 |
| 週轉率 | 目標權重單邊一年:美股系統一 21.8 次、系統二 15.0 次;台股 16.6 次與 10.0 次 |
| 成本 | 美股 finlab sim() 預設 0,另跑每邊 0.1%。台股用預設手續費 0.1425% 與證交稅 0.3%。未另估價差與滑價 |
| 稅 | 美股未計 |
| 樣本 | 全段都是樣本內,前後兩段只檢查穩定度,沒有做樣本外驗證 |
這個結果能說明什麼
在這段期間、這 18 檔 ETF 和台股大型股上,海龜交易法則賺得比固定持有同一批標的少,回撤更深,也遠輸 QQQ 和 0050。本文沒有涵蓋期貨、槓桿、放空或更長的歷史,那些正是趨勢追蹤研究最有力的地方。為 ETF 設計的趨勢策略,例如市場更少、加上波動目標,是另一個測試,可以看 QQQ 波動率目標策略,以及用 QQQ 突破操作槓桿 ETF 的美股突破策略。
不擇時的多資產組合,見懶人投資組合回測和風險平價回測。站上其他美股研究都收在美股量化交易策略比較,回測的基本觀念在什麼是回測。
常見問題
海龜交易法則現在還有用嗎?
在本文測的 ETF 和這十年裡沒有。美股系統二年化 6.5%、夏普 0.49,系統一 5.1%、0.44,QQQ 是 19.2%、0.89,兩套系統也都輸固定權重持有同一批 ETF。
海龜交易法則的規則是什麼?
價格突破前 20 日(系統一)或 55 日(系統二)最高價就買(本文用收盤價),跌破前 10 日或 20 日最低價、或比最後買價低 2N 就賣。每個單位每 N 承擔帳戶 1% 風險,每漲 0.5N 加一個單位,單一市場最多 4 個。
唐奇安通道是什麼?
過去固定天數內的最高價和最低價連成的兩條線。海龜在價格突破上緣時買進,跌破較短天數的下緣時賣出;本文都用收盤價判斷。
系統一和系統二哪個好?
系統二比較高,美股 0.49 對 0.44,台股 0.62 對 0.11。2022 年美股系統二賺 4.2%,系統一虧 21.9%。系統一也比較怕成本,每邊 0.1% 下年化只剩 0.6%。
海龜交易法則用在哪些市場最好?
美股 ETF 裡,能源和金屬每筆賺最多,系統二的能源交易平均每筆 4.0%;債券和貨幣 ETF 兩套系統都小虧。
海龜交易法則用在台股有用嗎?
0050 加市值前 30 大,系統二 2013 到 2026 年年化 9.6%,0050 是 18.4%。2020 年以後系統二夏普 1.03,接近 0050 的 1.13,但 2015 年虧了 34.2%,而且拿掉 2023 年後夏普只剩 0.46。
不開槓桿可以用海龜交易法則嗎?
可以,但部位大小就不再照原本的設計運作。規則在中位數的一天要求帳戶 6 到 9 倍的部位,縮回 100% 之後,每個單位只承擔約 0.1% 的風險。
可以自己重跑嗎?
可以。透過 AI 輔助安裝流程裝好 FinLab skill,下載下面的 research.py,執行 python research.py。
延伸閱讀
- 布林通道策略美股回測:S&P 500 觸下軌買進與擠壓突破,同一套驗證。
- 多空股票與趨勢追蹤回測:股票與跨資產的趨勢追蹤。
- ATR 指標與肯特納通道:N 值背後的 ATR 怎麼算、怎麼用。
下載資源
| 檔案 | 內容 |
|---|---|
| research.py | 完整研究:美股與台股兩套系統、36 組參數、前後兩段、成本重跑與各項檢查 |
| data.csv | 四個設計原設定,加上 QQQ、SPY、0050 的每日淨值 |
| metrics.json | 本文背後的統計,包含各資產類別交易、平均權重與逐年報酬 |
投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。本文所有回測均為全段樣本內結果,前後兩段未經樣本外驗證。
最後更新:2026-11|回測區間:美股 2016-09~2026-11、台股 2013-05~2026-11|資料截至 2026-11-06,重跑日 2026-11-07|基準:QQQ 含息、0050 含息|作者:FinLab 量化研究團隊(經量化研究員審閱)
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

