均值回歸 Mean Reversion 策略:布林帶掛單+RSI 四重過濾(Python 回測筆記)

第 14 課・共 18 課

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

均值回歸 Mean Reversion 策略假設價格偏離平均水平後終會回歸,與趨勢跟蹤的邏輯剛好相反。本篇整理 Algo-trading with Saleh 的教學:用布林帶定位進出場、大時間框架 RSI 與 Supertrend 過濾趨勢,再以 LLM 把規則轉成 Python 代碼在 Jesse 框架回測。先說明:標題的「813%」屬單一教學案例的回測數字,本筆記重點是學習策略寫法與回測方法,而非跟單依據。

學習重點

詳細筆記

策略核心:不是純逆勢的均值回歸

講者開宗明義:均值回歸策略不以趨勢指標起步,因為我們不期望價格延續方向,而是期望它回到均值,建倉方向與當前市場方向相反。最經典的量度工具是布林帶 Bollinger Bands:中軸是一條移動平均線,上下軌是中軸加減兩倍標準差。背後是統計學的常態分佈概念:價格偏離均值達兩個標準差屬相對罕見的狀態,此後回歸均值的傾向較高。講者坦言記不起確切數字,但認為這個理論很有意思——這正是整個策略的根基:好倉在下軌(圖中綠線)開倉,淡倉則在上軌反向操作。策略的交易時間框架為 1 小時。

但講者強調,布林帶只負責「在哪個價位開倉」,不是進場訊號本身。真正的主軸是 RSI,而用法與傳統相反:傳統上 RSI 升穿 70(超買)是沽空訊號,講者卻想在大趨勢中趁回調買入。他的想法是:市場要有趨勢,但不即市追入,而是等價格回調到均值附近才進場,賭它之後再升。若只用 1 小時 RSI 判斷超買,機會窗口太窄,所以 RSI 改用 4 小時框架——大周期 RSI 高於 70,代表大級別動能強勁,期間內任何回調都是潛在買點。

進場條件:四重過濾

光有 RSI 仍會在無趨勢的橫行市產生假訊號——橫行市一樣可以出現 RSI 超買,一根大陽燭不代表趨勢成立。講者以圖例說明:某段橫行市中 RSI 確已超買,其後價格雖一度上升令好倉獲利,但同類位置充滿假突破,長期必被反覆止損。他於是加入兩層趨勢過濾:

  1. 雙 ADX 過濾:1 小時圖 ADX 須高於 20(不用常見的 40,因為想盡早捕捉趨勢、不想錯過太多交易),同時 4 小時圖 ADX 須高於 40。大周期確認強趨勢,小周期容忍早期訊號。
  2. 4 小時 Supertrend 方向:講者承認這是均值回歸策略卻仍需趨勢指標,只是不以其起步。關鍵技巧是把 Supertrend 放在 4 小時框架——1 小時圖上的短暫跌勢,在 4 小時圖可能仍是升勢(Supertrend 線在價格下方、顯示綠色),這種「大勢向上、小周期回調」正是要捕捉的形態。若 Supertrend 用回 1 小時,一回調就轉向,會錯失機會。

以好倉為例,完整進場條件為:4 小時 RSI > 70、4 小時 Supertrend 顯示升勢、4 小時 ADX > 40、1 小時 ADX > 20,四者同時成立。淡倉全部反向(4 小時 RSI < 30、Supertrend 跌勢等)。

TradingView 圖表:布林帶與 RSI 指標(截圖出自原片 Algo-trading with Saleh)

出場設計:布林帶止盈+六倍 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

Jesse 策略代碼:go_long 函數(截圖出自原片 Algo-trading with Saleh)

值得學習的是人手修正環節,LLM 並非一次寫對:

  1. 趨勢判斷錯誤:模型把「4 小時 Supertrend 升勢」寫成檢查某個布林值,講者改為比較現價與 Supertrend 線數值——價在線上回傳 1(升勢),否則回傳 0。其後回測發現策略只做好倉,追查下發現跌勢時應回傳 −1 而非 0,修正後淡倉才正常觸發。
  2. 多餘的移動止盈:模型自作主張在 update_position 中不斷按最新布林帶更新止盈價,講者並無此要求,直接刪除。他的心得:指令越具體,模型越乖乖照做;指令含糊,模型就會「自由發揮」。

另有一個限價單的細節:由於在下軌掛限價單,下一根 K 線下軌位置已變,舊掛單可能永遠無法成交——原片用圖例展示,若沿用舊掛單價,即使後來價格觸及新的下軌位置也不會開倉。Jesse 的做法是 should_cancel_entry 回傳 true,每根 K 線取消舊單、按新下軌重新掛單(前提仍是進場條件成立)。若策略用市價單則無需定義此方法。

回測設定上還有一個實戰教訓:策略用到 4 小時蠟燭圖,回測面板理應加入對應的 data route。漏設時 Jesse 回測會報錯但仍能在幕後補救完成;實盤交易時漏設卻會直接令 session 終止。講者特別提醒兩者後果不同,部署前必須檢查路由設定。

回測結果與講者的講法

回測設定:BTC-USDT 永續(Binance)、1 小時圖,手續費故意設定為 Binance 實際費率的約兩倍,預留滑點與資金費等隱藏成本。分階段結果如下(截至原片發佈、數據至 2025 年 7 月 20 日):

BTC 單標的回測權益曲線:+253%、37 宗交易(截圖出自原片 Algo-trading with Saleh)

BTC+ETH+DOGE 三標的回測統計:+813%、勝率 92%(截圖出自原片 Algo-trading with Saleh)

講者對結果有兩點保留,值得記下:第一,3.5 年 37 宗交易的樣本太少,統計意義不足——交易次數越多,回測結果越可信,這正是他擴展至多標的的原因(交易次數升至 75 宗);第二,平均持倉近 70 小時、虧損單平均持有逾 120 小時,實盤要承受持倉數日甚至浮虧數日的心理壓力,這一點回測數字不會告訴你。

此外,多標的回測要關閉 fast mode 與 benchmark 才能正常執行;講者亦提到目前只測了三隻加密貨幣,理論上可繼續尋找其他適合的標的進一步改善結果——但這句話本身也值得警惕:不斷試標的、挑表現好的留下,正是過度擬合的溫床,下文「欣利克的看法」會再談。

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

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

MT5 可行性速評

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 模型直接影響結果,不要以為換了平台數字就更可信。

欣利克的看法

名詞解釋

常見問題 FAQ

均值回歸策略和趨勢跟蹤策略有何分別?

均值回歸賭價格回到平均水平,逆當前方向建倉,特徵是勝率高、單筆盈利小、虧損大;趨勢跟蹤順勢而建,勝率較低但贏時贏大,兩者的盈虧結構剛好相反。本課的策略其實是混合體:大時間框架確認趨勢存在,小時間框架逆回調掛單,取兩者之長。

為甚麼 RSI 超買反而可以買入?

傳統用法把 RSI 高於 70 解讀為超買回軟訊號。本課改用 4 小時框架的 RSI:大周期 RSI 高於 70 代表大級別上升動能強勁,此時在 1 小時圖等價格回調至布林帶下軌買入,屬「順勢等回調」而非「賭見頂」。同一指標放在不同時間框架,含義可以完全相反。

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

不能這樣推論。該數字來自特定三隻加密貨幣與 2022–2025 年的單一時段,參數在同一批數據上調校,倉位又曾人手放大,且未經樣本外驗證。講者自己也承認 3.5 年 75 宗交易的樣本偏少。回測的價值在於驗證邏輯是否自洽,而非預測未來回報。

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

核心邏輯(布林帶、RSI、ADX、ATR)MQL5 全部內建,多時間框架亦易實現;但 Supertrend 要自訂指標,「每根 K 線按下軌重掛限價單」需要掛單管理邏輯,多標的組合則要寫多品種 EA。屬「可行但需自訂元件」一類,且 MT5 回測同樣受過度擬合與數據質素影響。

原影片

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

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

🏦 ZA Bank 開戶優惠

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

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

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

專屬邀請碼:P20923

立即開戶 → (聯盟連結)