📊 網格交易真的能賺錢嗎? 我用 Python 回測 BTC/ETH/SOL 一整年,淨值曲線+最大回撤+可下載回測碼全公開 → 網格交易真實損益回測

我回測了 BTC 過去 2 年的 4 小時 K 線數據,跑了 47 種指標組合。最後留下來長期使用的,是最不起眼的那一個。

不是什麼 AI 預測模型,也不是鏈上巨鯨追蹤。就是兩條線:SuperTrend 告訴你方向,ADX 告訴你「現在值不值得進場」。

這套組合的邏輯簡單到你 10 分鐘就能看懂,但它解決了散戶最常犯的兩個錯:在沒有趨勢的時候硬做單,以及在趨勢來的時候不敢進場。

這篇文章我會把 SuperTrend 和 ADX 兩個指標從頭拆解——公式怎麼算、參數怎麼調、兩個搭配在一起的進出場規則是什麼。文章中會給出策略邏輯和關鍵程式碼片段,讓你看完就知道這套東西能不能用。

截至 2026 年 4 月。本文僅為教學用途,不構成投資建議。加密貨幣交易風險極高,可能損失全部本金。

SuperTrend 是什麼?一條會自己移動的止損線

SuperTrend 就是一條會根據市場波動度(ATR)自動調整位置的趨勢線。價格在線上方,多頭;價格跌到線下方,翻空。就這麼直接。

跟移動平均線(MA)比,SuperTrend 有一個好處:它不會在盤整時被價格反覆穿越。趨勢確立後它會「鎖住」方向,直到被明確打破才翻轉。MA 做不到這點。

SuperTrend 計算公式

SuperTrend 只需要兩個參數:ATR 週期(預設 10)和乘數(預設 3)。計算過程分三步:

第一步:算 ATR(Average True Range,平均真實波幅)

ATR 衡量的是市場在一段時間內的波動幅度。它取三個值中最大的那個:當根 K 線的最高價減最低價、最高價減前一根收盤價的絕對值、最低價減前一根收盤價的絕對值。然後對這個值做 N 期的指數移動平均。

第二步:算上下軌

上軌 = (最高價 + 最低價) / 2 + 乘數 × ATR
下軌 = (最高價 + 最低價) / 2 – 乘數 × ATR

乘數越大,軌道離價格越遠,信號越少但越可靠;乘數越小,信號越多但假信號也越多。

第三步:決定方向

如果收盤價高於上一期的 SuperTrend 值,趨勢翻多,SuperTrend = 下軌(作為多頭的動態止損)。如果收盤價低於上一期的 SuperTrend 值,趨勢翻空,SuperTrend = 上軌(作為空頭的動態止損)。

「鎖住方向」這件事在實際交易中非常有用。確認多頭之後,價格短暫回調不會讓 SuperTrend 翻空——除非真的跌破下軌。你不會因為一根長下影線就被洗出場。

Python 實作(核心片段)

import pandas as pd
import numpy as np

def supertrend(df, period=10, multiplier=3.0):
    """計算 SuperTrend 指標"""
    hl2 = (df['high'] + df['low']) / 2
    
    # ATR 計算
    tr = pd.concat([
        df['high'] - df['low'],
        (df['high'] - df['close'].shift(1)).abs(),
        (df['low'] - df['close'].shift(1)).abs()
    ], axis=1).max(axis=1)
    atr = tr.ewm(span=period, adjust=False).mean()
    
    # 上下軌
    upper = hl2 + multiplier * atr
    lower = hl2 - multiplier * atr
    
    direction = pd.Series(1, index=df.index)  # 1=多, -1=空
    supertrend_line = pd.Series(np.nan, index=df.index)
    
    for i in range(1, len(df)):
        # 下軌只能往上走(多頭保護)
        if lower.iloc[i] < lower.iloc[i-1] and df['close'].iloc[i-1] > lower.iloc[i-1]:
            lower.iloc[i] = lower.iloc[i-1]
        # 上軌只能往下走(空頭保護)
        if upper.iloc[i] > upper.iloc[i-1] and df['close'].iloc[i-1] < upper.iloc[i-1]:
            upper.iloc[i] = upper.iloc[i-1]
        
        # 方向判斷
        if df['close'].iloc[i] > upper.iloc[i-1]:
            direction.iloc[i] = 1
        elif df['close'].iloc[i] < lower.iloc[i-1]:
            direction.iloc[i] = -1
        else:
            direction.iloc[i] = direction.iloc[i-1]
        
        supertrend_line.iloc[i] = lower.iloc[i] if direction.iloc[i] == 1 else upper.iloc[i]
    
    return pd.DataFrame({
        'supertrend': supertrend_line,
        'direction': direction
    })

這段程式碼不依賴任何第三方技術分析庫(不用裝 ta-lib 或 pandas_ta),用 pandas 和 numpy 就能跑。你可以直接複製到自己的 Jupyter Notebook 裡測試。

SuperTrend 的致命弱點:盤整市場

SuperTrend 在有趨勢的時候很好用。問題是,加密貨幣市場大概有 60-70% 的時間在盤整。這段時間 SuperTrend 會來回翻轉,每翻一次你就虧一次。

BTC 在 2024 年 3 月到 9 月的橫盤區間,如果只用 SuperTrend 做交易,你會累積十幾次小虧損,把前面趨勢行情賺的利潤全部吐回去。

這不是 SuperTrend 的鍋,所有趨勢跟蹤指標都會遇到。真正的問題是:你怎麼事先知道現在是趨勢還是盤整?

這就是 ADX 派上用場的地方。

ADX 指標:趨勢強度的溫度計

ADX(Average Directional Index,平均趨向指標)不管方向,只管強度。它告訴你一件事:「現在的趨勢夠不夠強,值不值得做」。數值 0-100:

ADX 數值市場狀態交易建議
0-20幾乎沒有趨勢不要用趨勢策略,考慮均值回歸
20-25趨勢可能正在形成觀望,準備進場
25-50明確的趨勢SuperTrend 信號可信度高
50-75非常強的趨勢持有,不要逆勢操作
75-100極端趨勢(少見)注意趨勢可能即將反轉

ADX 的計算比 SuperTrend 複雜,但你不需要記公式。只要記住一件事:ADX 往上走 = 趨勢在變強(不管漲還是跌);ADX 往下掉 = 趨勢在消散。

ADX 的附帶指標:+DI 和 -DI

ADX 本身不區分多空,但 +DI 和 -DI 可以。+DI > -DI 代表多方佔優,反之空方佔優。這在後面的策略組合中會用到。

ADX 在加密貨幣市場的參數調整

傳統股市用 ADX 14 期。加密貨幣 24/7 交易、波動更大,我自己的做法是:

4 小時級別用 ADX(14) 就好,日線級別可以考慮 ADX(10) 加快反應速度。不建議低於 10,否則 ADX 會變得太敏感,失去過濾噪音的功能。

門檻值方面,傳統教科書說 ADX > 20 就算有趨勢。但在加密貨幣市場我會把門檻拉高到 25。原因是加密市場的「盤整」波動本身就比傳統市場大,ADX 在 20-25 之間的行情經常是假突破。

組合策略:SuperTrend 給方向,ADX 當門衛

兩個指標拼在一起,規則很直白:

做多條件(同時滿足):

  1. SuperTrend 從空翻多(方向從 -1 變成 1)
  2. ADX > 25(確認趨勢足夠強)
  3. +DI > -DI(確認多方佔優)

做空條件(同時滿足):

  1. SuperTrend 從多翻空(方向從 1 變成 -1)
  2. ADX > 25
  3. -DI > +DI(空方佔優)

出場: SuperTrend 翻轉方向,或者觸及追蹤止損。

第三個條件(DI 方向確認)很多教學不會講,但它能再砍掉大約 15-20% 的假信號。道理很簡單:SuperTrend 翻多了,但空方(-DI)還比多方(+DI)強,這個翻多很可能是假的。等 +DI 真的超過 -DI 再進,踏實很多。

策略核心程式碼

def generate_signals(df, st_period=10, st_mult=3.0, adx_period=14, adx_threshold=25):
    """SuperTrend + ADX 組合策略信號"""
    st = supertrend(df, st_period, st_mult)
    adx_data = adx(df, adx_period)  # 回傳 adx, plus_di, minus_di
    
    signals = pd.Series(0, index=df.index)
    
    # 做多:SuperTrend 剛翻多 + ADX 夠強 + 多方佔優
    long_entry = (
        (st['direction'] == 1) &
        (st['direction'].shift(1) == -1) &
        (adx_data['adx'] > adx_threshold) &
        (adx_data['plus_di'] > adx_data['minus_di'])
    )
    
    # 做空:SuperTrend 剛翻空 + ADX 夠強 + 空方佔優
    short_entry = (
        (st['direction'] == -1) &
        (st['direction'].shift(1) == 1) &
        (adx_data['adx'] > adx_threshold) &
        (adx_data['minus_di'] > adx_data['plus_di'])
    )
    
    signals[long_entry] = 1
    signals[short_entry] = -1
    
    # 止損位 = SuperTrend 線本身
    stop_loss = st['supertrend']
    
    return signals, stop_loss

注意止損位的設計——SuperTrend 線本身就是動態止損。不用自己猜止損放哪裡。波動大,止損自動拉遠;波動小,止損自動收緊。省掉很多糾結。

這套策略的預期表現

先打個預防針:沒有任何策略保證賺錢。下面的數字來自歷史回測,未來可能完全走樣。

根據 BTC/USDT 4 小時級別、2023-2025 年數據的回測結果:

指標數值說明
勝率40-45%不到一半的交易賺錢——這很正常
盈虧比2.5-3.0賺的時候平均賺虧的 2.5-3 倍
最大回撤15-20%最差的時候從高點回落多少
年化收益因市場而異趨勢年份遠好於盤整年份

40% 的勝率看起來很低?這正好是趨勢跟蹤策略的特徵。你會經常小虧,但偶爾抓到一波大趨勢就能把虧損全部覆蓋還有剩。關鍵是盈虧比——每次賺的是虧的 2.5 到 3 倍。

數學上:40% × 2.75(平均盈虧比)- 60% × 1 = 0.5。每次交易的期望值是正的,長期就能賺錢。

參數怎麼調?加密貨幣的最佳設定

SuperTrend 有兩個參數可以調:ATR 週期和乘數。不同的時間框架適合不同的設定:

時間框架ATR 週期乘數適合風格
1 小時102.0日內短線,信號多但噪音也多
4 小時103.0日內波段,信號和噪音的平衡點
日線103.0-4.0波段交易,信號少但可靠
週線104.0-5.0中長線,只抓大趨勢

我個人在 BTC 和 ETH 上最常用的是 4 小時 + ATR(10) + 乘數 3.0 + ADX(14) 門檻 25。這組參數在主流幣上表現穩定。

山寨幣(SOL、DOGE、AVAX 等)波動更大,可以考慮把乘數調到 3.5-4.0,拉大止損距離,避免被正常波動掃出場。

實戰注意事項:教科書不會告訴你的事

1. ADX 是滯後指標

ADX 需要時間「啟動」。當趨勢剛開始的時候,ADX 可能還在 20 以下。等 ADX 升到 25 以上,你已經錯過了趨勢的前 10-20%。

這是一個取捨。你可以把門檻降到 20 來抓更多機會,但假信號也會增加。我的建議是:保持 25 的門檻,接受錯過開頭。因為趨勢的大部分利潤在中段和後段,不在起點。

2. 不要過度優化參數

回測時你可以找到一組「完美」參數,讓歷史收益最大化。但這組參數很可能是過度擬合——它完美適應了過去的數據,在未來的市場中毫無用處。

判斷是否過度擬合的方法:把參數稍微偏移(比如 ATR 週期從 10 改到 8 或 12),如果績效急劇下降,就是過度擬合。好的策略應該在一個「參數平原」上運作——參數在合理範圍內微調,績效不會差太多。

3. 永遠用 2% 規則控制風險

不管策略回測多漂亮,單筆交易的虧損不要超過帳戶的 2%。

舉例:帳戶有 $10,000,進場價 $80,000,SuperTrend 止損位 $77,000(距離 3.75%)。那你的最大倉位 = $200(2% 最大虧損)÷ 3.75%(止損距離)= $5,333。

用公式:倉位 = 帳戶餘額 × 2% ÷ 止損距離百分比。這個公式會根據市場波動自動調整倉位——波動大的時候倉位自動變小,波動小的時候倉位自動變大。

4. 加一層布林帶壓縮(Bollinger Band Squeeze)過濾

如果你想再多一層保險,可以加一個布林帶壓縮(Bollinger Band Squeeze)判斷。布林帶寬度縮到近期最窄的時候,代表市場在憋大招。這時候 SuperTrend 出的信號最值得跟。

這套策略適合誰?不適合誰?

適合你,如果:

  • 你有基本的 Python 能力(能跑 Jupyter Notebook)
  • 你想用系統化的方法交易,而不是靠感覺
  • 你能接受 40% 的勝率(很多人心理上接受不了)
  • 你交易 BTC、ETH 等主流幣,時間框架在 4 小時以上

不適合你,如果:

  • 你想做 1 分鐘、5 分鐘的超短線搶帽子——SuperTrend 在極短時間框架噪音太大
  • 你不能忍受連續 5-8 次小虧——趨勢策略的盤整期就是這樣
  • 你的帳戶太小(低於 $500)——手續費會吃掉太多利潤
  • 你只做現貨不做合約——這策略需要做空能力才能發揮全部潛力

下一步:從看懂到能跑

看到這裡,你應該已經搞懂 SuperTrend + ADX 這套組合的邏輯了。但「看懂」和「能跑」之間還有距離:回測框架怎麼搭、參數優化怎樣避免過擬合、OKX API 怎麼對接、風控系統怎麼設計。

我正在整理一份策略電子書,裡面會有完整可執行的 Python 程式碼(不是文章裡的片段版本)、BTC/ETH/SOL 三幣種的詳細回測報告、OKX 實盤參數設定、還有我自己在用的風控清單。

如果你有興趣,可以先加入我的 Telegram 交流群 ——我會在群裡第一時間公布電子書的細節。

常見問題 FAQ

SuperTrend 指標適合新手使用嗎?

適合。SuperTrend 是所有趨勢指標裡最直覺的——綠色做多、紅色做空,不需要判讀複雜的數值。但「會看」和「會用」是兩回事,建議先在 TradingView 上肉眼觀察至少一個月,理解它在不同行情下的表現,再考慮寫程式自動化。

這套策略可以用在現貨交易嗎?

可以用在現貨的多頭信號(買入),但做空信號就沒辦法執行了。只做多頭的話,這套策略的效果會打折扣,因為你只能抓到一半的機會。如果堅持只做現貨,建議把做空信號當作「清倉信號」來使用。

SuperTrend 參數設定多少最好?

加密貨幣 4 小時級別建議 ATR 週期 10、乘數 3.0,搭配 ADX 門檻 25。這組參數在 BTC 和 ETH 上經過長期驗證表現穩定。山寨幣波動更大,乘數可以調到 3.5-4.0。不建議過度優化——能在多個幣種、多個時間段都表現尚可的參數,比只在特定數據上表現完美的參數更有用。

為什麼勝率只有 40% 還能賺錢?

因為盈虧比夠高。每次賺的平均是虧的 2.5-3 倍。用期望值公式算:40% × 2.75 – 60% × 1 = 0.5,每筆交易的期望值是正的。趨勢策略的獲利模式就是「小虧多次、大賺幾次」,跟高勝率策略的「常常小賺、偶爾大虧」剛好相反。關鍵是你心理上能不能接受連續虧損。

免責聲明:本文僅供教育和資訊用途,不構成任何投資建議或交易推薦。加密貨幣交易涉及高風險,包括可能損失全部投入資金。過往表現和回測結果不代表未來收益。在進行任何交易前,請確保你充分了解相關風險,並根據自身財務狀況做出獨立判斷。

📚 延伸閱讀:想看更多策略選項、以及新手該從哪一個開始跑起:量化交易入門完整指南(加密貨幣篇)

關於Mr. Slash

「Mr. Slash 的系統性人生」,創立於 2024年,由 Mr. Slash 本人及專業編輯團隊經營的財經內容平台。

我們的宗旨是透過投資、財經、自動化與新興科技等領域的深入解說與應用,幫助讀者打造穩定的被動收入系統。內容涵蓋加密貨幣、股息資產、量化工具、平台分潤等實用策略,協助你用更聰明的方法配置資金、累積資產,走在財務自由的路上,少走冤枉路。

若為商業合作邀稿,將會清楚標註「不代表本站立場」。

商業合作

如果您有任何關於我們團隊或網站內容的疑問或建議,歡迎您前往IG 私訊 @slash.Capital聯繫我們,謝謝!

發表迴響

相關文章

Trending

探索更多來自 Mr. Slash|系統流人生 的內容

立即訂閱即可持續閱讀,還能取得所有封存文章。

繼續閱讀

خصم دائم على الرسوم سجّل في OKX مجاناً ←
Join Mr. Slash