突破策略 Breakout 實戰:唐奇安通道+ATR 波動濾網,用 LLM 寫 Python 回測
第 15 課・共 18 課
目錄
突破策略 Breakout 是趨勢跟蹤的經典門派:價格升穿過去一段時間的最高點就順勢進場,讓利潤跟隨趨勢跑。本課筆記整理自 Algo-trading with Saleh 的教學影片,講者 Saleh 用唐奇安通道配合他新設計的 ATR 波動濾網,在 SOL-USDT 永續合約上建構策略,再以 LLM 生成 Python 代碼於 Jesse 框架回測。先說明:標題的「805%」屬單一教學案例的回測數字,來自特定幣種組合與時段,本課重點是學習策略邏輯與回測方法,並非跟單依據。
學習重點
- 突破的定義要嚴謹:唐奇安通道上軌是「過去 N 根 K 線的最高價」,計算時必須剔除當前未收市的 K 線,否則通道會被當前價格頂住而失真。
- 兩重過濾假突破:4 小時 SMA 200 定方向(線上只做多、線下只做空),ATR 高於其 20 期均線確認波動正在擴大,兩者同時滿足才進場。
- 出場比進場重要:不設固定止盈,初始止損為 5 倍 ATR,其後每根 K 線用通道下軌上移止損,讓倉位跑到趨勢回頭為止。
- LLM 生成代碼要逐行覆核:講者用 JesseGPT 生成策略後親自檢查每一個屬性與函數,修正語法偏好並確認邏輯無誤才回測。
- 805% 的構成:四幣組合、3.5 年複利、每筆風險 2% 的回測結果;同一策略中途版本曾錄得 +8,564% 但最大回撤 -68%,數字永遠要連同回撤一起讀。
詳細筆記
用唐奇安通道定義「突破」
突破策略第一步是回答「甚麼叫突破」。講者選用唐奇安通道 Donchian Channel:上軌是過去 N 根 K 線的最高價,下軌是最低價,中軸是兩者平均。TradingView 預設周期為 20,策略代碼則用 30。當某根 K 線收市價升穿上軌,即確認向上突破成立。
有一個容易忽略的技術細節:當前這根 K 線若創出新高,上軌會同步被推高,「突破」便永遠差一步。所以計算通道時只取到上一根 K 線為止,不含當前 K 線——這一點在後面的代碼覆核中會看到對應寫法。策略時間框架為 1 小時圖,標的為 Binance 的 SOL-USDT 永續合約。

兩重過濾:大勢方向與波動率
裸突破訊號在橫行市會被假突破反覆修理,講者加了兩重過濾。
第一重是趨勢方向:200 期簡單移動平均線,但改用 4 小時框架計算。價格在 4 小時 SMA 200 之上只找做多機會,之下只找做空機會。講者明言這令策略反應滯後——好處是減少假突破干擾,壞處是會錯過不少機會,兩者是一體兩面。
第二重是講者自認的創新:把 ATR 當波動率濾網用。ATR(平均真實波幅,常用 14 期)量度每根 K 線的平均波動範圍,例如數值 2 代表價格平均每根 K 線移動 2 美元。傳統上 ATR 只用於設止損,講者卻對 ATR 序列再取 20 期均線,要求「ATR 高於其自身均線」才允許進場——即只在波動正在擴大、新趨勢可能啟動時出手。注意這個條件對多空雙方完全相同:它只問波動夠不夠,不問方向。

出場設計:不設固定止盈的移動止損
突破策略本質是趨勢跟蹤,講者的目標是「讓倉位跟隨趨勢越久越好」,所以不設一般意義的止盈。具體規則:開倉時初始止損設於入場價下方 5 倍 ATR(淡倉相反),止盈設於 10 倍 ATR——距離刻意拉得很遠,多數情況不會觸及,純粹作安全網與方便框架計算。由第二根 K 線開始改用移動止損 Trailing Stop:好倉每根新 K 線把止損上移「現有止損與通道下軌的較高者」,淡倉則取「現有止損與通道上軌的較低者」。止損只進不退,直至價格回頭觸軌離場。絕大部分交易都靠這條移動止損出場。
Python 實現:LLM 生成+逐行覆核
講者把進出場規則以自然語言寫成指令,交給他自家的 JesseGPT(可自行託管、自備 API key 的版本)生成 Jesse 框架代碼。原定的 GPT-5 模型因 API 問題報錯,改用 GPT-5 mini 完成,生成策略命名為 DonchianATRTrend。指令內容包括:唐奇安通道 30 期、ATR 及其 20 期均線、4 小時 SMA 200、多空進場條件、每筆風險為賬戶 3%、5 倍 ATR 止損與 10 倍 ATR 止盈、以通道移動止損。
值得學習的是覆核環節,幾個關鍵屬性(摘錄自原片教學):
@property
def atr_sma(self):
atr_seq = ta.atr(self.candles, sequential=True)
return ta.sma(atr_seq, period=20)
@property
def sma_4h(self):
c = self.get_candles(self.exchange, self.symbol, '4h')
return ta.sma(c, 200)
sequential=True 令 ATR 回傳整條序列而非單一數值,才能再取均線;get_candles 指定 4 小時框架取得大周期數據。進場條件則是三個條件取交集:
def should_long(self) -> bool:
return (self.price > self.donchian.upperband
and self.price > self.sma_4h
and self.atr > self.atr_sma)
倉位計算用 Jesse 內建的 risk_to_qty:傳入可用保證金、風險百分比(3%)、入場價與止損價,自動反推數量,並一併傳入交易所費率。移動止損在 update_position 中實現,好倉取現有止損與通道下軌的較高者(摘錄自原片教學):
def update_position(self):
if self.is_long:
new_stop = max(self.average_stop_loss, self.donchian.lowerband)
self.stop_loss = self.position.qty, new_stop

還有一個部署教訓:策略用到 4 小時數據,回測面板漏設對應 data route 時 Jesse 會在幕後補救照跑,但實盤漏設會直接終止 session,上線前必須檢查路由。
回測結果與講者的講法
回測設定:Binance 永續、預設手續費、賬戶槓桿上限設為 10。講者先分年度單跑 SOL-USDT 1 小時圖(基本倉位,截至原片數據 2025 年 7 月):
- 2022 年(熊市):96 宗交易,+53%,最大回撤約 -15%,勝率 40%,夏普 1.78。
- 2023 年:+87%,回撤 -20%,勝率 39%,夏普 2.31。
- 2024 年:+16%,回撤 -10%,勝率 36%,夏普 0.72——跑輸持有 SOL 本身。
- 2025 年上半年:45 宗交易,+25%,回撤 -6%,勝率 40%,平均盈虧比 2.3,夏普 2,Calmar 近 9;平均持倉 42 小時,最長連敗 4 宗。
講者其後把倉位乘 2(明言此舉令「每筆風險 3%」不再成立),3.5 年全期(2022 年初至 2025 年 7 月)單幣結果為 +1,217%、最大回撤 -38%、勝率 38%、盈虧比 2.18、夏普 1.66,最長連敗達 8 宗。他特別強調自己沒有跑任何參數最佳化,認為過度擬合風險不高,並提醒讀者不要照單全收,應繼續改良。

接着講者用自寫的批量回測腳本,在多幣種、多時間框架上按夏普比率排名,發現 SOL 1 小時最佳、SOL 30 分鐘次之,DOT 與 ETH 的 2 小時圖夏普亦高於 1。於是組成四幣組合(SOL 1h+DOT 2h+ETH 2h+ADA 2h):放大倉位版本錄得 +8,564%,但最大回撤 -68%,講者直言無法接受;把每筆風險由 3% 降至 2%、移除倉位倍數後,最終版本為 +805%、回撤約 -30%、勝率 41%、夏普 1.76——這就是標題「805%」的出處。他的解釋是:回撤一旦過深,權益極難收復,寧願犧牲回報換取可承受的回撤;多幣種能攤薄回撤期的長度,更進一步是同時運行多套策略互相補位,這也是他實際的做法。
🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:
ZA Bank 邀請碼 P20923
—— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。
立即開戶 →
(聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)
MT5 可行性速評
| 項目 | 評估 |
|---|---|
| 邏輯可移植性 | 全部元件均可實現:ATR(iATR)、SMA(iMA)為 MQL5 內建;唐奇安通道雖非內建指標,用 iHighest/iLowest 兩行即可合成;多時間框架只需指定 PERIOD_H4。唯 Jesse 的 risk_to_qty 倉位函數要自己寫(按止損距離與風險百分比反推手數)。 |
| 平台限制 | 原策略跑加密貨幣永續合約、24/7 交易;MT5 端視乎券商是否提供相應加密貨幣差價合約,點差與隔夜費結構不同,手續費假設不能照搬。多空雙向在差價合約上無障礙,移動止損可用每根新 K 線 PositionModify 實現。 |
| 評級 | ✅ 易於移植——所有指標均有內建或兩行可合成,進出場為市價單加止損改單,屬 MQL5 基本功;主要工作在倉位計算與多品種擴展(多幣組合需多品種 EA,回測可信度打折)。 |
| MQL5 寫法提示 | 見下方示意。 |
int hATR = iATR(_Symbol, PERIOD_H1, 14);
int hSMA = iMA(_Symbol, PERIOD_H4, 200, 0, MODE_SMA, PRICE_CLOSE);
// 唐奇安上軌 = 過去 30 根最高價(shift 由 1 起,剔除當前 K 線)
int hi = iHighest(_Symbol, PERIOD_H1, MODE_HIGH, 30, 1);
double upper = iHigh(_Symbol, PERIOD_H1, hi);
// 移動止損:每根新 K 線取 max(現有止損, 下軌) 後 PositionModify
注意:MT5 回測同樣會過度擬合,tick 數據質素與 spread 模型直接影響結果,不要以為換了平台數字就更可信。
欣利克的看法
- 先拆「805%」的構成。 這個數字來自四隻加密貨幣永續合約的組合、2022 年初至 2025 年 7 月的單一時段、每筆風險 2% 的複利滾存,賬戶層面更設有 10 倍槓桿上限。同一策略放大倉位時是 +8,564% 配 -68% 回撤,縮小倉位後變成 +805% 配 -30% 回撤——回報與回撤永遠是同一枚硬幣,單看任何一邊都會誤判。
- 假突破不會被濾網消滅。 4 小時 SMA 200 與 ATR 雙重過濾只能減少假訊號,代價是進場滯後、錯過初期升幅。回測勝率僅約四成、最長連敗 8 宗,正是突破策略的常態:大部分利潤來自少數大趨勢單,其餘時間在不斷止小蝕。心理上能否捱過連敗期,比參數設定更決定成敗。
- 「無跑最佳化」不等於無擬合。 講者強調沒有做參數最佳化,這點值得肯定;但他用批量腳本按夏普比率排名、挑選表現最好的幣種與時間框架留下,這本身已是對歷史數據的選擇,屬較溫和的數據採礦。30、20、200、5 倍、10 倍這些參數亦全在同一批數據上定案,原片未見樣本外或前移驗證,分年度檢視已是片中最接近的做法。
- LLM 寫策略的正確姿勢。 講者沒有把生成的代碼直接拿去回測,而是逐行覆核:檢查通道是否剔除當前 K 線、ATR 序列參數、多空條件是否鏡像(波動濾網不應反向),還修正了語法風格。模型會寫錯、會寫得不合框架慣例,覆核者的功力才是質量保證——完全不懂代碼的人用同樣流程,風險在於看不出錯處。
- 時效提醒。 文中所有績效數字截至原片發佈、數據止於 2025 年 7 月,距今已一段時間;加密市場的波動結構變化快,幣種強弱會輪換,當時排名靠前的組合今天未必仍然有效。
名詞解釋
- 突破策略 Breakout:價格升穿阻力或跌穿支持時順勢進場的策略類型,勝率低、盈虧比高。
- 唐奇安通道 Donchian Channel:由過去 N 根 K 線最高價與最低價構成的通道,本課的突破定義與移動止損基準。
- 平均真實波幅 ATR:每根 K 線平均波動範圍,不含方向;本課兼用作波動率濾網與止損距離單位。
- 移動止損 Trailing Stop:隨價格有利方向單向移動的止損,讓趨勢單跑到回頭為止。
- 倉位管理 Position Sizing:按每筆可承受風險反推交易數量,本課用
risk_to_qty實現。 - 最大回撤 Drawdown:權益由高位回落的最大幅度,本課決定倉位大小的核心約束。
- 夏普比率 Sharpe Ratio:每單位波動風險換取的回報,講者用作幣種與時框的排名依據。
- 勝率 Win Rate:獲利交易佔總交易的比例,趨勢策略通常僅三至四成。
- 過度擬合 Overfitting:策略過度遷就歷史數據,回測亮麗卻無法在未來複製。
- 樣本外測試 Out-of-Sample:用從未參與調參的數據驗證策略,檢驗擬合程度的標準做法。
- 回測 Backtesting:以歷史數據檢驗交易規則的過程。
- MT5 MetaTrader 5:MetaQuotes 開發的多資產交易平台,支援 EA 自動交易與策略回測。
- MQL5 語言:MT5 平台的程式語言,語法接近 C++,用於編寫 EA 與自訂指標。
常見問題 FAQ
突破策略和趨勢跟蹤是同一回事嗎?
突破策略是趨勢跟蹤的一種進場方式:它不預測趨勢,而是等價格升穿既定阻力(如唐奇安通道上軌)才確認趨勢成立並順勢進場。特徵是勝率偏低(本課回測約四成)、靠盈虧比取勝,利潤集中於少數大趨勢單,與高勝率的均值回歸策略剛好相反。
ATR 高於其均線為何能過濾假突破?
假突破多數發生在波動收縮的橫行市:價格勉強越界但後繼無力。ATR 高於其 20 期均線代表近期波動正在擴大,市場較可能處於趨勢啟動階段,此時的突破訊號可靠性較高。不過這只是降低假訊號頻率,不能根除,回測中最長連敗 8 宗就是證明。
回測 805% 是否代表實盤也能有相近回報?
不能這樣推論。該數字來自特定四幣組合與 2022–2025 年的單一時段,幣種按歷史夏普比率挑選,倉位與風險參數亦在同一批數據上調校,且未經樣本外驗證。講者自己亦提醒不要原樣使用。回測的價值在於驗證邏輯是否自洽,而非預測未來回報。
這個策略可以搬到 MT5 用嗎?
可以,屬較易移植的一類:ATR 與 SMA 是 MQL5 內建函數,唐奇安通道用 iHighest/iLowest 兩行合成,移動止損用新 K 線觸發的 PositionModify 實現。主要工作是自寫倉位計算,以及確認券商有提供相應加密貨幣差價合約。MT5 回測同樣受過度擬合與數據質素影響,換平台不會令結果更可信。
原影片
本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看: