
執行這個策略
複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。
告訴你的AI:
幫我設定 FinLab,重跑 S&P 500 布林通道回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/bollinger-bands-strategy-backtest
2016 年 9 月到 2026 年 11 月,我們在美股測了四種布林通道策略,沒有一種贏過直接買 QQQ。表現最好的是最經典的均值回歸:S&P 500 成分股收盤跌破下軌就買,回到中軌就賣。它年化 14.3%、日夏普 0.75,贏等權 S&P 500 的 RSP(11.7%、0.70),輸含息 QQQ(19.2%、0.89)。它一年週轉 33 次,每邊 0.1% 成本下年化只剩 6.9%。擠壓突破和用在 QQQ 本身的兩種規則更差,36 組參數沒有一組贏 QQQ。
台股的布林通道研究在布林通道怎麼用才對:觸下軌買進在 2015 到 2021 年的研究段年化只有 2.5%。本文把同樣的教科書規則搬到美股,股票池用每一天真實的 S&P 500 成分股,另外測 QQQ 本身。通道、進出場和過關條件都在看到結果之前寫定。
布林通道策略關鍵數字
| 設計 | 日夏普 | 年化報酬 | 最大回撤 | 贏 QQQ | 贏 RSP | 前/後半段夏普 | 每邊 0.1% 成本的夏普 |
|---|---|---|---|---|---|---|---|
| S&P 500 觸下軌買進 | 0.75 | 14.3% | -43.0% | 0 / 9 | 5 / 9 | 0.95 / 0.52 | 0.43 |
| S&P 500 擠壓突破 | 0.70 | 8.0% | -16.8% | 0 / 9 | 3 / 9 | 1.11 / 0.32 | 0.34 |
| QQQ 觸下軌買進 | 0.29 | 3.3% | -22.4% | 0 / 9 | 0 / 9 | 0.43 / 0.13 | 0.24 |
| QQQ 擠壓突破 | 0.15 | 0.7% | -13.7% | 0 / 9 | 0 / 9 | 0.16 / 0.13 | 0.09 |
| RSP 含息 | 0.70 | 11.7% | -39.0% | 對照 | 0.77 / 0.62 | ||
| SPY 含息 | 0.85 | 14.5% | -33.7% | 對照 | 0.93 / 0.76 | ||
| QQQ 含息 | 0.89 | 19.2% | -35.1% | 基準 | 1.16 / 0.64 |
個股規則與三檔基金都是 2016-09-01 到 2026-11-05,股息再投入,前後半段以 2021-10-01 切開。QQQ 的兩條規則從第一筆交易起算(2016-09-09 與 2016-09-06),和同一段的 QQQ 比較,QQQ 在這兩段的夏普是 0.90 和 0.89。
布林通道、%B 與擠壓在量什麼
John Bollinger 在《Bollinger on Bollinger Bands》(2001)裡的定義是:中軌是 N 日移動平均,上下軌各離中軌 k 個標準差,最常見的設定是 20 日、k = 2。從通道可以讀出兩個數字:
- %B:收盤價在通道裡的位置。下軌是 0,中軌是 0.5,上軌是 1;收盤跌破下軌時 %B 小於 0。
- 帶寬(BandWidth):上下軌距離除以中軌。價格安靜時帶寬會收窄。帶寬來到約半年最低,就叫擠壓,常出現在一段較大的波動之前,方向不一定。
最常見的兩種布林通道策略就從這裡來。一種在下軌買弱勢股,等價格回到平均;另一種等擠壓出現,再買向上突破上軌的股票。
測試的四條規則
- S&P 500 觸下軌買進(%B 均值回歸): 成分股收盤跌破下軌就買,收盤回到中軌以上(%B 至少 0.5)或離開指數就賣。
- S&P 500 擠壓突破: 成分股收盤突破上軌,而且前 20 天裡至少有一天帶寬在 126 日最低,就買;收盤跌破中軌或離開指數就賣。
- QQQ 觸下軌買進與QQQ 擠壓突破: 同樣兩條規則只用在 QQQ 上,有訊號時全部買 QQQ,其餘時間留現金。
每條規則都跑 3 × 3 的參數:N 取 15、20、25 日,k 取 1.5、2、2.5,原設定是 20 日、2 倍標準差。標準差用母體標準差,和 Bollinger 的定義相同。個股規則等權持有所有符合的成分股,單檔上限 5%,符合的股票不足 20 檔時留現金。
策略怎樣才算過關
「贏」的意思是同一段交易日裡,日夏普高於含息 QQQ。夏普是日報酬平均除以標準差,再乘以 √252,不扣無風險利率。以下六個條件都在看到結果之前寫定。
- 鄰近參數: 9 組參數裡七成以上要贏 QQQ。
- 前後兩段: 回測期間對半切,原設定兩段都要贏。
- 含成本: finlab 美股預設成本(0)和每邊 0.1% 下都要贏。
- 不靠單一年份: 拿掉領先最多的那一個年度,仍要贏。
- 固定持有同樣曝險: 要贏「平均投入比例固定持有自己的基金、其餘現金、每月再平衡」的組合。QQQ 規則對照 QQQ,個股規則對照 RSP。
- 現金: 規則可能留現金,所以扣掉 BIL(短期國庫券)後的夏普也要贏 QQQ。
四條規則前四項全部沒過,第五項只有兩條 S&P 500 規則通過,擠壓突破只多 0.002。
S&P 500 觸下軌買進:贏 RSP,輸 QQQ
這條規則持股的中位數是 93 檔,平均 118.5 檔。2020-03-16 持有 478 檔,幾乎是整個指數,因為大部分成分股都跌破了下軌。全期只有 85 天不足 20 檔,平均投入 98.6%。這也是它最大回撤 -43.0% 比 RSP 的 -39.0% 和 QQQ 的 -35.1% 都深的原因:崩盤時股票一路跌破下軌,規則就一路買進,要等漲回中軌才賣。
十年間共平倉 22,631 筆交易,69.1% 賺錢,中位數賺 2.19%,持有中位數 12 個交易日。平均每筆只賺 0.90%,不到中位數的一半,因為虧損的交易比賺錢的大得多。這條規則光看勝率看不出好壞。

對等權指數的優勢存在,但很小。日夏普 0.75 對 RSP 的 0.70;以規則平均 98.6% 的曝險固定持有 RSP,夏普是 0.70。9 組參數裡 5 組贏 RSP,25 日通道的三組比較低(0.59 到 0.67)。相對 RSP 最好的年份是 2020 年(34.7% 對 12.7%)、2019 年(48.6% 對 28.9%)和 2023 年(18.1% 對 13.7%),落後最多的是 2017 年(11.3% 對 18.5%)、2026 年至今(7.8% 對 14.6%)和 2018 年(-12.0% 對 -7.8%)。對 QQQ 領先最多的是 2022 年,規則虧 13.3%,QQQ 虧 32.6%;拿掉 2022 年,夏普 0.92 對 QQQ 的 1.23。
這個現象和個股的短期反轉相符。Jegadeesh(1990)發現美股的月報酬下個月傾向反轉,Lehmann(1990)在週報酬也看到反轉。收盤跌破下軌的股票就是短期輸家,規則賺的是反彈。
反彈的幅度不大,所以成本決定了結果。目標權重單邊一年週轉 33 次,每邊 0.1% 大約是每年 6.7% 的資產,和年化從 14.3% 掉到 6.9% 的差距相近;夏普從 0.75 掉到 0.43,低於 RSP。週轉率這麼高,實際的滑價會比手續費更重要。

布林通道擠壓:風險低,報酬也低
擠壓突破持股的中位數是 34 檔,平均 39.5 檔,有 754 天不足 20 檔,平均投入 81.7%。它的風險比觸下軌買進低很多:年化波動 11.9%、最大回撤 -16.8%,觸下軌買進是 20.8% 和 -43.0%。報酬也比較低,年化 8.0%。
6,716 筆已平倉交易呈現典型的突破型態:只有 37.3% 賺錢,中位數虧 1.39%,平均卻賺 0.33%,少數大幅突破的交易彌補了大量小虧損。日夏普 0.70 和 RSP 的 0.70 打平,以 81.7% 曝險固定持有 RSP 也是 0.70,規則只多一點(0.704 對 0.702)。前半段 1.11 接近 QQQ 的 1.16,後半段掉到 0.32,QQQ 是 0.64。最好的參數是 25 日、k = 2,夏普 0.78。一年週轉 21 次,每邊 0.1% 成本下夏普掉到 0.34。
QQQ 上的布林通道:大多時間空手
QQQ 很少收在下軌之下。觸下軌買進十年只平倉 39 筆,持有 QQQ 的天數佔 18.2%。79.5% 的交易賺錢,中位數賺 1.66%,年化卻只有 3.3%、夏普 0.29。同樣的平均曝險每天持有,也就是 18.2% 的資產放 QQQ、其餘現金,夏普是 0.90,是規則的三倍。它大多時間空手,最大回撤仍有 -22.4%,因為賣壓初期就買進的部位會一路抱到漲回中軌,中間沒有停損。
擠壓突破用在 QQQ 上只交易 16 次,37.5% 賺錢,持有天數佔 10.2%。年化 0.7%、夏普 0.15,9 組參數從 -0.36 到 0.48。

粗體是原設定,36 格全部低於 QQQ。個股規則落在 0.58 到 0.78 的窄區間,20 日、2 倍標準差不是特別突出的尖峰,也沒有一片高於 QQQ 的高原。QQQ 規則的數字跳動很大,因為每一格只由少數幾筆交易決定。

兩條個股規則都是前半段比較好,RSP 也一樣(0.77 對 0.62),但沒有一段贏 QQQ。
和其他研究對照
技術分析規則的證據一向分歧。Park 與 Irwin(2007)整理 95 篇近代研究,56 篇發現獲利、20 篇沒有、19 篇結果混合;他們也指出很多測試有資料探勘、事後挑規則、風險與交易成本估得粗糙等問題。固定規則、固定參數格點、重跑成本,就是針對這些問題設計的,布林通道規則在這裡沒有撐過。
我們在 S&P 500 成分股上的其他個股研究結果相近。黃金交叉回測在 2017 到 2026 年年化 11.5%、夏普 0.72,52 週新高選股回測的 63 組參數全部輸 QQQ。那兩個是趨勢規則,一年週轉約 2.5 次和 13 次。本文的觸下軌買進一年週轉 33 次,扣成本前賺得比兩者都多;每邊 0.1% 成本下夏普 0.43,低於黃金交叉的 0.68。另一種加上市場狀態濾網、用在槓桿 ETF 的短線均值回歸,見美股短線均值回歸策略。
程式碼
這段是 S&P 500 觸下軌買進。用到 2026-11-05 的資料,它印出的日夏普約 0.75,FinLab 修訂資料時最後一位可能變動。research.py 另外保留一家公司一個股別,也包含另外三條規則、36 組參數和六項檢查。
顯示程式碼
import finlab
from finlab import data
from finlab.backtest import sim
finlab.login()
data.set_market("us")
close = data.get("us_price:adj_close")
members = data.get("us_index_constituents:sp500").astype(bool)
# 兩張表都有的代號,成分股對齊交易日
tickers = members.columns.intersection(close.columns)
close = close[tickers]
members = members[tickers].reindex(close.index, method="ffill").fillna(False).astype(bool)
# 20 日布林通道,上下各 2 個標準差
middle = close.rolling(20).mean()
lower = middle - 2 * close.rolling(20).std(ddof=0)
# 成分股收盤跌破下軌就買,回到中軌就賣
buy = (close < lower) & members
sell = (close >= middle) | ~members
position = buy.hold_until(sell).loc["2016-09-01":]
# 等權、單檔上限 5%、隔天開盤成交
report = sim(position.loc[:, position.any()], position_limit=0.05, trade_at_price="open",
market="us", upload=False)
returns = report.creturn.pct_change().dropna()
print("日夏普:", round(returns.mean() / returns.std() * 252 ** 0.5, 2))不想自己寫也可以。照 AI 輔助安裝流程裝好 FinLab skill,或直接到 FinLab Studio 用白話請 AI 重跑,例如「把布林通道擠壓改成 Nasdaq 100 成分股」或「觸下軌買進加上 5 天時間停損,每邊收 0.05% 成本」。
回測方法
| 項目 | 做法 |
|---|---|
| 回測區間 | 2016-09-01 至 2026-11-05。FinLab 美股價格從 2016 年 1 月開始,前幾個月用來暖機 126 日帶寬 |
| 股票池 | 每天的 S&P 500 成分股,一家公司留一個股別。FinLab 沒有價格的成分股略過 |
| 流動性 | 除了指數成分外未設濾網。未估容量 |
| 週轉率 | 目標權重單邊一年:觸下軌買進 33 次、擠壓突破 21 次;QQQ 兩條規則 3.9 次與 1.6 次 |
| 訊號 | 通道只用訊號日以前的收盤價,避免前視偏差 |
| 權重 | 等權、單檔上限 5%,名單變動的日子重新等權;現金沒有利息 |
| 成交 | 收盤算訊號、隔天開盤成交,使用還原價 |
| 成本 | finlab sim() 美股預設 0,另跑每邊 0.1%。未另估滑價 |
| 稅 | 未計 |
| 樣本 | 全段都是樣本內,前後兩段只檢查穩定度,沒有做樣本外驗證 |
這個結果能說明什麼
在這段期間和這些規則下,S&P 500 成分股觸下軌買進,扣成本前每單位風險賺得比等權持有全部成分股多一點,扣掉實際成本後就比較少。沒有一條規則贏 QQQ,而 QQQ 剛好走過特別強的十年。本文只涵蓋美國大型、流動性高的股票;小型股、其他市場,或加上趨勢條件之類的濾網,結果都可能不同,需要另外測。
想從頭學回測,可以看什麼是回測和美股回測教學;站上其他美股研究都收在美股量化交易策略比較。
常見問題
布林通道策略哪一種最好?
本文測的四種都沒有贏 QQQ。最強的是 S&P 500 成分股收盤跌破下軌就買、回到中軌就賣:扣成本前年化 14.3%、夏普 0.75,QQQ 是 0.89。
布林通道觸下軌買進有用嗎?
用在 S&P 500 個股,扣成本前略贏等權指數,夏普 0.75 對 0.70,22,631 筆交易有 69.1% 賺錢。每邊收 0.1% 成本後,年化掉到 6.9%。用在 QQQ 本身,年化只有 3.3%。
布林通道擠壓是什麼?
擠壓是帶寬(上下軌距離除以中軌)來到約半年最低。本文在擠壓後 20 天內買進突破上軌的 S&P 500 成分股:年化 8.0%、最大回撤 -16.8%、夏普 0.70,和 RSP 相同。
20 日、2 倍標準差是最好的參數嗎?
在這裡不是,也沒有特別突出的組合。觸下軌買進的 15 日通道夏普 0.76 到 0.77,25 日通道 0.59 到 0.67;擠壓突破是 25 日、k = 2 最好,0.78。全部低於 QQQ 的 0.89。
布林通道用在 QQQ 上有用嗎?
在本文的測試裡,拿來擇時沒有用。QQQ 的兩條規則大多時間空手,夏普 0.29 和 0.15;每天固定持有 18.2% 的 QQQ 是 0.90。本文沒有測 SPY。
交易成本對布林通道策略影響多大?
對個股規則影響很大。觸下軌買進一年週轉 33 次,每邊 0.1% 讓年化從 14.3% 掉到 6.9%,夏普從 0.75 掉到 0.43。
美股和台股的結果一樣嗎?
方向相近。台股的布林通道研究裡,觸下軌買進在研究段年化 2.5%。美股這邊扣成本前贏等權指數,扣成本後也輸。
可以自己重跑嗎?
可以。透過 AI 輔助安裝流程裝好 FinLab skill,下載下面的 research.py,執行 python research.py。
延伸閱讀
- 海龜交易法則回測:唐奇安通道突破,美股 ETF 與台股,同一套驗證。
- 黃金交叉回測:S&P 500 個股 50/200 均線交叉。
- 52 週新高選股回測:買創新高的 S&P 500 成分股、均線出場。
下載資源
| 檔案 | 內容 |
|---|---|
| research.py | 完整研究:四條規則、36 組參數、前後兩段、成本重跑與六項檢查 |
| data.csv | 四條規則原設定,加上 QQQ、SPY、RSP 的每日淨值 |
| metrics.json | 本文背後的統計,包含交易、持股數與逐年報酬 |
投資警語:本文僅供教學參考,不構成投資建議。過去績效不代表未來表現,投資有風險。本文所有回測均為全段樣本內結果,前後兩段未經樣本外驗證。
最後更新:2026-11|回測區間:2016-09~2026-11|資料截至 2026-11-05,重跑日 2026-11-07|基準:QQQ 含息|作者:FinLab 量化研究團隊(經量化研究員審閱)
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

