突破策略 Breakout 實戰:唐奇安通道+ATR 波動濾網,用 LLM 寫 Python 回測

第 15 課・共 18 課

⚠️ 本站內容僅作教育用途,不構成投資建議。投資涉及風險,作出任何投資決定前請諮詢持牌專業人士。
目錄

突破策略 Breakout 是趨勢跟蹤的經典門派:價格升穿過去一段時間的最高點就順勢進場,讓利潤跟隨趨勢跑。本課筆記整理自 Algo-trading with Saleh 的教學影片,講者 Saleh 用唐奇安通道配合他新設計的 ATR 波動濾網,在 SOL-USDT 永續合約上建構策略,再以 LLM 生成 Python 代碼於 Jesse 框架回測。先說明:標題的「805%」屬單一教學案例的回測數字,來自特定幣種組合與時段,本課重點是學習策略邏輯與回測方法,並非跟單依據。

學習重點

詳細筆記

用唐奇安通道定義「突破」

突破策略第一步是回答「甚麼叫突破」。講者選用唐奇安通道 Donchian Channel:上軌是過去 N 根 K 線的最高價,下軌是最低價,中軸是兩者平均。TradingView 預設周期為 20,策略代碼則用 30。當某根 K 線收市價升穿上軌,即確認向上突破成立。

有一個容易忽略的技術細節:當前這根 K 線若創出新高,上軌會同步被推高,「突破」便永遠差一步。所以計算通道時只取到上一根 K 線為止,不含當前 K 線——這一點在後面的代碼覆核中會看到對應寫法。策略時間框架為 1 小時圖,標的為 Binance 的 SOL-USDT 永續合約。

TradingView 上的唐奇安通道:上軌為過去 N 根 K 線最高價(截圖出自原片(Algo-trading with Saleh))

兩重過濾:大勢方向與波動率

裸突破訊號在橫行市會被假突破反覆修理,講者加了兩重過濾。

第一重是趨勢方向:200 期簡單移動平均線,但改用 4 小時框架計算。價格在 4 小時 SMA 200 之上只找做多機會,之下只找做空機會。講者明言這令策略反應滯後——好處是減少假突破干擾,壞處是會錯過不少機會,兩者是一體兩面。

第二重是講者自認的創新:把 ATR 當波動率濾網用。ATR(平均真實波幅,常用 14 期)量度每根 K 線的平均波動範圍,例如數值 2 代表價格平均每根 K 線移動 2 美元。傳統上 ATR 只用於設止損,講者卻對 ATR 序列再取 20 期均線,要求「ATR 高於其自身均線」才允許進場——即只在波動正在擴大、新趨勢可能啟動時出手。注意這個條件對多空雙方完全相同:它只問波動夠不夠,不問方向。

SOL 1 小時圖:4 小時 SMA 200(藍線)定方向,下方副圖為 ATR(截圖出自原片(Algo-trading with Saleh))

出場設計:不設固定止盈的移動止損

突破策略本質是趨勢跟蹤,講者的目標是「讓倉位跟隨趨勢越久越好」,所以不設一般意義的止盈。具體規則:開倉時初始止損設於入場價下方 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

講者在 VS Code 逐行覆核 LLM 生成的策略代碼(截圖出自原片(Algo-trading with Saleh))

還有一個部署教訓:策略用到 4 小時數據,回測面板漏設對應 data route 時 Jesse 會在幕後補救照跑,但實盤漏設會直接終止 session,上線前必須檢查路由。

回測結果與講者的講法

回測設定:Binance 永續、預設手續費、賬戶槓桿上限設為 10。講者先分年度單跑 SOL-USDT 1 小時圖(基本倉位,截至原片數據 2025 年 7 月):

講者其後把倉位乘 2(明言此舉令「每筆風險 3%」不再成立),3.5 年全期(2022 年初至 2025 年 7 月)單幣結果為 +1,217%、最大回撤 -38%、勝率 38%、盈虧比 2.18、夏普 1.66,最長連敗達 8 宗。他特別強調自己沒有跑任何參數最佳化,認為過度擬合風險不高,並提醒讀者不要照單全收,應繼續改良。

SOL 單幣 3.5 年回測權益曲線(紫)對比買入持有(黃)(截圖出自原片(Algo-trading with Saleh))

接着講者用自寫的批量回測腳本,在多幣種、多時間框架上按夏普比率排名,發現 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 內建;唐奇安通道雖非內建指標,用 iHighestiLowest 兩行即可合成;多時間框架只需指定 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 模型直接影響結果,不要以為換了平台數字就更可信。

欣利克的看法

名詞解釋

常見問題 FAQ

突破策略和趨勢跟蹤是同一回事嗎?

突破策略是趨勢跟蹤的一種進場方式:它不預測趨勢,而是等價格升穿既定阻力(如唐奇安通道上軌)才確認趨勢成立並順勢進場。特徵是勝率偏低(本課回測約四成)、靠盈虧比取勝,利潤集中於少數大趨勢單,與高勝率的均值回歸策略剛好相反。

ATR 高於其均線為何能過濾假突破?

假突破多數發生在波動收縮的橫行市:價格勉強越界但後繼無力。ATR 高於其 20 期均線代表近期波動正在擴大,市場較可能處於趨勢啟動階段,此時的突破訊號可靠性較高。不過這只是降低假訊號頻率,不能根除,回測中最長連敗 8 宗就是證明。

回測 805% 是否代表實盤也能有相近回報?

不能這樣推論。該數字來自特定四幣組合與 2022–2025 年的單一時段,幣種按歷史夏普比率挑選,倉位與風險參數亦在同一批數據上調校,且未經樣本外驗證。講者自己亦提醒不要原樣使用。回測的價值在於驗證邏輯是否自洽,而非預測未來回報。

這個策略可以搬到 MT5 用嗎?

可以,屬較易移植的一類:ATR 與 SMA 是 MQL5 內建函數,唐奇安通道用 iHighestiLowest 兩行合成,移動止損用新 K 線觸發的 PositionModify 實現。主要工作是自寫倉位計算,以及確認券商有提供相應加密貨幣差價合約。MT5 回測同樣受過度擬合與數據質素影響,換平台不會令結果更可信。

原影片

本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看:

來源:https://www.youtube.com/watch?v=ES83m_2-xrg

🏦 ZA Bank 開戶優惠

本站所有內容免費提供。多使用網站的推薦碼,就是對我們繼續製作優質內容的最大鼓勵和支持 🙏

去 ZA Bank 開戶,享價值 HKD 2,000 迎新獎賞,仲有機會享 USD 30 指定美股兌換券!

  • 💛 全線上開戶,無需前往分行
  • 💛 無最低存款要求,零賬戶管理費
  • 💛 24x7 銀行服務

專屬邀請碼:P20923

立即開戶 → (聯盟連結)