Trend Wave Rider 剝頭皮策略:DMI+CCI 三重過濾、Python 實現與 116% 回測拆解|Quant Strategies Ep 10 筆記

第 10 課・共 18 課

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

Algo-trading with Saleh 的 Saleh 在片中用 Python(Jesse 框架)即場編寫一個名為 Trend Wave Rider 的剝頭皮策略,標題上的「116%」是他特定設定下的回測教學案例數字,並非實盤成績。策略構建過程本身很有示範價值:由單一指標開始,逐步加入過濾條件、調整倉位,再逐年檢驗——是一套完整的策略開發流程縮影。

學習重點

詳細筆記

核心邏輯:DMI 定方向、ADX 量強度

Saleh 先在 TradingView 上講解主指標——動向指數 Directional Movement Index。指標包含三條線:DI+(藍)、DI−(橙)與 ADX(紅)。規則很簡單:藍線在橙線之上,視為上升趨勢;反之則是下跌趨勢或至少是橫行市。

但單看兩線交叉並不足夠。Saleh 特意示範一段 DI− 雖在上方、ADX 卻極低的時段:ADX 只量度趨勢強度、不分方向,數值低代表市場根本沒有像樣的趨勢,此時的方向訊號不值得跟。因此策略要求「方向+強度」同時成立:DI+ 高於 DI− ADX 高於閾值,才算有效升勢;DI− 高於 DI+ ADX 達標,才算有效跌勢。圖表講解時他以 30 為閾值示例,寫入程式時則用了 50——這類講解與實作之間的出入,正是看片學策略時需要自己核對的細節。

TradingView 上的 DMI 與 ADX 指標

截圖出自原片(Algo-trading with Saleh):DMI 三線——DI+(藍)、DI−(橙)與 ADX(紅),方向與強度要同時成立才算有效趨勢。

寫成 Jesse 的策略屬性(property)後,整個趨勢判斷只有數行(摘錄自原片教學):

@property
def trend(self):
    di = ta.di(self.candles)
    adx = ta.adx(self.candles)
    if di.plus > di.minus and adx > 50:
        return 1
    elif di.plus < di.minus and adx > 50:
        return -1
    return 0

trend 回傳 1、-1 或 0,should_longshould_short 分別檢查它等於 1 或 -1 即可。這種「指標屬性回傳 -1/0/1、入場函數只做組合」的寫法,是 Jesse 策略的典型結構,方便日後疊加條件——後文加入 CCI 與均線時,正是沿用同一模式,每個過濾器各佔一個屬性,入場規則只負責用 and 串連,程式始終保持可讀。另外,Saleh 提到 VS Code 比 Jesse 儀表板內建編輯器好用,初學者亦可留意這個工作環境選擇。

倉位與出場:ATR 止蝕+固定風險百分比

入場用市價單(market order),講者明言是為了從簡。倉位大小用 Jesse 內建的 utils.risk_to_qty 計算:以可用保證金、每單風險百分比(他取 5%)、入場價與止蝕價反推數量;止蝕設於入場價減 3.5 倍 ATR(短倉相反,加 3.5 倍 ATR),止盈設於另一側、同樣以 3.5 倍 ATR 為距離(摘錄自原片教學):

def go_long(self):
    entry = self.price            # 市價單
    stop = self.price - self.atr * 3.5
    qty = utils.risk_to_qty(self.available_margin, 5,
                            entry, stop, fee_rate=self.fee_rate)
    self.buy = qty, entry

由於用市價單開倉,不需要 should_cancel 函數處理未成交掛單;若改用限價單,便要靠它定期取消重掛。Saleh 亦順帶示範了「一個倉位拆多張單進場」的語法,但本策略從簡,只用一張市價單。止蝕與止盈單在 on_open_position 內才正式提交,數量等於當前倉位;短倉方向完全鏡像——止蝕改為加 3.5 倍 ATR、止盈改為減,self.buy 改為 self.sell。值得留意的是止蝕止盈同為 3.5 倍 ATR,即盈虧比約 1:1——策略要靠勝率與過濾質素取勝,而非「贏大輸小」。倉位計算中亦傳入了當前費率(fee rate),令風險百分比已粗略計及手續費,這個小動作在剝頭皮策略中其實相當重要。

第一輪回測:三個時間框架對照

首輪回測在 Binance 永續合約、BTC-USDT、2024 年全年進行,同時跑 15 分鐘、30 分鐘與 1 小時三個時間框架,用 Jesse 的 benchmark 頁並排比較。他開啟了 fast mode 加快運算,benchmark 頁會把各次回測的淨盈利、最大回撤、夏普比率與卡瑪比率(Calmar ratio)列成對照表,一眼看出差異。結果:1 小時圖夏普比率 0.9、淨盈利 21.8%,表面最好;30 分鐘圖夏普 0.6;15 分鐘圖則錄得負數。這裏示範了一個重要習慣——同一策略在多個時間框架上跑,而不是只挑一個。若只跑 1 小時圖,很容易誤以為策略已經完成。

過濾一:CCI 超買超賣

為改善成績,Saleh 加入第一重過濾:順勢指標 CCI(Commodity Channel Index)。用法與 RSI 類似,分界設於 ±100:CCI 低於 -100 視為超賣,高於 +100 視為超買。策略的方向是「順大勢、趁回調」——趨勢向上時,等 CCI 跌入超賣區才開長倉;趨勢向下時,等 CCI 衝上超買區才開短倉。程式上新增 oscillator 屬性:CCI 低於 -100 回傳 1、高於 +100 回傳 -1,然後在入場條件加上 and self.oscillator == 1。圖表上的黃線是 CCI 的移動平均,講者明言策略不會用到,只有藍線(CCI 本身)與 ±100 分界重要。重跑回測,結果略有改善——他用的判斷方法很直接:記住之前的夏普比率,改動後再跑,數字升就保留、跌就檢討。這種「一次只改一個變數、以同一組指標驗證」的節奏,是業餘策略開發者最值得學的習慣。

過濾二:SMA 25/50 雙均線

第二重過濾是兩條簡單移動平均線:快線 25 期、慢線 50 期。快線在慢線之上回傳 1(升勢),反之回傳 -1。Saleh 特別補一句:移動平均線雖然簡單,卻非常有效。加入 ma_trend 條件後,最終的入場規則變成三重確認(摘錄自原片教學):

def should_long(self) -> bool:
    return (self.trend == 1        # DMI 方向 + ADX 強度
            and self.oscillator == 1   # CCI < -100(超賣回調)
            and self.ma_trend == 1)    # SMA25 > SMA50

最終入場條件的程式碼

截圖出自原片(Algo-trading with Saleh):should_long 最終由三重條件組成——趨勢、CCI 回調、均線方向。

重跑後 15 分鐘圖轉虧為盈(+21.8%)、30 分鐘圖升至 +50.4%、夏普 1.5,但原本最好的 1 小時圖反而轉虧(-19.3%)。這個現象本身值得記住:過濾條件不是「越多越好」,同一改動在不同時間框架上的效果可以完全相反。

倉位倍數與槓桿:116% 的由來

三重過濾後,各時間框架的最大回撤都偏低(約 -14% 至 -20%)。Saleh 的做法是:既然回撤細,就把倉位數量直接乘大——先乘 3,見回撤仍未觸及他心目中的上限 -30%,再乘 5;同時在設定中把槓桿上限調高至 6 倍,預留倉位空間。他特別解釋:設定 6 倍不等於時刻用盡 6 倍,正如在交易所設定槓桿上限只是預留額度。標題的「116%」正是這種「倉位乘大五倍」後的回測讀數——它來自槓桿化的倉位調整,不是策略訊號本身產生了 116% 的邊際。若策略本身是虧損的,同一操作會把虧損同樣放大五倍,Saleh 自己亦點明了這一點。

加入過濾後的三時間框架對照

截圖出自原片(Algo-trading with Saleh):2024 年回測對照——15 分鐘 +21.8%、30 分鐘 +50.4%(夏普 1.5)、1 小時轉虧 -19.3%。

時間框架方面,30 分鐘圖數字最亮麗,但 Saleh 最終選用 15 分鐘圖,理由是平均持倉時間顯著較短,「心理上較易承受」。這是策略選擇中少見的坦白:數字最好不等於最適合執行。

分年檢驗與付費版:講者自己談過度擬合

Saleh 之後把 2021、2022、2023、2024 及 2025 年首季分年回測。結果:2021 年大幅跑贏市場;2022 年在熊市中仍然向好;2023 年只與市場打和;2024 年不錯;2025 年首季輕微虧損——他補充指 2025 年初受關稅消息影響,他所知的大部分策略(包括人手交易)同期都表現欠佳。

他其後展示一個「按最新市況優化」的付費版本 V2:在 2024 年美國大選前後的橫行市中仍能獲利,2022 年的整固段亦表現較佳,整體數字明顯較好。但難得的是他同時講明代價——市況不斷變化,按最新市況調參數看似合理,卻會增加策略過度擬合、未來失效的風險。他的結論是兩個版本可同時運行:原版在趨勢市較好、V2 在橫行市較好,兩者相關性低。他進一步解釋組合邏輯:若兩個策略都只在升市賺錢、橫行市齊齊虧損,橫行一到便雙倍受傷;反之,一個擅長趨勢、一個擅長整固,虧損時段便可互相抵銷,整個組合才有機會在不同市況下都站得住——這就是「策略組合」而非「單一神策略」的思路。片末他亦重申,影片目的是示範如何寫策略,不是提供買賣訊號。(註:付費版策略與交易所註冊連結屬講者的商業推廣,本筆記不轉載。)

2024 年回測淨值曲線

截圖出自原片(Algo-trading with Saleh):2024 年約 12 個月的淨值曲線(紫)對照 BTC-USDT(黃),共 67 宗已平倉交易。

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

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

MT5 可行性速評

項目評估
邏輯可移植性高。DMI/ADX 用 iADX(內含 DI+、DI− 緩衝)、CCI 用 iCCI、SMA 用 iMA,全部為 MT5 內建指標;市價單進場、固定 ATR 距離止蝕止盈,屬最標準的 EA 結構。
平台限制MT5 淨額帳戶下同方向只會有一個合併倉位,不影響本策略(每次只持一倉);但加密貨幣永續合約並非一般 MT5 券商的標的,移植到外匯或商品後,ATR 倍數與 ADX 閾值須重新驗證,不能照搬。
評級✅ 純技術角度可完整移植,是練習 MQL5 的好題材;但「可移植」只代表程式能跑,策略本身在未見數據上的表現是另一回事。
MQL5 寫法提示見下
int adx_h = iADX(_Symbol, PERIOD_CURRENT, 14);
double diplus[], diminus[], adx[];
CopyBuffer(adx_h, PLUS_DI, 0, 1, diplus);
CopyBuffer(adx_h, MINUS_DI, 0, 1, diminus);
CopyBuffer(adx_h, MAIN_LINE, 0, 1, adx);
// 升勢條件:diplus[0] > diminus[0] && adx[0] > 50
// 再以 iCCI、iMA 檢查回調與均線方向,用 ATR×3.5 設 SL/TP

注意:即使移植成功,MT5 策略測試器跑出的回測同樣會過度擬合——ADX 閾值、ATR 倍數、均線周期全是可調參數,換平台不解決方法論問題,樣本外驗證與分年檢驗一項都不能少。

欣利克的看法

名詞解釋

常見問題 FAQ

Trend Wave Rider 的核心邏輯是甚麼?

一句話概括:「強趨勢中的回調入場」。先用 DMI 的 DI+/DI− 判斷趨勢方向,再用 ADX 確認趨勢有足夠強度,然後等 CCI 進入超買或超賣區(即順勢中的逆向回調)才入場,最後以 SMA 25/50 的排列作最終確認。四個條件同時成立才開倉,止蝕止盈各設於入場價加減 3.5 倍 ATR。

116% 的回測報酬可以當真嗎?

數字本身屬回測教學案例,但它的構成要拆開看:講者先把每單風險定為保證金的 5%,見回撤偏低後把倉位數量乘以五倍,並將槓桿上限設為 6 倍——116% 是槓桿放大後的讀數,不是訊號本身的邊際。未放大前,2024 年 30 分鐘圖約 +50%、15 分鐘圖約 +22%。此外回測涵蓋的參數全是看著結果調校出來的,未來能否重現並無保證。

為何講者不用表現最好的 30 分鐘圖,反而選 15 分鐘圖?

他的理由是持倉時間。15 分鐘圖的平均持倉時間顯著較短,對他而言心理上較易承受。這反映策略選擇不單是數字比較:一個數字稍遜但你能如實執行的版本,往往好過一個回測亮麗但持倉過久、令你半途干預的版本。不過要留意,兩者的差距本身也可能是參數擬合的產物。

學這條影片最大的收穫是策略本身嗎?

不是,是開發流程。影片完整示範了「單一指標起步 → 逐重加過濾 → 每次改動重跑多時間框架對照 → 調整倉位 → 分年檢驗 → 坦白交代弱點」的循環,連「加均線後 1 小時圖由盈轉虧」這類反直覺結果都照實展示。策略本身會過時,這套驗證紀律與對過度擬合的自覺,才是可以長期帶走的部分。

原影片

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

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

🏦 ZA Bank 開戶優惠

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

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

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

專屬邀請碼:P20923

立即開戶 → (聯盟連結)