「100% 勝率」策略拆解:馬丁格爾的數學原理、Python 實現與三大疑問|Quant Strategies Ep 11 筆記

第 11 課・共 18 課

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

這是本課程系列的「防坑示範課」。Algo-trading with Saleh 的 Saleh 在片中展示一個回測勝率 100% 的 Python 策略,但他同時坦白交代:這策略本質是源自賭場的馬丁格爾 Martingale 加注法,他自己 2018 年實盤操作了 48 小時,結局是整個帳戶強制平倉。這篇筆記既整理他的教學內容(數學原理、Jesse 框架寫法、回測設定),也分析「100% 勝率」這個數字為何應該存疑。

學習重點

詳細筆記

策略的數學原理:馬丁格爾加注

Saleh 開宗明義:這策略原本是賭博技巧,風險極高,「至少理論上行得通」。他用一個簡化例子解釋數學。假設一枚 BTC 價格 100 美元,買入一枚,成本 100 美元。若價格升至 110 美元賣出,賺 10 美元,沒有特別之處。

關鍵在價格逆向時的處理。若價格跌至 80 美元,不止蝕,反而加買一枚——倉位變成兩枚,總成本 180 美元,平均成本拉低至 90 美元。此時價格只需回升至 90 美元便打和,回升至 100 美元(當初的入場價)已賺 20 美元。若價格繼續跌至 60 美元,再加買兩枚,倉位變四枚,總成本 300 美元,平均成本 75 美元——價格反彈至 85 美元已賺 40 美元,連當初入場價都不用回到。

Saleh 稱這是策略的「美妙之處」:不需要價格完全順著你走,甚至價格越逆向、加註越多,最終反彈時賺得越多。但這說法有一個隱藏前提——價格最終要有「至少一點」反彈,而且你要有無限資金承接每一次加註。這兩個前提在現實都不成立,正是全片的伏筆。

手續費的處理:掛單回贈

馬丁格爾要頻繁掛單加註,手續費本應是重大成本。Saleh 交代他 2018 年實盤時用的是 BitMEX,當年該交易所向掛單方(Maker)提供手續費回贈;由於策略全部使用限價單,他不但不用付費,反而每單收取回贈——即使在成本價原價平倉,計及回贈仍有微利。這是該策略在當年環境下能運作的重要條件,亦提示讀者:回測中的手續費模型(費率、Maker/Taker 之別)可以直接改變策略的生死,不同交易所、不同時期的費率結構差異極大。

Python 實現(Jesse 框架)

策略在 Jesse(開源 Python 加密貨幣交易框架)上編寫,只做長倉。入場規則刻意簡化到極致——should_long 直接回傳 True,即策略一啟動就嘗試開倉;入場價掛在布林帶下軌,首單只動用可用保證金的一成,因為要預留資金給後續加註單(摘錄自原片教學):

def should_long(self) -> bool:
    return True

def go_long(self):
    entry = self.bb.lowerband
    qty = utils.size_to_qty(self.available_margin * 0.10,
                            entry, fee_rate=self.fee_rate)
    self.buy = qty, entry

開倉後同時掛出兩張單:止盈單設在「當前倉位平均成本 + 兩倍標準差」,平掉整個倉位;加註單設在「現價 − 兩倍標準差」,數量等於現有倉位——成交後倉位正好加倍,這就是馬丁格爾的核心一行(摘錄自原片教學):

def _submit_exit_orders(self):
    # 止盈:平均成本 + 2 倍標準差
    tp_price = self.position.entry_price + self.std * 2
    self.take_profit = self.position.qty, tp_price
    # 加註單:現價 − 2 倍標準差,數量 = 現有倉位(即加倍)
    next_entry_price = self.price - self.std * 2
    next_entry_qty = self.position.qty
    self.buy = next_entry_qty, next_entry_price

Jesse 框架中的策略程式碼

截圖出自原片(Algo-trading with Saleh):on_open_position 內的止盈與加註單邏輯。

由於加註可能發生多次,Saleh 把上述邏輯抽成 _submit_exit_orders(),除了在 on_open_position 執行,也在 on_increased_position(倉位增加時)再執行一次,確保每次加註後止盈價與下一張加註單都按新的平均成本重新計算。另外,因為入場是限價單而布林帶下軌會移動,他把 should_cancel_entry 設為恒真:未成交的掛單每根 K 線取消重掛,讓入場價永遠貼著最新的下軌。

回測結果:100% 勝率的由來

回測設定:Binance 永續合約、SOL-USDT、槓桿開盡 100 倍(Saleh 明言這策略「資金越多越好」,所以槓桿用到交易所上限)。小時圖、2025 年首四個月:淨盈利 186%,最大回撤 -43%,勝率 100%,夏普比率 2.66。兩小時圖:勝率仍 100%,夏普 2.54。五分鐘圖(縮短至 9 日):19 單全贏,盈利逾 5%,夏普 7.74。換標的到 ETH-USDT 小時圖一個月:盈利 90%,回撤 -10%,勝率又是 100%。互動圖表顯示部分交易連續加註六、七次才反彈離場,而這些「越跌越買」的單恰恰獲利最豐。

Jesse 回測績效頁

截圖出自原片(Algo-trading with Saleh):五分鐘圖回測績效,勝率 100%、夏普比率 7.74、連贏 19 單。

請注意這些數字的共同特徵:勝率 100% 但回撤動輒 -10% 至 -43%,而且回測期最長只有四個月、最短只有九日。勝率之所以是 100%,是因為策略根本沒有止蝕——不認輸的單不會記作敗仗,只會以浮虧形式躺在回撤欄裏,等待反彈;反彈不來的那一次,就是帳戶的終點。

所謂 live results:48 小時連贏,然後爆倉

Saleh 隨後展示他 2018 年在 BitMEX 的真實交易紀錄(標的 XBTUSD,全部經 API 以限價單執行)。交易明細清楚可見馬丁格爾的指紋:25、50、100、200、400、800、1600、3200——每次加註手數翻倍,方向一致,直至整體反彈平倉;手續費一欄是負數(-0.025%),即交易所倒貼回贈。

BitMEX 2018 年實盤成交紀錄

截圖出自原片(Algo-trading with Saleh):2018 年 6 月 BitMEX 成交明細,可見手數不斷翻倍、手續費為負值(回贈)。

這樣的操作持續了 48 小時——然後紀錄最後一行寫著「Liquidation」。整個帳戶被強制平倉,全數蒸發。Saleh 的總結一針見血:這策略「你會一直贏,直到你不再贏;而你不贏的那一次,不是輸少許,是直接爆倉,遊戲結束。」

實盤紀錄最後一行:Liquidation

截圖出自原片(Algo-trading with Saleh):成交紀錄末段,最後一筆為強制平倉(Liquidation)。

為何注定失敗:資金需求的幾何級數

Saleh 用一張資金表解釋死穴。假設本金 500 美元、100 倍槓桿,購買力 50,000 美元;BTC 價格 500 美元,首單買一枚。之後價格每跌 20 美元加註一次、手數翻倍:第二步累計投入 980 美元,第三步 1,900 美元……到第七步,累計投入已達 48,620 美元,幾乎用盡 50,000 美元購買力;第八步需要累計約 92,000 美元——資金鏈到此斷裂。換言之,區區 500 美元本金,價格單向跌約 160 美元(每步 20 美元、共八步)就足以令策略無法執行。加註策略的資金需求以幾何級數增長,而沒有人擁有無限資金。

更有說服力的是他即場做的實驗:把五分鐘圖那個「19 單全贏、夏普 7.74」的回測,結束日期僅僅延長一個月,回測直接報錯——加註單的價值超出可用保證金。他解釋,實盤中等同情況是加註單無法送出,只能抱著越跌越深的重倉,直至強制平倉。同一策略、同一參數,只是把觀察窗拉長少許,「完美」便立即現形。

加止蝕可行嗎?講者的結論

有觀眾自然會問:加個止蝕、輸了就認賠重來,不就行了?Saleh 明確勸退。理由有二。第一,這策略利潤最豐的恰恰是逆向加註最多的單,若一早止蝕離場,那些亮麗數字根本不會出現——止蝕與馬丁格爾在邏輯上互斥,加了止蝕,它就不再是那個「100% 勝率」的策略。第二,不設止蝕的系統在實盤有無數死因:斷網、交易所故障、程式錯誤,任何一項發生時,你輸的不是一單,而是整個帳戶。他的原則是虧損要短、盈利要長,這策略恰恰相反,「違背我對風險管理的所有價值觀」。他最後表示,這始終是一個有趣的均值回歸實驗,當中概念或可作為日後開發正經均值回歸策略的素材。

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

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

MT5 可行性速評

項目評估
邏輯可移植性高。布林帶、標準差均有內建函數(iBands、iStdDev),限價單用 Buy Limit,加註與整體止盈屬簡單倉位管理邏輯,無 Python 特有依賴。
平台限制MT5 淨額帳戶(Netting)下同方向加註會自動合併倉位,平均成本計算要自行維護;對沖帳戶(Hedging)則須確保平倉單正確對應。加密貨幣 100 倍槓桿在一般外匯券商不適用,保證金與強平規則因券商而異。
評級⚠️ 程式邏輯可完整移植,但策略本身的爆倉風險不會因更換平台而消失;淨額帳戶的倉位合併增加實作出錯空間。只宜當回測練習,不應實盤。
MQL5 寫法提示見下
double lower[];
int bb = iBands(_Symbol, PERIOD_CURRENT, 20, 0, 2.0, PRICE_CLOSE);
CopyBuffer(bb, LOWER_BAND, 0, 1, lower);
// 以 Buy Limit 掛於下軌;成交後在 OnTradeTransaction 內
// 按新平均成本重設整體 TakeProfit,並掛出下一張手數加倍的 Buy Limit
// (須自行記錄加註層數,防止資金鏈斷裂時無止損持有重倉)

注意:即使移植成功,MT5 策略測試器跑出的回測同樣會過度擬合——換平台不解決方法論問題,樣本外驗證與壓力測試一項都不能少。

欣利克的看法

名詞解釋

常見問題 FAQ

100% 勝率的策略可信嗎?

數字本身可以是真的,但幾乎必定有隱藏條件:不設止蝕(虧損的單不平倉就不算輸)、樣本太小、或把浮虧藏在回撤裏。本課的策略三者皆中——回測 100% 勝率的同時,回撤達 -43%,講者實盤 48 小時後更整倉爆倉。判斷策略優劣應看期望值、回撤與樣本規模,而非單看勝率。

馬丁格爾策略在數學上為何注定失敗?

因為資金需求以幾何級數增長而資金永遠有限。以片中例子計,500 美元本金配 100 倍槓桿,加註到第七步已用盡購買力,第八步便無以為繼。只要「連續逆向的步數」超過資金能承受的層數——這件事只要時間夠長必然發生——結局就是強制平倉,一次虧損抹走之前全部盈利。

既然講者自己爆過倉,這條影片還有甚麼學習價值?

價值正在於它是一個完整的反面教材:數學原理講得清楚(加註如何拉低成本)、程式寫法可觀摩(Jesse 的掛單與倉位管理)、而「回測期僅延長一個月便無法完成」的實驗更是樣本外驗證的最佳示範。學的是回測技術與風險思維,不是策略本身。

布林帶下軌買入不是均值回歸嗎,為何會出事?

觸及下軌只代表價格相對近期均值偏低,並不保證反彈——單邊跌市中價格可以沿下軌不斷下行。均值回歸策略本身並非不可行,問題在於本策略用「不斷加倍、不設止蝕」去執行它,把正常的策略失效風險放大成帳戶清零風險。Saleh 本人亦表示,會考慮把當中的均值回歸概念改良成有止蝕的正經策略。

原影片

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

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

🏦 ZA Bank 開戶優惠

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

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

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

專屬邀請碼:P20923

立即開戶 → (聯盟連結)