三重均線 TEMA 趨勢策略:GPT 生成 Python 代碼,回測 4983% 拆解|Quant Strategies Ep 13 筆記

第 13 課・共 18 課

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

三重均線策略聽來簡單,配對合適的過濾器後卻是量化入門的好教材。本篇整理 Algo-trading with Saleh 的教學:以三重指數移動平均線 TEMA 的快慢線判斷趨勢,加 ADX 與 CMO 雙重過濾,在回調位掛限價單進場,再由 GPT 把規則轉成 Python 代碼在 Jesse 框架回測。先說明:標題的「4983%」屬單一教學案例的回測數字,也是本系列中最浮誇的數字之一——講者自己在片末也花了大量篇幅解釋這個數字為何不能當真,本筆記重點是學習策略構造與回測解讀方法。

學習重點

詳細筆記

策略核心:TEMA 與 EMA 的分別

策略的主指標是三重指數移動平均線 TEMA(Triple Exponential Moving Average)。講者先在 TradingView 示範它與傳統 指數移動平均線 EMA 的分別:同樣用 10 周期,當價格開始上升時,TEMA 線的爬升明顯較快;價格轉跌時,TEMA 同樣更快向下。移動平均線的先天缺陷是滯後——價格已經走了一段,均線才慢慢跟上;TEMA 透過三次 EMA 運算的組合(3×EMA1 − 3×EMA2 + EMA3)抵銷部分延遲,反應顯著加快。這就是講者棄 EMA 取 TEMA 的原因:趨勢策略最怕進場太遲,滯後越少,能捕捉的趨勢段落越多。

趨勢判斷用快慢線交叉:30 分鐘圖上 TEMA(10) 在 TEMA(80) 之上視為升勢,反之為跌勢。由於交易時間框架是 30 分鐘,講者把此策略定位為即市(day trading)策略。

進場條件:四重確認

光有快慢線交叉,在橫行市會被反覆打臉,所以講者疊加三層過濾:

  1. 長線趨勢確認:不只看 30 分鐘的短線方向,還要看大周期。做法是在 4 小時圖用同一指標,周期改為 20 與 70——4 小時 TEMA(20) 在 TEMA(70) 之上,長線才算升勢。短線與長線方向必須一致。
  2. 波動過濾平均趨向指數 ADX 高於 40 才准開倉。ADX 不分方向、只量度趨勢強度,數值不足代表市況波動不夠,均線交叉多是雜訊。
  3. 動能震盪器錢德動量擺動指標 CMO,性質類似 RSI 但對價格變化更敏感。閾值設在 +40 與 −40:CMO 高於 +40 才找好倉,低於 −40 才找淡倉。講者解釋選 CMO 不選 RSI 的理由,與選 TEMA 不選 EMA 如出一轍:傳統震盪指標反應偏慢,即市策略需要更靈敏的動能確認。整個策略的選材邏輯其實很一致——每個指標都挑「反應快」的版本,再用多重條件互相制衡靈敏帶來的雜訊。

以好倉為例,完整進場條件:30 分鐘 TEMA(10) > TEMA(80)、4 小時 TEMA(20) > TEMA(70)、ADX > 40、CMO > +40,四者同時成立。淡倉全部反向(兩組趨勢向下、ADX 仍須 > 40、CMO < −40)。

TradingView 圖表:30 分鐘圖的 TEMA(10/80)、ADX 與 CMO 指標配置(截圖出自原片 Algo-trading with Saleh)

落單與風控:回調位限價單+ATR 止損止盈

條件齊全後不即市追入,而是掛限價單 Limit Order 等回調 Pullback:好倉掛在現價減一倍 平均真實波幅 ATR 的位置,淡倉反向掛在現價加一倍 ATR。講者的想法是趨勢確認後價格多半仍有小幅回吐,掛低一點能換取更佳進場價。

這裡的盈虧結構值得停下來想清楚:止損 4 倍 ATR、止盈 3 倍 ATR,贏一宗不夠輸一宗,所以策略必須維持高勝率才有正期望值。這與典型趨勢跟蹤「贏大輸小、勝率偏低」的設計剛好相反,也是講者後來在回測解讀中說它「更像均值回歸」的原因。四重過濾的用意正是保勝率——寧可錯過機會,也不在條件不齊時勉強進場。

限價單有一個實作細節:若當根 K 線內掛單未成交,下一根 K 線的 ATR 等數值已變,舊掛單價失去意義。做法是每根新 K 線取消舊單、按最新條件重掛(Jesse 中以 should_cancel_entry 實現)。這一點與均值回歸策略|第 14 課按下軌重掛限價單的處理如出一轍。

Python 實現:規則餵給 GPT 生成代碼

講者不親手寫碼,而是把整套進出場規則以自然語言寫成指令,交給他自家平台的 JesseGPT(選用 Claude 3.7 Sonnet 模型)生成 Jesse 框架的策略代碼,命名為 TemaTrendFollowing。指令內容就是上述規則的直述:短線 TEMA 10/80、長線 4 小時 TEMA 20/70、ADX 須高於 40、CMO 好倉須高於 +40、淡倉全部反向、每筆風險 3%、限價單掛一倍 ATR 之外、止損 4 倍 ATR、止盈 3 倍 ATR。

生成的進場判斷把四重確認寫成布林運算(摘錄自原片教學):

def should_long(self) -> bool:
    return (
        self.short_term_trend == 1 and
        self.long_term_trend == 1 and
        self.adx > 40 and
        self.cmo > 40
    )

落單邏輯:以現價減一倍 ATR 為限價、4 倍 ATR 為止損距離,再用 Jesse 的 risk_to_qty 工具函數反推倉位,確保觸及止損時虧損不超過總資金 3%(摘錄自原片教學):

def go_long(self):
    entry = self.price - self.atr
    stop = entry - 4 * self.atr
    qty = utils.risk_to_qty(self.available_margin, 3,
                            entry, stop, fee_rate=self.fee_rate)
    self.buy = qty, entry

Jesse 策略代碼:should_long 與 should_short 進場條件(截圖出自原片 Algo-trading with Saleh)

開倉後 Jesse 自動掛出止損(入場價減 4 倍 ATR)與止盈(入場價加 3 倍 ATR),數量與持倉一致;淡倉全部反向。講者逐段核對後認為代碼正確,今次沒有像第 14 課那樣需要人手修 bug——他歸功於指令寫得具體,進出場規則逐點列明,模型便沒有自由發揮的空間。

之後他做了一個值得學的調試動作:叫模型加插 after 函數,把 TEMA、ADX、CMO 的數值疊印在回測圖表上。重跑回測後,點選任何一宗交易,都能即時看到進場當刻的指標狀態——例如某宗好倉進場時 ADX 為 50、CMO 高於 40,確實符合條件;淡倉則核對 CMO 低於 −40。逐宗目測核對雖然花時間,卻是驗證「代碼做的」與「你想的」是否一致的直接方法,比只看最終數字可靠得多。順帶一提,模型順手加的 watch list 功能只對實盤有用,回測無關,講者直接刪除。

回測結果與講者的講法

回測設定:BTC-USDT 永續合約(Binance)、30 分鐘圖、4 小時圖作額外數據路由,數據由 2021 年初至 2025 年 6 月。分階段結果如下(截至原片發佈):

以 2021 年為例看盈虧結構:贏輸比(平均盈利對平均虧損)只有 0.65——正因止盈 3 倍 ATR、止損 4 倍 ATR——但勝率高達 71% 補足了賠率不足。講者形容它更像均值回歸而非典型趨勢跟蹤,平均持倉 44 小時。各年的手續費亦不可忽視:全期合共約 63,638 美元,幾乎是最終淨利的八分之一,高頻進出的策略對費率極敏感。

全期 4.42 年回測:淨盈利 4983.69%、290 宗交易(截圖出自原片 Algo-trading with Saleh)

值得留意的是講者片末的分析,他直指很多人只看最終 P&L 數字就以為策略時時賺錢,「事實並非如此」。他逐一指着權益曲線上的凹陷:其中一段回撤期長達八九個月——若在該段起點開始實盤,之後兩三個月都在虧損;另一段權益橫行了七八個月。他的原話大意是:實盤經歷這些時段你不會開心,大多數人根本撐不到後面的大升浪就會放棄。他由此帶出兩個結論:第一,不要把全部資金押在單一策略上,應該建立一籃子策略,讓不同策略的回撤期互相抵銷,甚至可以同時跑十個;第二,評估策略不能只看最終 P&L,至少要同時讀夏普比率或卡瑪比率等風險調整指標。

權益曲線上的長期回撤與橫行段落(截圖出自原片 Algo-trading with Saleh)

🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:

ZA Bank 邀請碼 P20923 —— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。 立即開戶 → (聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)

MT5 可行性速評

int hE1 = iMA(_Symbol, PERIOD_M30, 10, 0, MODE_EMA, PRICE_CLOSE);
int hE2 = iMA(_Symbol, PERIOD_M30, 10, 0, MODE_EMA, hE1);   // EMA of EMA
int hE3 = iMA(_Symbol, PERIOD_M30, 10, 0, MODE_EMA, hE2);
// TEMA10 = 3*E1 - 3*E2 + E3;同法造 TEMA80 與 H4 的 20/70
int hADX = iADX(_Symbol, PERIOD_M30, 14);
// 條件成立 → 現價 − 1×ATR 掛 Buy Limit,SL = 入場價 − 4×ATR,TP = 入場價 + 3×ATR

注意:MT5 回測同樣會過度擬合,參數在歷史數據上調得越貼,樣本外表現越無保證,不要以為換了平台數字就更可信。

欣利克的看法

名詞解釋

常見問題 FAQ

TEMA 與 EMA 有甚麼分別?

TEMA 對價格做三次 EMA 運算再以「3×EMA1 − 3×EMA2 + EMA3」組合,抵銷平滑造成的滯後。同周期下 TEMA 轉向更快、更貼近價格,趨勢策略能較早進場;代價是對短期波動更敏感,橫行市的假交叉也更多。兩者沒有絕對優劣,取決於策略要靈敏還是要平滑。

為甚麼進場要用限價單而不是市價單?

講者的思路是「順勢但不追價」:趨勢條件成立後,價格多半仍有小幅回吐,把限價單掛在現價減一倍 ATR 的位置等回調成交,能換取較佳進場價與較近的止損距離。代價是價格若不回頭便錯過整段行情,且每根新 K 線要按最新 ATR 取消舊單重掛,實作較繁複。

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

不能這樣推論。該數字來自單一加密貨幣、2021–2025 年的單一時段,且是倉位人手放大三倍、槓桿 30 倍後的複利結果;原倉位設定下 2023 年更跑輸大市。參數在同一批數據上調校,未經樣本外驗證,中途又曾有長達八九個月的回撤期。講者自己也強調不能只看最終 P&L,要同時讀夏普比率等風險調整指標。

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

可以。TEMA 可用三層 iMA(MODE_EMA)自行組合,ADX、ATR 為內建函數,CMO 約十行代碼可手算,多時間框架與限價單管理均屬常規 EA 寫法,評級為可直接移植。但要注意 MT5 回測同樣會過度擬合,且加密貨幣差價合約的點差與槓桿因券商而異,原片的成本假設不能直接搬用。

原影片

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

來源:https://www.youtube.com/watch?v=b6ClJKhEQcE

🏦 ZA Bank 開戶優惠

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

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

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

專屬邀請碼:P20923

立即開戶 → (聯盟連結)