
執行這個策略
複製提示詞,讓 AI 依照上方證據的資料、條件與風險檢查重跑一次。
告訴你的AI:
設定 FinLab,重現這篇文章量價背離及原策略濾網的台股回測,請讀:https://finlab.finance/setup?relatedUrl=/blog/price-volume-divergence-backtest
在本次 2018 年至 2026 年的台股測試中,量縮創新低買進、量縮創新高排除,以及三支既有策略加上背離濾網,共 8 個設計都未通過全部驗證。量縮新低買進的原設定年化 −9.0%、日夏普 −0.48;新高量縮排除也讓高成交額股票池的日夏普從 0.65 降到 0.61。本文以反面教材為主,檢查把「量價背離是反轉前兆」落成明確買賣規則之後,能否改善投資組合。
量價關係與背離,這次怎麼定義
量價關係是在觀察價格變化時,一起看成交量的變化。量價背離則是價格突破某個位置,成交量沒有相應增加。常見說法包含價漲量縮、價跌量縮;要回測,還得回答「跟哪段價格比」「量縮到多少」「下一步做什麼」。
本次不靠肉眼畫趨勢線,固定使用下面兩個訊號。價格用還原收盤價,避免配息與拆股造成假突破;成交量用當日成交股數,跟前 20 個交易日、排除當天的均量比較。
| 名稱 | 明確條件 | 測試動作 |
|---|---|---|
| 看空背離 | 今日還原收盤價高於前 N 日最高價,當日量低於前 20 日均量乘 r | 換股時排除,或持有中提前退出 |
| 看多背離 | 今日還原收盤價低於前 N 日最低價,同樣符合量縮 | 每週買進,依成交額選最多 30 檔 |
| 原參數 | N=40 個交易日,r=0.8 | 代表突破前 40 日極值,量少於原均量的八成 |
「看多」與「看空」是市場對訊號的慣用稱呼,本文會用結果檢查這些方向是否成立。量縮新低也可能只是需求持續減弱,新高量縮也可能出現在持續上漲的過程,訊號名稱本身沒有預測保證。
這套規則與 OBV 累積量能背離不同:OBV 依每天漲跌把成交量累加或扣掉,這裡只看突破當日的量是否低於均量。週轉率研究則把成交股數除以歷史股數,研究換手速度,不判斷量價方向。
單獨使用:量縮新低沒有帶來反轉優勢
股票池採歷史上市櫃四碼普通股,排除 ETF 等 0 開頭商品與 91 開頭存託憑證,要求近 20 日平均成交額大於 2,000 萬元,當天有價格與成交量。看多背離在符合訊號的股票裡按成交額選前 30 檔,每檔固定 1/30,選不滿留現金。
看空背離的對照組,是同一股票池成交額最高 30 檔,每週更新。排除版刪掉這 30 檔裡有看空背離者,空出的資金留現金,不往後補其他股票。這樣比較才能分辨排除本身的效果。
| 設計 | 平均目標投入比例 | 年化報酬 | 日夏普 | 最大回撤 | 贏 0050 的參數組 |
|---|---|---|---|---|---|
| 量縮新低買進 | 34.1% | −9.0% | −0.48 | −62.2% | 0/9 |
| 高成交額 30 檔對照 | 100% | 16.9% | 0.65 | −54.1% | 對照 |
| 高成交額 30 檔排除看空背離 | 98.3% | 15.1% | 0.61 | −53.8% | 0/9 |
| 0050 含息持有 | 100% | 22.4% | 1.08 | −34.0% | 基準 |

量縮新低版本大部分資金在現金,仍出現六成以上回撤。這說明低投入比例不等於低風險:少量資金反覆買入下跌股票,虧損也可能持續累積。高成交額排除版的最大回撤只少約 0.3 個百分點,年化卻少約 1.8 個百分點。這段資料不支持單憑新高量縮,就把股票從高成交額名單中拿掉。
文章的日夏普以零利率計算;互動報告使用套件預設的 2% 無風險利率,兩者夏普口徑不同。報告淨值與年化、回撤已對齊共同區間,交易紀錄保留開倉資訊。
疊在既有策略上:贏指數,還要比原策略好
單獨訊號無效,不代表加在已有選股能力的策略上必然無效。本次選定三種不同機制,開跑前便寫定名單:
- 極小型股 30 檔:市值排序,每月底換股,原策略沒有流動性門檻。
- 營業利益率三因子:營業利益率、動能與低波動,前 20 檔平方加權。
- 營收創新高選股:營收與價格趨勢,每月指定日期換股,保留原本 10% 停損。
先把策略頁下載程式原封不動跑一次,核對原頁日期下的績效;再檢查「完全不排除」的重建淨值與原策略逐日一致,最大相對誤差小於 0.000001%。這個檢查只驗證原策略重建,不代表加入額外換股日後,其餘股票的股數與停損基準仍相同。
每支底策略測兩種動作。換股時排除只在原本換股日刪除當天有看空背離的持股,等下一次換股再檢查。出場加再平衡還會在兩次換股之間,每天檢查既有持股,遇到訊號便在下一交易日退出,直到原本下一次換股才可買回。被刪除的目標權重保留現金、不補滿;其他股票會回到原換股時的目標權重,因此可能額外買賣。FinLab 預設也會在這些新增的再平衡日重設續抱股票的停損成本基準,營收版的 10% 停損幅度雖然沿用,基準價格仍會改變。這三組測的是出場加再平衡,未單獨測試只賣指定股票、其餘股數與停損基準不動的做法。
背離訊號仍使用上述 2,000 萬元成交額門檻;底策略本來持有但低於門檻的股票,不會因為這個新訊號被排除。三個底策略的股票池與權重都不另改。因此,極小型股版本可能幾乎沒有觸發,不能把「沒變」說成背離有效。
| 底策略/加上背離的動作 | 年化報酬 | 日夏普 | 最大回撤 | 九組贏原策略幾組 |
|---|---|---|---|---|
| 極小型股原版 | 31.3% | 1.98 | −24.0% | 對照 |
| 極小型股+換股時排除 | 31.3% | 1.98 | −24.0% | 0/9 |
| 極小型股+出場加再平衡 | 31.1% | 1.97 | −24.0% | 0/9 |
| 營業利益率原版 | 19.7% | 1.32 | −25.9% | 對照 |
| 營業利益率+換股時排除 | 19.5% | 1.32 | −25.9% | 7/9 |
| 營業利益率+出場加再平衡 | 15.3% | 1.13 | −25.7% | 0/9 |
| 營收新高原版 | 48.3% | 1.47 | −32.0% | 對照 |
| 營收新高+換股時排除 | 44.3% | 1.45 | −31.9% | 3/9 |
| 營收新高+出場加再平衡 | 33.2% | 1.33 | −27.3% | 0/9 |
原參數下,六個疊加版都沒有比各自原策略更高的日夏普。營收新高出場加再平衡的回撤從 −32.0% 縮到 −27.3%,但年化也從 48.3% 降到 33.2%;這個組合是用部分報酬交換回撤,無法把變化單獨歸因於賣出背離股票,也不能只列回撤改善。平均目標投入比例也從原版接近滿倉,降到約 79.1%。
九宮格與分段:有幾格改善,仍不足以成立
每個設計都跑 N=20、40、60 日,r=0.6、0.8、1.0,共九組。開跑前約定九組至少七組的日夏普要高於同期 0050;疊加版還要高於原策略,原參數在前後兩半也都要勝出。七成門檻需要七組,只有一兩組漂亮數字不算。

兩個單獨版共 18 組參數,沒有一組贏 0050。圖中每格是日夏普減去 0050,負值表示落後;改成更嚴格的量縮,也沒有出現一整片優勢。

六個疊加版共 54 組,極小型股排除、極小型股出場、營業利益率排除、營收新高排除與營收新高出場,各有 9/9 組贏 0050;營業利益率出場加再平衡是 6/9。可是改跟原策略比,只剩營業利益率排除 7/9、營收新高排除 3/9,其餘為 0/9。底策略本來就好,把底策略的成績算到濾網頭上,會高估訊號價值。
營業利益率排除的九組雖有七組勝原版,預先指定的 40 日、0.8 倍卻由 1.3222 降到 1.3179;而且前半段也落後原版,仍不通過。這正是同時看參數區域與原設定分段的原因,不能看完結果再把中心移到比較好看的格子。
| 設計 | 前半段日夏普 | 後半段日夏普 | 前/後半原策略 |
|---|---|---|---|
| 量縮新低買進 | −0.21 | −0.67 | 0050:0.73/1.36 |
| 高成交額排除 | 0.13 | 1.03 | 0.18/1.07 |
| 極小型股排除 | 2.49 | 1.42 | 2.49/1.42 |
| 極小型股出場加再平衡 | 2.47 | 1.42 | 2.49/1.42 |
| 營業利益率排除 | 1.07 | 1.55 | 1.08/1.54 |
| 營業利益率出場加再平衡 | 0.92 | 1.33 | 1.08/1.54 |
| 營收新高排除 | 1.29 | 1.61 | 1.36/1.57 |
| 營收新高出場加再平衡 | 1.13 | 1.54 | 1.36/1.57 |
四捨五入後相同的數字,沒有視為勝出;完整精度在下載的指標檔。兩個單獨設計都未在前後半段各自勝過 0050;六個疊加版也都沒有兩段勝過底策略。程式另檢查同平均曝險固定持有,以及剔除策略年報酬最高的一年。這些檢查沒有挽回前面已失敗的條件。
量價背離有資訊,不等於這條買賣規則有獲利
Blume, Easley & O’Hara(1994)的理論研究討論成交量如何提供價格之外的資訊。這能支持「量值得研究」,卻沒有替 40 日新高加量縮八成這條規則背書。Lee & Swaminathan(2000)檢查歷史量能與價格動能的關係,使用的量能分類與持有方式也不同於本次當日量縮訊號。
Lo, Mamaysky & Wang(2000)把圖形辨識寫成演算法並做統計檢驗,說明圖形主張可以被明確定義、接受檢查。本文沿用的是把主張寫成規則再驗證的做法,沒有重做他們的圖形模型,也沒有宣稱所有量價背離都無效。
這次結果能指出三種可能的代價:新低量縮可能持續下跌;新高量縮可能仍在走趨勢,提前排除會放棄後續報酬;額外退出、重平衡與回補會增加成本,停損基準重設也會改變後續出場時點。本文未把每筆交易做反事實拆解,無法斷言哪一個是主要原因。大盤濾網研究則測另一種退出訊號,可用來比較「降低回撤」和「改善原策略」的差別。
FinLab 核心程式與方法限制
以下是看多背離原設定的核心。每週只選訊號當天成立的股票,不把先前出現過的訊號累積到之後所有日期;不足 30 檔的部分放現金。
顯示程式碼
import pandas as pd
from finlab import data
from finlab.backtest import sim
data.truncate_end = "2026-11-09"
close = pd.DataFrame(data.get("etl:adj_close"))
volume = pd.DataFrame(data.get("price:成交股數"))
amount = pd.DataFrame(data.get("price:成交金額")).rolling(20).mean()
stocks = [
s for s in close.columns
if len(s) == 4 and s.isdigit() and not s.startswith(("0", "91"))
]
close = close[stocks]
volume = volume.reindex(index=close.index, columns=stocks)
amount = amount.reindex(index=close.index, columns=stocks)
new_low = close < close.shift(1).rolling(40).min()
shrinking = volume < volume.shift(1).rolling(20).mean() * 0.8
liquid = (amount > 20_000_000) & close.notna() & (volume > 0)
score = amount.where(new_low & shrinking & liquid)
position = (score.rank(axis=1, ascending=False, method="first") <= 30) / 30
weekly = position.groupby(position.index.to_period("W-FRI")).tail(1)
weekly = weekly.loc["2017-12-01":]
report = sim(weekly, resample=weekly.index, upload=False)
report.to_html("report_bullish_divergence.html")| 項目 | 本次口徑 |
|---|---|
| 日期與版本 | 比較 2018-02-01 至 2026-11-09;資料截至 11-09,11-10 執行,FinLab 2.3.8 |
| 訊號、下單 | 用當日收盤與成交量判斷,下一交易日成交;價格與停損幅度沿用;出場加再平衡版增加換股日,續抱股票的基準依上述預設重設 |
| 成本 | sim() 預設買賣手續費各 0.1425%,賣出另扣證交稅 0.3% |
| 換手 | 目標權重單邊換手、未含價格漂移及引擎停損的額外成交;新低買進月均 134%、最高 372%,高成交額排除月均 48%、最高 82% |
| 六種疊加版換手 | 月均約 21%~93%、單月最高約 33%~140%;逐項在指標檔,最後一月未結束 |
| 基準與現金 | 0050 還原價含息持有;剩餘現金不計息,另比同平均目標投入比例固定持有 |
| 股票類別 | 單獨版未全面排除金融、KY、全額交割及處置股,使用歷史表保留下市樣本;疊加版沿用原策略股票池 |
| 公司行動 | 價格已還原,成交股數未另做拆股量調整,面額變更附近可能影響量比 |
| 滑價與容量 | 未額外估算,不把成交額門檻當作成交保證;極小型股原版尤其有流動性風險 |
| 樣本內外 | 全段樣本內;參數先寫定,但沒有另留真正未來樣本外,也未做每筆訊號的顯著性檢定 |
這些限制決定結論的範圍。若想把「背離後等三天確認」「量縮新低後重新站上均線」或不同持有天數加進去,那是新的研究設計,不能引用這次數字說已驗證。回測檢查的基本原則可看回測方法,規則落地的流程則見程式交易指南。
常見問題
價漲量縮一定會跌嗎?
不一定。本次把價格突破前 40 日高點、成交量少於前 20 日均量八成,做成排除或出場加再平衡規則,沒有穩定改善原策略。純賣出且不動其他持股的規則不在這次測試範圍內。這不足以支持「看到就賣」。
價跌量縮代表賣壓結束嗎?
成交量少只表示當天成交少,不能直接觀察未來賣壓。本次量縮創新低買進版年化 −9.0%,不支持單靠這個組合抄底。
看多與看空背離,要看幾天?
本文測 20、40、60 個交易日,量縮門檻是前 20 日均量的六成、八成或一倍。三乘三的區域沒有讓任何設計通過全部條件,無法推薦其中一組作通用設定。
已經有選股策略,加上背離濾網會更好嗎?
三個底策略各測兩種動作,沒有一個通過。營業利益率排除有七組勝原版,但原設定的全段與前半段都落後;營收新高出場加再平衡則是回撤變淺、報酬減少。
這跟 OBV 背離、爆量有什麼差別?
OBV 看累積的有方向成交量,本文看極值當日是否量縮,爆量看成交量是否突然增加。三者定義不同,不能把其中一種的回測結論用在另一種。相關比較見成交量與當沖研究。
短線當沖也能套用這個結論嗎?
本文使用日資料、隔日成交,單獨版每週換股,沒有分鐘資料、當沖成交順序或日內滑價。結論不涵蓋當沖,也不涵蓋放空看空背離的做法。
下載與研究資料
| 檔案 | 內容 |
|---|---|
| strategy.py | 看多背離買進或高成交額排除原設定,擇一執行 |
| 完整研究包 | 包含三底策略、可重跑的疊加邏輯與全部 99 組研究;解壓後依說明執行 |
| data.csv | 策略、原版與 0050 的共同區間淨值 |
| metrics.json | 全部九宮格、分段、同曝險與剔除最佳年結果 |
| 量縮新低互動報告 | 負面結果的完整回測 |
| 高成交額原版報告 | 排除版的原始對照 |
FinLab 量化研究團隊以歷史資料與明確規則研究選股和風險管理。八個設計均未通過,本次不新增量價背離策略頁,也不把既有策略的報酬歸因於背離濾網。
免責聲明:本文所有策略與回測結果僅供教學與研究用途,不構成投資建議。過去績效不代表未來表現。投資一定有風險,請審慎評估自身風險承受能力。
最後更新:2026-11|回測區間:2018-02-01 至 2026-11-09|作者:FinLab 量化研究團隊
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始

