均值回歸 Mean Reversion 策略:布林帶掛單+RSI 四重過濾(Python 回測筆記)
第 14 課・共 18 課
目錄
均值回歸 Mean Reversion 策略假設價格偏離平均水平後終會回歸,與趨勢跟蹤的邏輯剛好相反。本篇整理 Algo-trading with Saleh 的教學:用布林帶定位進出場、大時間框架 RSI 與 Supertrend 過濾趨勢,再以 LLM 把規則轉成 Python 代碼在 Jesse 框架回測。先說明:標題的「813%」屬單一教學案例的回測數字,本筆記重點是學習策略寫法與回測方法,而非跟單依據。
學習重點
- 均值回歸策略的本質:逆當前方向建倉,賭價格回歸均值;代價是「贏錢次數多、單筆贏得少、輸就輸大」的盈虧結構
- 講者的改良思路:不是純逆勢,而是「大周期順勢+小周期逆勢回調」,用四重過濾確認趨勢存在後才在回調位掛單
- 進出場設計:布林帶下軌限價買入、上軌止盈,止損為入場價減六倍 ATR;每筆風險約佔資金 3%
- Python 落地流程:把自然語言規則餵給 LLM 生成 Jesse 策略代碼,再人手修正錯誤(本課就有兩處)
- 回測解讀:勝率 92% 的策略一樣可以在單一年度虧損;交易樣本數(37 宗 vs 75 宗)直接影響統計意義
詳細筆記
策略核心:不是純逆勢的均值回歸
講者開宗明義:均值回歸策略不以趨勢指標起步,因為我們不期望價格延續方向,而是期望它回到均值,建倉方向與當前市場方向相反。最經典的量度工具是布林帶 Bollinger Bands:中軸是一條移動平均線,上下軌是中軸加減兩倍標準差。背後是統計學的常態分佈概念:價格偏離均值達兩個標準差屬相對罕見的狀態,此後回歸均值的傾向較高。講者坦言記不起確切數字,但認為這個理論很有意思——這正是整個策略的根基:好倉在下軌(圖中綠線)開倉,淡倉則在上軌反向操作。策略的交易時間框架為 1 小時。
但講者強調,布林帶只負責「在哪個價位開倉」,不是進場訊號本身。真正的主軸是 RSI,而用法與傳統相反:傳統上 RSI 升穿 70(超買)是沽空訊號,講者卻想在大趨勢中趁回調買入。他的想法是:市場要有趨勢,但不即市追入,而是等價格回調到均值附近才進場,賭它之後再升。若只用 1 小時 RSI 判斷超買,機會窗口太窄,所以 RSI 改用 4 小時框架——大周期 RSI 高於 70,代表大級別動能強勁,期間內任何回調都是潛在買點。
進場條件:四重過濾
光有 RSI 仍會在無趨勢的橫行市產生假訊號——橫行市一樣可以出現 RSI 超買,一根大陽燭不代表趨勢成立。講者以圖例說明:某段橫行市中 RSI 確已超買,其後價格雖一度上升令好倉獲利,但同類位置充滿假突破,長期必被反覆止損。他於是加入兩層趨勢過濾:
- 雙 ADX 過濾:1 小時圖 ADX 須高於 20(不用常見的 40,因為想盡早捕捉趨勢、不想錯過太多交易),同時 4 小時圖 ADX 須高於 40。大周期確認強趨勢,小周期容忍早期訊號。
- 4 小時 Supertrend 方向:講者承認這是均值回歸策略卻仍需趨勢指標,只是不以其起步。關鍵技巧是把 Supertrend 放在 4 小時框架——1 小時圖上的短暫跌勢,在 4 小時圖可能仍是升勢(Supertrend 線在價格下方、顯示綠色),這種「大勢向上、小周期回調」正是要捕捉的形態。若 Supertrend 用回 1 小時,一回調就轉向,會錯失機會。
以好倉為例,完整進場條件為:4 小時 RSI > 70、4 小時 Supertrend 顯示升勢、4 小時 ADX > 40、1 小時 ADX > 20,四者同時成立。淡倉全部反向(4 小時 RSI < 30、Supertrend 跌勢等)。

出場設計:布林帶止盈+六倍 ATR 止損
- 入場價:布林帶下軌(好倉)——以限價單掛在現價下方,等回調成交,不是市價追入
- 止盈:布林帶上軌(好倉);淡倉反向,下軌止盈
- 止損:入場價 − 6 × 當前 ATR(好倉)
講者特別解釋了盈虧結構的分別:趨勢跟蹤策略要求高風險回報比,止損常用 2–3 倍 ATR,贏時贏大;均值回歸策略剛好相反,止損放得很遠(6 倍 ATR),換取 70–80% 以上的高勝率——贏的次數多但每次贏得少,一旦觸及止損虧損就大。這是設計上的取捨,不是疏忽。
Python 實現:LLM 生成+人手修正
講者把上述規則以自然語言寫成指令,交給他自家的 JesseGPT(背後使用 Claude 3.7 Sonnet 模型)生成 Jesse 框架的策略代碼,命名為 MeanReversionRSI。生成的代碼以大時間框架蠟燭圖為基礎定義各項指標屬性,結構大致如下(摘錄自原片教學):
# 大時間框架數據與指標(摘錄自原片教學)
@property
def higher_tf_candles(self):
return self.get_candles(self.exchange, self.symbol, '4h')
@property
def higher_tf_rsi(self):
return ta.rsi(self.higher_tf_candles)
進場判斷把四重過濾寫成布林運算(摘錄自原片教學):
def should_long(self) -> bool:
return (
self.higher_tf_rsi > 70 and
self.trend == 1 and
self.higher_tf_adx > 40 and
self.current_tf_adx > 20
)
落單邏輯:以下軌為限價、6 倍 ATR 為止損距離,再用 risk_to_qty 反推倉位,令每筆交易風險固定(摘錄自原片教學):
def go_long(self):
entry_price = self.bb.lowerband
stop_loss_price = entry_price - (6 * self.atr)
qty = utils.risk_to_qty(self.available_margin, 3,
entry_price, stop_loss_price, fee_rate=self.fee_rate)
self.buy = qty, entry_price

值得學習的是人手修正環節,LLM 並非一次寫對:
- 趨勢判斷錯誤:模型把「4 小時 Supertrend 升勢」寫成檢查某個布林值,講者改為比較現價與 Supertrend 線數值——價在線上回傳 1(升勢),否則回傳 0。其後回測發現策略只做好倉,追查下發現跌勢時應回傳 −1 而非 0,修正後淡倉才正常觸發。
- 多餘的移動止盈:模型自作主張在
update_position中不斷按最新布林帶更新止盈價,講者並無此要求,直接刪除。他的心得:指令越具體,模型越乖乖照做;指令含糊,模型就會「自由發揮」。
另有一個限價單的細節:由於在下軌掛限價單,下一根 K 線下軌位置已變,舊掛單可能永遠無法成交——原片用圖例展示,若沿用舊掛單價,即使後來價格觸及新的下軌位置也不會開倉。Jesse 的做法是 should_cancel_entry 回傳 true,每根 K 線取消舊單、按新下軌重新掛單(前提仍是進場條件成立)。若策略用市價單則無需定義此方法。
回測設定上還有一個實戰教訓:策略用到 4 小時蠟燭圖,回測面板理應加入對應的 data route。漏設時 Jesse 回測會報錯但仍能在幕後補救完成;實盤交易時漏設卻會直接令 session 終止。講者特別提醒兩者後果不同,部署前必須檢查路由設定。
回測結果與講者的講法
回測設定:BTC-USDT 永續(Binance)、1 小時圖,手續費故意設定為 Binance 實際費率的約兩倍,預留滑點與資金費等隱藏成本。分階段結果如下(截至原片發佈、數據至 2025 年 7 月 20 日):
- 2024 年初至 2025 年中:9 宗交易,盈利 9.23%,勝率 100%,最大回撤接近零,夏普比率 2.48。講者明言 100% 勝率並不現實。
- 放大倉位:講者把倉位直接乘 5(並承認這令「每筆風險 3%」的設定失效,純為展示權益曲線),結果貼近但未跑贏 BTC 本身。
- 分年度檢驗:2022 年錄得約 −9%(最大回撤 −22%、勝率 75%),證明高勝率策略照樣有虧損年份;2023 年則為 +97%、回撤 −12%、勝率 100%。
- 修正淡倉 bug 後:2022 年轉為 +16%;2022 年初至 2025 年 7 月全期 +253%,最大回撤 −22%,勝率約 94.6%,夏普 1.57,但 3.5 年只有 37 宗交易。
- 多標的擴展:加入 ETH、DOGE 後共 75 宗交易,全期盈利 813%、最大回撤仍約 −22%、勝率 92%、夏普 1.95,平均持倉約 70 小時,最長連勝 32 宗。這就是標題「813%」的出處。


講者對結果有兩點保留,值得記下:第一,3.5 年 37 宗交易的樣本太少,統計意義不足——交易次數越多,回測結果越可信,這正是他擴展至多標的的原因(交易次數升至 75 宗);第二,平均持倉近 70 小時、虧損單平均持有逾 120 小時,實盤要承受持倉數日甚至浮虧數日的心理壓力,這一點回測數字不會告訴你。
此外,多標的回測要關閉 fast mode 與 benchmark 才能正常執行;講者亦提到目前只測了三隻加密貨幣,理論上可繼續尋找其他適合的標的進一步改善結果——但這句話本身也值得警惕:不斷試標的、挑表現好的留下,正是過度擬合的溫床,下文「欣利克的看法」會再談。
🙏 覺得內容有用?本站所有內容免費提供,使用推薦碼開戶就是支持我們繼續營運的最大鼓勵:
ZA Bank 邀請碼 P20923
—— 你享 HKD 2,000 迎新獎賞,本站獲得營運支持。
立即開戶 →
(聯盟連結|投資涉及風險,受條款及細則約束,此資料僅可於香港境內分發)
MT5 可行性速評
- 邏輯可移植性:布林帶(iBands)、RSI(iRSI)、ADX(iADX)、ATR(iATR)全部為 MQL5 內建函數;多時間框架只需在函數中指定 PERIOD_H4。唯獨 Supertrend 非內建,須自行用 ATR 實作或引用自訂指標。
- 平台限制:單品種、1 小時圖的策略在 MT5 適配良好;「每根 K 線重掛限價單」可用掛單修改(OrderModify)實現。多標的組合(BTC+ETH+DOGE)在 MT5 需寫多品種 EA,且加密貨幣差價合約的供應與點差因券商而異,原片的手續費假設不能直接搬用。
- 評級:⚠️ 需自訂元件——核心邏輯全部可寫,但 Supertrend 要自製,加上限價單追蹤下軌的掛單管理邏輯比一般市價單 EA 複雜。
- MQL5 寫法提示:
int hRsiH4 = iRSI(_Symbol, PERIOD_H4, 14, PRICE_CLOSE); // 大周期 RSI
int hBB = iBands(_Symbol, PERIOD_H1, 20, 0, 2.0, PRICE_CLOSE);
int hATR = iATR(_Symbol, PERIOD_H1, 14);
// CopyBuffer 取值後:於下軌掛 Buy Limit,止損 = 入場價 − 6×ATR
// 每根新 K 線檢查下軌位置,偏離即 OrderModify 改掛單價
注意:MT5 回測同樣會過度擬合,tick 數據質素與 spread 模型直接影響結果,不要以為換了平台數字就更可信。
欣利克的看法
- 先拆「813%」的構成:這個數字來自 BTC+ETH+DOGE 三隻加密貨幣、2022 年初至 2025 年 7 月的單一回測時段;講者有計入手續費(且故意設為實際兩倍以預留滑點),但倉位曾人手放大 5 倍,「每筆風險 3%」的風控設定在最終結果中已不成立。同一策略單跑 BTC 在 2022 年曾錄得虧損,可見結果對標的與時段相當敏感。
- 這其實不是純均值回歸:純逆勢策略的最大死穴是強趨勢市「接刀」——價格可以長期偏離均值。講者用 4 小時 RSI、Supertrend、雙 ADX 四重過濾,本質上是「順大勢、逆小勢」的回調買入法,與教科書式的均值回歸不同。學習時應把它歸類為混合策略,而非以為布林帶觸軌就能反向操作。
- 過度擬合風險仍在:RSI 70、ADX 20/40、6 倍 ATR、5 倍倉位等參數全部在同一批歷史數據上調校,原片沒有做樣本外驗證或前移測試。75 宗交易雖比 37 宗好,以統計標準衡量仍屬偏少。參數稍微改動後表現如何,是檢驗此策略的第一個問題。
- 高勝率的另一面:回測中平均盈利與平均虧損的比例約為 0.36,即贏三次未必夠輸一次。92% 勝率予人安全感,但一次觸及六倍 ATR 止損便會抹去多宗盈利;遇上連續止損(回測最長連敗僅 2 宗,實盤無保證),權益曲線會非常難受。
- 時效提醒:以上數據截至原片發佈(2025 年中),加密市場的波動結構變化快,兩年前的規律不代表今天仍成立。本課值得學的是「規則 → 代碼 → 分年度檢驗 → 找 bug」的方法論,而非任何具體參數。
名詞解釋
- 均值回歸 Mean Reversion:假設價格偏離平均水平後終會回歸的交易思路,逆當前方向建倉。
- 布林帶 Bollinger Bands:移動平均線加減兩倍標準差構成的通道,量度價格偏離均值的程度。
- 相對強弱指數 RSI:0–100 的動能震盪指標,傳統上 70 以上超買、30 以下超賣;本課改用作大周期趨勢濾網。
- 平均真實波幅 ATR:每根 K 線平均波動範圍,不含方向,常用於設定止損距離與計算倉位。
- 平均趨向指數 ADX:量度趨勢強度不分方向的指標,用於過濾橫行市假訊號。
- 夏普比率 Sharpe Ratio:每單位波動風險換取的超額回報,評估回報質素而非只看總回報。
- 過度擬合 Overfitting:策略參數過度遷就歷史數據,回測亮麗卻無法在未來複製。
- 回測 Backtesting:以歷史數據檢驗交易規則的過程,樣本太少易把巧合當規律。
- 最大回撤 Drawdown:權益由高位回落的最大幅度,衡量策略風險的核心指標。
- 倉位管理 Position Sizing:按每筆可承受風險反推交易數量,令不同波動的市場承受相近風險。
常見問題 FAQ
均值回歸策略和趨勢跟蹤策略有何分別?
均值回歸賭價格回到平均水平,逆當前方向建倉,特徵是勝率高、單筆盈利小、虧損大;趨勢跟蹤順勢而建,勝率較低但贏時贏大,兩者的盈虧結構剛好相反。本課的策略其實是混合體:大時間框架確認趨勢存在,小時間框架逆回調掛單,取兩者之長。
為甚麼 RSI 超買反而可以買入?
傳統用法把 RSI 高於 70 解讀為超買回軟訊號。本課改用 4 小時框架的 RSI:大周期 RSI 高於 70 代表大級別上升動能強勁,此時在 1 小時圖等價格回調至布林帶下軌買入,屬「順勢等回調」而非「賭見頂」。同一指標放在不同時間框架,含義可以完全相反。
回測 813% 是否代表實盤也能有相近回報?
不能這樣推論。該數字來自特定三隻加密貨幣與 2022–2025 年的單一時段,參數在同一批數據上調校,倉位又曾人手放大,且未經樣本外驗證。講者自己也承認 3.5 年 75 宗交易的樣本偏少。回測的價值在於驗證邏輯是否自洽,而非預測未來回報。
這個策略可以搬到 MT5 用嗎?
核心邏輯(布林帶、RSI、ADX、ATR)MQL5 全部內建,多時間框架亦易實現;但 Supertrend 要自訂指標,「每根 K 線按下軌重掛限價單」需要掛單管理邏輯,多標的組合則要寫多品種 EA。屬「可行但需自訂元件」一類,且 MT5 回測同樣受過度擬合與數據質素影響。
原影片
本文整理自以下影片,版權屬原創作者所有,建議配合原片觀看: