ADX 剝頭皮策略:DI 方向+威廉指標進場,回測 4479% 的拆解(Python 筆記)

第 12 課・共 18 課

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

本篇整理 Algo-trading with Saleh 的 ADX 剝頭皮 Scalping 策略教學:用趨向指標 DMI 的三條線確認「趨勢夠強、方向明確」,再用威廉指標的超買超賣讀數揀進場時機,最後交給 LLM 生成 Python 代碼在 Jesse 框架回測。先說明:標題的「4479%」是講者單一教學案例的回測數字(且經人手放大倉位),本筆記的重點是學習策略結構與回測方法,不構成任何操作依據。

學習重點

詳細筆記

策略核心:趨強度+方向+時機三層過濾

講者開宗明義:這是一套趨勢跟蹤策略,只想在波動大的時候交易,所以主指標是趨向指標 Directional Movement Index(DMI)。這個指標有三條線:

  1. ADX 線(圖中紅線):量度趨勢強度,不分方向。講者把閾值設在 50——遠高於常見的 20 或 25——只有 ADX 高於 50 才考慮交易,換言之寧可錯過機會,也要確保市場處於強趨勢、高波動狀態。
  2. DI+ 與 DI− 雙線(圖中藍線與橙線):判斷趨勢方向。DI+ 在 DI− 之上是升勢,DI− 反穿 DI+ 之上是跌勢。

把 ADX 閾值設在 50 的代價,是絕大部份時間指標都在閾值之下、策略完全按兵不動;講者接受這個取捨,因為橫行市正是趨勢策略反覆被假突破止損的地方,「不做」本身就是過濾器。

光有方向與強度還不夠,講者再加一個震盪指標負責進場時機。常見選擇是 RSI 或隨機指標,但他選用威廉指標 Williams %R:一般震盪指標的參考線是 20 與 80,威廉指標則是 −80 與 −20。低於 −80 屬超賣,找好倉機會;高於 −20 屬超買,找淡倉機會。注意講者在片中口誤把淡倉也說成「超賣」,其後落給模型的指令已修正為「高於 −20 找淡倉」——看教學片時這類口誤要靠自己核對規則前後是否一致。

完整進場條件(好倉為例):DI+ 高於 DI−、ADX 高於 50、威廉指標低於 −80,三者同時成立。淡倉全部反向:DI− 高於 DI+、ADX 高於 50、威廉指標高於 −20。講者強調規則只有這兩組,刻意保持簡單。

TradingView 圖表:DMI 三線與威廉指標的進場設定(截圖出自原片 Algo-trading with Saleh)

出場設計:均線止損+極值止盈+方向反轉離場

出場規則是這課最有意思的部分,講者用了一個他以往從未用過的方法:

以片中的淡倉例子走一遍流程:DI− 已在 DI+ 之上(跌勢)、ADX 高於 50、威廉指標升穿 −20(超買)三個條件齊備,於是以市價開淡倉;止損即時掛在當時的 SMA50 位置,止盈掛在過去 30 根 K 線的最低價。其後價格下行觸及該低位,止盈成交。同一套規則鏡像套用於好倉,沒有任何主觀判斷空間。

風險管理方面:每筆交易風險 3%,以市價單進場。

Python 實現:LLM 生成+兩輪修正

講者把上述規則用自然語言寫成指令,交給他自家的 JesseGPT(背後可切換 Gemini、Claude 等模型,他選了 Claude Sonnet 系列寫碼模型)生成 Jesse 框架的策略,命名為 ADXWilliamsStrategy。生成的指標屬性部分(摘錄自原片教學):

@property
def di(self):
    return ta.di(self.candles)

@property
def highest_high(self):
    return max(self.candles[-30:, 3])  # 索引 3 = 最高價

講者逐行審閱時特別解釋了 Jesse 的 K 線索引:0 是時間戳、1 是開市價、2 是收市價、3 是最高價(最低價為 4),確認 max(self.candles[-30:, 3]) 正是「過去 30 根 K 線的最高價」。這一步很重要——LLM 生成的代碼不能盲目信任,索引錯一位整個止盈邏輯就錯。

第一輪審閱還發現一個大問題:模型完全漏掉了威廉指標,因為講者自己在指令裏忘記寫。他補問「請加入震盪指標:威廉指標低於 −80 找好倉、高於 −20 找淡倉」,模型才補上 ta.willr 的定義與進場條件。教訓有二:指令遺漏甚麼,模型就漏甚麼;檢查語法是否正確,可以在編輯器按住 Option 鍵查看函數定義。

開倉後的止損止盈與反轉離場邏輯(摘錄自原片教學):

def on_open_position(self, order):
    if self.is_long:
        self.stop_loss = self.position.qty, self.sma50
        self.take_profit = self.position.qty, self.highest_high

def update_position(self):
    if self.is_long and self.should_short():
        self.liquidate()
    elif self.is_short and self.should_long():
        self.liquidate()

淡倉版本結構相同,止盈改用 lowest_low,落單則由 self.buy 改為 self.sell。之後講者要求模型在互動圖表上顯示指標數值,模型卻寫錯了屬性名(回測直接報錯),他要人手對照改名——這是第三處修正,再次說明「生成 → 審閱 → 修正」是常態,不是意外。

Jesse 策略代碼:開倉後設止損止盈與方向反轉平倉(截圖出自原片 Algo-trading with Saleh)

回測結果與講者的講法

回測設定:BTC-USDT 永續合約(Binance)、15 分鐘圖,分年度跑 2021、2022、2023、2024 及 2025 年初至 5 月中(截至原片發佈)。首輪(未放大倉位)各年夏普比率約為 1.9、2.0、1.7、1.2、1.1,2021 年最大回撤只有約 −6%。講者見回撤這麼小,便把倉位直接乘 5——同時提醒要在設定中把槓桿調高(5 至 6 倍已足夠),否則保證金不足。

2021 年回測統計:38 宗交易、淨利 +34.7%、最大回撤 −6.2%(截圖出自原片 Algo-trading with Saleh)

放大倉位後的分年結果(講者口述,截至原片發佈):

最後他跑了一次 2021 年初至 2025 年 5 月 12 日的全期回測:約四年四個月、218 宗交易,淨利約 4479%(本金 10,000 美元變約 457,900 美元),最大回撤約 −30.8%,勝率 61%,夏普 1.66,平均持倉約 14 小時,年化回報約 140%——這就是標題數字的出處。畫面同時顯示總手續費約 127,600 美元,是初始本金的十二倍以上,可見高頻交易成本的份量。

全期回測結果:218 宗交易、淨利 4479%、最大回撤 −30.8%(截圖出自原片 Algo-trading with Saleh)

除了數字,講者亦用互動圖表逐宗覆盤交易。他為圖表加上指標數值顯示(順帶一提,這段代碼同樣由 LLM 生成,且他提到模型順手加的觀察名單功能只對實盤有用、回測無意義),然後示範兩宗交易:一宗是好倉,ADX 在閾值之上、DI+ 高於 DI−、威廉指標超賣,三個條件全部符合,結果仍觸及均線止損——規則完美執行與交易虧損可以同時成立;另一宗是淡倉,DI− 在上、威廉指標超買,最終在 30 根 K 線最低價止盈離場。這種「逐宗對照條件」的覆盤方式,比只看權益曲線更能發現策略的行為細節。

講者有兩點告誡值得照錄。第一,策略用市價單進場,想貼近實盤的話應調高手續費參數以計入滑點——他認為 Binance 這類大所滑點未必嚴重,但「謹慎一點總好」。第二,他在互動圖表覆盤虧損交易時提醒:見到一宗「條件全部符合仍輸錢」的交易,就想加過濾條件把它剔除——這正是過度擬合的典型起手式;而且剔除虧損交易的同時,往往也剔除了部份盈利交易,世上沒有完美的過濾器。他亦提到心理層面:即使策略長期向上,實盤仍可能連續幾個月小虧,這種煎熬回測數字看不到。片中亦有其平台與券商推廣內容,本筆記不轉載,讀者留意其利益關係即可。

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

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

MT5 可行性速評

int hAdx = iADX(_Symbol, PERIOD_M15, 14);      // 緩衝 0=ADX, 1=+DI, 2=-DI
int hWpr = iWPR(_Symbol, PERIOD_M15, 14);      // 威廉指標
int hMa  = iMA(_Symbol, PERIOD_M15, 50, 0, MODE_SMA, PRICE_CLOSE);
// 好倉:+DI>-DI && ADX>50 && WPR<-80;止損=SMA50
// 止盈價 = iHighest(_Symbol, PERIOD_M15, MODE_HIGH, 30, 1) 對應的最高價

注意:MT5 回測同樣會過度擬合,參數在同一批歷史數據上調校得太貼,換平台也救不了。

欣利克的看法

名詞解釋

常見問題 FAQ

ADX 閾值設在 50 會不會太高?

一般教科書用 20 至 25 判斷趨勢是否存在,50 屬極端水平,會過濾掉絕大部份時間——這正是講者的意圖:寧可長時間不交易,也要等波動最大的時段才進場。代價是交易次數大減(全期 218 宗),且閾值本身是調校出來的參數,改到 40 或 60 結果可能完全不同。

用移動平均線做止損有甚麼優缺點?

優點是簡單且自動移動:強趨勢中均線會跟上來,變相鎖定利潤;邏輯上也自洽——觸及均線即代表趨勢結束。缺點是止損距離不受控,進場時不知道實際風險是多少,每筆名義上「風險 3%」的計算因而變得粗糙;橫行市中價格反覆穿越均線,也會造成連續小額止損。

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

不能這樣推論。該數字包含 5 倍人手放大倉位與 6 倍槓桿,滑點只以調高手續費粗略處理,止盈假設極值價位必定成交,參數亦未經樣本外驗證。講者自己也提醒不要過度放大倉位、滑點要自行計入。回測的價值在於驗證邏輯是否自洽,而非預測未來回報。

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

邏輯層面很容易:ADX、SMA、威廉指標都是 MQL5 內建函數,極值止盈用 iHighestiLowest 即可。難處在回測可信度:15 分鐘圖策略對點差與成交假設極敏感,必須用真實 tick 模式並保守設定成本;加密貨幣差價合約的點差結構與原片的永續合約不同,結果不能直接對照。

原影片

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

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

🏦 ZA Bank 開戶優惠

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

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

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

專屬邀請碼:P20923

立即開戶 → (聯盟連結)