ADX 剝頭皮策略:DI 方向+威廉指標進場,回測 4479% 的拆解(Python 筆記)
第 12 課・共 18 課
目錄
本篇整理 Algo-trading with Saleh 的 ADX 剝頭皮 Scalping 策略教學:用趨向指標 DMI 的三條線確認「趨勢夠強、方向明確」,再用威廉指標的超買超賣讀數揀進場時機,最後交給 LLM 生成 Python 代碼在 Jesse 框架回測。先說明:標題的「4479%」是講者單一教學案例的回測數字(且經人手放大倉位),本筆記的重點是學習策略結構與回測方法,不構成任何操作依據。
學習重點
- 策略屬趨勢跟蹤:只在 ADX 高於 50(強趨勢、波動大)時交易,DI 雙線判斷方向,威廉指標負責進場時機
- 出場設計罕見地簡單:止損直接用 50 周期簡單移動平均線,止盈用過去 30 根 K 線的最高價或最低價
- LLM 寫代碼的實戰流程:自然語言規則 → 生成 Jesse 策略 → 逐行審閱 → 發現漏了震盪指標要補問 → 人手修正屬性名錯誤
- 分年度回測的價值:同一策略在 2022 年大跌市賺錢、2023 年跑輸基準,單看一條全期權益曲線會錯過這些細節
- 「4479%」的構成:15 分鐘圖、倉位乘 5、槓桿 6 倍,且講者自己提醒市價單要考慮滑點——數字不能照單全收
詳細筆記
策略核心:趨強度+方向+時機三層過濾
講者開宗明義:這是一套趨勢跟蹤策略,只想在波動大的時候交易,所以主指標是趨向指標 Directional Movement Index(DMI)。這個指標有三條線:
- ADX 線(圖中紅線):量度趨勢強度,不分方向。講者把閾值設在 50——遠高於常見的 20 或 25——只有 ADX 高於 50 才考慮交易,換言之寧可錯過機會,也要確保市場處於強趨勢、高波動狀態。
- 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。講者強調規則只有這兩組,刻意保持簡單。

出場設計:均線止損+極值止盈+方向反轉離場
出場規則是這課最有意思的部分,講者用了一個他以往從未用過的方法:
- 止損:直接用 50 周期簡單移動平均線 SMA。邏輯是「價格觸及 50 周期均線,代表趨勢已經結束,我不想再留在這宗交易裏」。好倉淡倉都用同一條線。這種止損會隨均線移動,等於內建了移動止損效果,但代價是止損距離不受控。
- 止盈:好倉的止盈價設為過去 30 根 K 線的最高價,淡倉則為過去 30 根 K 線的最低價。思路是押注強趨勢會破頂或破底,以前段極值為目標。
- 方向反轉離場:假設持有好倉,但 DI 雙線已轉為跌勢排列(即淡倉進場條件成立),即使未觸及止損止盈,也立即平倉。這等於把進場條件反過來當離場訊號用。
以片中的淡倉例子走一遍流程: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。之後講者要求模型在互動圖表上顯示指標數值,模型卻寫錯了屬性名(回測直接報錯),他要人手對照改名——這是第三處修正,再次說明「生成 → 審閱 → 修正」是常態,不是意外。

回測結果與講者的講法
回測設定: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 倍已足夠),否則保證金不足。

放大倉位後的分年結果(講者口述,截至原片發佈):
- 2022 年:基準 BTC 跌近七成,策略反而賺約 210%,勝率約 60%,夏普接近 2,最大回撤 −25%,平均持倉約 8 小時。
- 2023 年:沒有跑贏基準,但貼近——講者坦言這年算「不過不失」。
- 2024 年:大部份時間跑贏,直至年尾 BTC 急升才被拋離,最大回撤約 −20%。
- 2025 年初至 5 月:跑贏基準;年初幾個月錄得小幅虧損,講者視之為「贏」,因同期大部份策略都難做。
最後他跑了一次 2021 年初至 2025 年 5 月 12 日的全期回測:約四年四個月、218 宗交易,淨利約 4479%(本金 10,000 美元變約 457,900 美元),最大回撤約 −30.8%,勝率 61%,夏普 1.66,平均持倉約 14 小時,年化回報約 140%——這就是標題數字的出處。畫面同時顯示總手續費約 127,600 美元,是初始本金的十二倍以上,可見高頻交易成本的份量。

除了數字,講者亦用互動圖表逐宗覆盤交易。他為圖表加上指標數值顯示(順帶一提,這段代碼同樣由 LLM 生成,且他提到模型順手加的觀察名單功能只對實盤有用、回測無意義),然後示範兩宗交易:一宗是好倉,ADX 在閾值之上、DI+ 高於 DI−、威廉指標超賣,三個條件全部符合,結果仍觸及均線止損——規則完美執行與交易虧損可以同時成立;另一宗是淡倉,DI− 在上、威廉指標超買,最終在 30 根 K 線最低價止盈離場。這種「逐宗對照條件」的覆盤方式,比只看權益曲線更能發現策略的行為細節。
講者有兩點告誡值得照錄。第一,策略用市價單進場,想貼近實盤的話應調高手續費參數以計入滑點——他認為 Binance 這類大所滑點未必嚴重,但「謹慎一點總好」。第二,他在互動圖表覆盤虧損交易時提醒:見到一宗「條件全部符合仍輸錢」的交易,就想加過濾條件把它剔除——這正是過度擬合的典型起手式;而且剔除虧損交易的同時,往往也剔除了部份盈利交易,世上沒有完美的過濾器。他亦提到心理層面:即使策略長期向上,實盤仍可能連續幾個月小虧,這種煎熬回測數字看不到。片中亦有其平台與券商推廣內容,本筆記不轉載,讀者留意其利益關係即可。
🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:
ZA Bank 邀請碼 P20923
—— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。
立即開戶 →
(聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)
MT5 可行性速評
- 邏輯可移植性:全部指標都是 MQL5 內建——ADX 與 DI 雙線用
iADX(一個函數三條緩衝線)、SMA50 用iMA、威廉指標用iWPR;「30 根 K 線最高/最低價」用iHighest/iLowest即可。邏輯本身移植難度低。 - 平台限制:15 分鐘圖剝頭皮對點差與執行速度極敏感。MT5 回測器若不用「基於真實 tick」模式,成交價假設會偏樂觀;止盈掛在 30 根 K 線極值,實盤中價格「觸及」不等於「成交」,可能差一個 tick 就永不平倉;加密貨幣差價合約的點差與隔夜成本因券商而異,與原片的 Binance 永續合約不能直接對照。
- 評級:⚠️ 邏輯易寫、回測難信——代碼一兩天能寫完,但要驗證成績,必須用真實 tick 數據並把點差、滑點設得保守,否則回測數字參考價值有限。
- MQL5 寫法提示:
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 回測同樣會過度擬合,參數在同一批歷史數據上調校得太貼,換平台也救不了。
欣利克的看法
- 先拆「4479%」的構成:這個數字來自 BTC 單一標的、15 分鐘圖、2021 年初至 2025 年 5 月的回測,期間倉位被人手乘 5(等於每筆實際風險由 3% 變 15%)、槓桿 6 倍。同一段歷史,倉位乘幾倍,回報大約就放大了幾倍——「4479%」首先是槓桿設定的結果,其次才是策略邏輯的結果。畫面顯示總手續費達初始本金十二倍,亦說明這類策略的成敗很大程度由成本決定。
- 剝頭皮策略對交易成本最敏感,而原片的處理偏粗:講者自己承認沒有精確計入滑點,只建議「把手續費調高一點」。止盈掛在過去 30 根 K 線的極值,回測假設價格到達即成交,實盤卻可能因流動性不足而無法在該價位平倉。每宗交易平均賺的價差越小,這些假設誤差佔預期利潤的比例就越高——15 分鐘圖策略的誤差容忍度遠低於日線策略。
- 小時框以下回測的可靠性要打折:15 分鐘圖的 K 線內部路徑(先觸及止損還是止盈)只能靠插值估算,同一根 K 線內兩者同時被觸及時,先算哪一個會直接改變結果。218 宗交易攤分四個多年度,再受這類誤差影響,統計穩定性有限。
- 名為剝頭皮,實為短線趨勢跟蹤:平均持倉 8 至 14 小時,與傳統持倉幾秒至幾分鐘的剝頭皮相去甚遠,「scalping」在片中更像宣傳用語。真正的剝頭皮對執行延遲與點差的要求嚴苛得多,兩者不能混為一談。
- 時效提醒:以上全部數據截至原片發佈(2025 年中),且 ADX 50、30 根 K 線、SMA50 等參數都在同一批歷史數據上展示,原片沒有做樣本外驗證。值得學的是「三層過濾+極值止盈」的結構設計和分年度檢驗的習慣,而不是任何具體參數或回報數字。
名詞解釋
- 剝頭皮 Scalping:持倉時間極短、賺取微小價差的交易風格,對交易成本與執行速度極度敏感。
- 平均趨向指數 ADX:量度趨勢強度不分方向的指標;本課把閾值設在罕見的 50,只做最強趨勢。
- 威廉指標 Williams %R:介乎 0 至 −100 的震盪指標,低於 −80 超賣、高於 −20 超買。
- 簡單移動平均線 SMA:過去 N 個周期收市價的平均;本課借用 50 周期均線充當動態止損。
- 最大回撤 Drawdown:權益由高位回落的最大幅度;講者正是看到回撤夠小才決定放大倉位。
- 夏普比率 Sharpe Ratio:每單位波動風險換取的回報;本策略各年度介乎 1.1 至 2.0。
- 滑點 Slippage:預期成交價與實際成交價的差距;市價單進場的策略必須計入。
- 過度擬合 Overfitting:為剔除歷史上的虧損交易而不斷加過濾條件,回測變亮麗、未來失效。
- 回測 Backtesting:以歷史數據檢驗交易規則;小時框以下的回測要額外留意 K 線內部路徑的估算誤差。
- 永續合約 Perpetual Futures:沒有到期日的加密貨幣期貨合約,本策略的回測標的。
常見問題 FAQ
ADX 閾值設在 50 會不會太高?
一般教科書用 20 至 25 判斷趨勢是否存在,50 屬極端水平,會過濾掉絕大部份時間——這正是講者的意圖:寧可長時間不交易,也要等波動最大的時段才進場。代價是交易次數大減(全期 218 宗),且閾值本身是調校出來的參數,改到 40 或 60 結果可能完全不同。
用移動平均線做止損有甚麼優缺點?
優點是簡單且自動移動:強趨勢中均線會跟上來,變相鎖定利潤;邏輯上也自洽——觸及均線即代表趨勢結束。缺點是止損距離不受控,進場時不知道實際風險是多少,每筆名義上「風險 3%」的計算因而變得粗糙;橫行市中價格反覆穿越均線,也會造成連續小額止損。
回測 4479% 是否代表實盤也能有相近回報?
不能這樣推論。該數字包含 5 倍人手放大倉位與 6 倍槓桿,滑點只以調高手續費粗略處理,止盈假設極值價位必定成交,參數亦未經樣本外驗證。講者自己也提醒不要過度放大倉位、滑點要自行計入。回測的價值在於驗證邏輯是否自洽,而非預測未來回報。
這個策略可以搬到 MT5 用嗎?
邏輯層面很容易:ADX、SMA、威廉指標都是 MQL5 內建函數,極值止盈用 iHighest/iLowest 即可。難處在回測可信度:15 分鐘圖策略對點差與成交假設極敏感,必須用真實 tick 模式並保守設定成本;加密貨幣差價合約的點差結構與原片的永續合約不同,結果不能直接對照。
原影片
本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看: