威廉指標在台股的正確用法:當相對強勢主因子,不是抓超買超賣
散戶最熟的威廉指標(Williams %R)用法是「跌破 -80 超賣就買、突破 -20 超買就賣」。但把這個規則放進台股做 11 年回測(2015-2026),「超賣買進」研究段年化報酬只有 3.78%、若改用「超賣後回升金叉」進場研究段甚至是 -1.53%,幾乎等於沒賺或倒賠。問題不在威廉指標,而在用反了方向——它在台股的價值在於衡量「相對強勢」,而非抓均值回歸的反彈。用 finlab 抓的上市櫃真實價量資料攤開來看,把威廉指標反過來讀、取數值最高(最接近 0、近期最強勢)的股票,方向立刻就對了。本文進一步把它做成一套完全不含基本面的純技術策略:以長窗(35 日)威廉指標當「中期相對強勢主因子」(複合分中佔 0.6 權重),疊上 0.4 權重的 60 日報酬動能,取綜合分最高的 11 檔、以反波動度加權集中持有;外面再套一層「0050 還原價站上 60 日均線」的純技術擇時開關,多頭滿倉、空頭把整體部位縮到半倉。這套「威廉指標相對強勢主因子 + 指數擇時半倉」純技術策略研究段(2015-2021)年化 29.62%、月 Sharpe 1.38,樣本外(2022-2026)年化 33.94%、月 Sharpe 1.22,全期(2015-2026)年化 31.27%、月 Sharpe 1.21、最大回撤 -34.38%,三段都勝過含息 0050(全期年化 20.98%、月 Sharpe 1.05、回撤 -33.96%)。代價也一併講清楚:選股集中 11 檔、又用高 beta 的強勢股,全期回撤與 0050 同級偏深,這是用集中度換報酬的取捨。
先用一張表回答你搜尋「威廉指標」時最想知道的事:
| 你想知道的 | 本文用真實台股回測的回答 |
|---|---|
| 威廉指標是什麼 | Larry Williams 1973 年提出的擺盪指標,值域 -100 ~ 0,衡量收盤價在近 N 日高低區間中的相對位置 |
| 超賣(< -80)買進有效嗎 | 台股 11 年回測研究段年化僅 3.78%;改用超賣回升金叉進場研究段 -1.53%,接近無效甚至倒賠 |
| 那它該怎麼用 | 反過來讀:取數值最高(最強勢)的股票當「中期相對強勢主因子」,裸因子(14 日)研究段年化就從 3.78% 跳到 10.29% |
| 參數怎麼設 | 預設 14 日偏短雜訊多;拉長到 35 日當中期相對強勢主因子,研究段月 Sharpe 站上 1.38 並形成高原 |
| 組成完整策略後效果如何 | 35 日威廉指標主因子 + 60 日動能 + 0050 指數擇時半倉,純技術、不含基本面:研究段年化 29.62%、樣本外 33.94%、全期 31.27%,三段都勝含息 0050 |

本文所有數字皆出自 finlab 套件抓取的上市櫃真實價量資料(
price與etl:adj_close含息還原股價),回測區間 2015-01 至 2026-06-09,基準為含息 0050。研究段(research)為 2015-2021、樣本外段(oos)為 2022-2026,兩段一律同時揭露。文末附可下載的strategy.py與data.csv,可自行重現。對回測的觀念還不熟,可先看回測是什麼。
威廉指標是什麼
威廉指標(Williams %R,TA-Lib 代號 WILLR)是 Larry Williams 在 1973 年提出的擺盪指標,計算公式是:%R =(近 N 日最高價 − 當日收盤價)/(近 N 日最高價 − 近 N 日最低價)×(−100)。它的值域固定在 −100 ~ 0 之間:
接近 0:收盤價收在近 N 日高低區間的頂端,代表近期相對最強勢。
接近 −100:收盤價收在近 N 日高低區間的底端,代表近期相對最弱勢。
教科書默認用法把它當 KD 類擺盪指標:高於 −20 視為超買(該賣)、低於 −80 視為超賣(該買),假設價格會均值回歸、回到區間中段。預設回看窗 N 通常取 14 日。技術指標的基礎名詞可參考名詞詞彙表。
這裡藏著一個關鍵的觀念分歧:威廉指標到底該當「均值回歸訊號」(超賣會反彈、超買會回落),還是「相對強勢訊號」(強的續強、弱的續弱)?這兩種讀法方向完全相反。哪一種對?不靠嘴上爭論,直接回測。
威廉指標的數學定義:它衡量「收盤離近期高點多遠」
把上面的白話寫成公式,威廉指標 %R 的定義是:
逐項拆解每個符號:
- :當日收盤價。
- :近 日(含今日)的最高價。
- :近 日的最低價。
- :近 日的高低價差,也就是這段期間的波動區間。
- :收盤價離區間頂端(近期最高點)還有多遠。
整個式子先算「收盤距離近期高點的差距佔整個區間的比例」,再乘上 把值域翻到 。所以當收盤價正好等於近期最高點(),分子為 0,,是最強勢的讀數;當收盤價落在近期最低點(),分子等於整個區間,,是最弱勢的讀數。換句話說, 量的是「今天收在近 日箱型的相對位置」,而非漲跌幅或波動大小——這正是它能反過來當相對強勢排序工具的數學根源。這條公式和 KD 的未成熟隨機值(RSV)幾乎是同一個東西的鏡像,差別只在 KD 量「收盤離低點多遠」、威廉指標量「收盤離高點多遠」,這也是為什麼後面會說它和 KD 資訊高度重疊。
散戶最常見的「超賣買進」,在台股 11 年幾乎沒賺到錢
我們在可交易宇宙(60 日均成交金額前 300 大、收盤 > 10 元、60 日均量 > 100 萬股,排除 ETF、金融股、KY 股、處置股)裡,把幾種「威廉指標選股」用法各跑一次月再平衡的回測。研究段(2015-2021)結果如下:
| 威廉指標用法 | 研究段年化報酬 | 對照含息 0050(15.29%) |
|---|---|---|
| 超賣買進(WILLR 最低 30 檔,均值回歸) | 3.78% | 大幅落後 |
| 超賣後回升金叉進場 | −1.53% | 倒賠 |
| 反過來讀:相對強勢(WILLR 最高 30 檔,預設 14 日) | 10.29% | 落後,但方向對了 |

結論很清楚:最多人用的「超賣買進」在台股研究段年化只有 3.78%,若再加一道「超賣後回升金叉」的進場確認,研究段反而變成 −1.53% 倒賠。 同期含息 0050 研究段年化是 15.29%,超賣均值回歸這條路在台股完全落後。
原因不難理解:台股是「強者恆強、弱者續弱」的市場。收在近期區間底端(WILLR 超賣)的股票,往往是基本面或籌碼出了問題的續弱股,接刀只會被套;而擺盪指標假設的「超賣必反彈」,在台股流動性宇宙裡並不成立。把同一個指標反過來讀——取收在區間頂端(WILLR 最高、最強勢)的股票——研究段年化立刻從 3.78% 跳到 10.29%,方向對了。這個 14 日裸因子只是把方向擺正的起點,本文後面會把它升級成更穩的中期相對強勢主因子。這條路和 Jegadeesh & Titman (1993) 的動能效應一致:過去的相對贏家,中期傾向繼續贏。延伸閱讀:技術面與基本面選股的差異、動能策略。
在單一檔股票上,兩個派別的買賣點長怎樣
回測數字告訴你哪條路有 edge,但很多人會問:那畫在 K 線上到底是什麼感覺?我們挑台積電(2330)與聯發科(2454)在 2023-08 ~ 2024-06 這段約 11 個月、多空轉折明顯的窗,把威廉指標(14 日)兩個派別的訊號標出來看。下方面板是 %R 的走勢,加上 −20(超買)與 −80(超賣)兩條帶,價格面板則標出兩派各自的進出場點。
兩派的規則完全相反:
- 超賣派(教科書均值回歸):%R 由下上穿 −80 視為超賣反彈買進、由上下穿 −20 視為超買賣出。
- 相對強勢派(本文主張):%R 上穿 −20 進入強勢區視為轉強買進、跌破 −80 視為由強轉弱賣出。


圖上有兩件事一眼可見。第一,這兩檔在這段窗裡都是走多頭,但超賣派的買點稀稀落落、賣點卻一大堆:台積電超賣派只觸發 11 次買、卻有 20 次賣;聯發科更極端,只有 5 次買、23 次賣。原因是強勢股的 %R 長時間黏在 −20 上方的強勢區,很少跌到 −80,所以「超賣才買」幾乎沒機會上車,反而一碰到 −20 就賣、把整段上漲讓出去。第二,相對強勢派的進出剛好相反:台積電 21 次買、11 次賣,聯發科 22 次買、5 次賣,順著上升段持有、賺到趨勢。
但同一張圖也暴露單股使用威廉指標的硬傷:訊號太頻繁、容易甩巴掌(whipsaw)。%R 在 −20 與 −80 之間反覆穿越,每穿一次就是一組進出,盤整段尤其嚴重,光看單檔很容易被一連串假訊號磨損。這正是為什麼本文不把威廉指標當「單股進出場訊號」,而是當「橫截面排序工具」——把全市場個股的 %R 拿來比高低、每月選一籃最強的,用分散與月頻再平衡稀釋掉單股的雜訊。
如果你想自己把這張圖畫出來、換成別檔股票看,下面這段程式碼示範用 finlab 的 data.indicator 算威廉指標、再用簡單的穿越邏輯標出兩派買賣點:
顯示程式碼
import pandas as pd
import matplotlib.pyplot as plt
from finlab import data
# 套件會在需要資料時自動引導登入
import finlab
finlab.login()
# 載入收盤價,計算威廉指標(回看窗 14 日)
close = data.get("price:收盤價")
willr = data.indicator("WILLR", timeperiod=14)
# 取單一檔股票(台積電 2330)的一段窗來看
sid = "2330"
px = close[sid].loc["2023-08":"2024-06"]
w = willr[sid].loc["2023-08":"2024-06"]
# 超賣派:%R 上穿 -80 買、下穿 -20 賣(均值回歸抄底)
buy_oversold = (w > -80) & (w.shift(1) <= -80)
sell_oversold = (w < -20) & (w.shift(1) >= -20)
# 相對強勢派:%R 上穿 -20 進入強勢區買、跌破 -80 轉弱賣
buy_strength = (w > -20) & (w.shift(1) <= -20)
sell_strength = (w < -80) & (w.shift(1) >= -80)
# 上下兩個面板:上畫股價與買賣點,下畫威廉指標與超買超賣帶
fig, (ax_px, ax_ind) = plt.subplots(2, 1, sharex=True, figsize=(12, 7))
ax_px.plot(px.index, px, color="#374151", label=sid)
ax_px.scatter(px.index[buy_strength], px[buy_strength], marker="^",
color="#10B981", label="相對強勢派買進")
ax_px.scatter(px.index[sell_strength], px[sell_strength], marker="v",
color="#EF4444", label="相對強勢派賣出")
ax_px.legend()
ax_ind.plot(w.index, w, color="#06B6D4", label="威廉指標 WILLR(14)")
ax_ind.axhline(-20, ls="--", color="#9CA3AF") # 超買帶
ax_ind.axhline(-80, ls="--", color="#9CA3AF") # 超賣帶
ax_ind.legend()
plt.tight_layout()
plt.show()威廉指標真正有效的兩個調整
調整一:把回看窗拉長到中期(35 日),當相對強勢主因子
預設的 14 日回看窗偏短,混進大量短線雜訊。把回看窗拉長,威廉指標衡量的就從「短線位置」變成「中期相對強勢」,訊噪比明顯變好。本文把回看窗設在 35 日:在後面的參數網格裡,14 日那種短窗最差、28 到 42 日的中期窗整片站上高位(研究段月 Sharpe 約 1.25 ~ 1.38),其中 35 日在研究段保留最多報酬。
更關鍵的一步是改變它的角色:不再讓威廉指標單獨選股,而是把它當複合分裡的主導因子。對每檔股票,先把 35 日威廉指標做橫截面排名(值越接近 0、近期越強勢,排名越高),再把 60 日報酬動能也做橫截面排名,兩者按 0.6 與 0.4 的權重相加得到綜合分——威廉指標主導方向、動能做交叉確認。這比裸用單一指標穩,因為兩個都偏「強者恆強」的訊號相互佐證,能濾掉只靠單一讀數的偽強勢股。
調整二:反波動加權集中持有 + 指數擇時半倉控風險
選好相對強勢的一籃股票後,還有兩個工程細節決定成敗。
第一是權重:取綜合分最高的 11 檔,以反波動度加權(權重和 60 日報酬波動度成反比,池內正規化),讓波動較低、走勢較穩的強勢股配重較高,壓低整體組合的顛簸。
第二是風控:相對強勢因子選的是高 beta 的強勢股,空頭裡跌得更兇,這是結構性弱點。對症下藥的解法是純技術的指數擇時——計算 0050 還原價(etl:adj_close)的 60 日均線,只看「0050 有沒有站上自己的 60 日均線」這一個訊號;為避免在均線附近反覆甩巴掌,用「近 10 個交易日 ≥ 50% 在均線上」的多數決平滑。判定為 risk-on 時維持滿倉、risk-off 時把整體部位縮到半倉(其餘轉現金,全程不加碼、不用槓桿),次日回到 risk-on 即恢復滿倉。這個「在系統性風險升高時調降曝險」的邏輯,和學術上的波動度擇時一致——Moreira & Muir (2017) 在《Volatility-Managed Portfolios》證明:在風險惡化時降低曝險,能顯著提升投資組合的 Sharpe。大盤站上 60 日均線與否,正是一個可操作、可重現的市場狀態訊號。
訊號分工從頭到尾清楚:威廉指標(疊動能)負責選股(挑中期相對強勢),0050 指數擇時負責風控(空頭減碼到半倉),兩者各司其職。整套只用價量、完全不碰財報或月營收。關於用大盤訊號降低回撤,也可參考市場濾網如何降低回撤與均線市場濾網。
參數最佳化:找一片高原,不是找一個孤峰
到這裡會有人擔心:選 35 日、11 檔,會不會只是事後挑到漂亮的參數?要回答這個問題,光報一組最佳數字並不夠,得把兩個最關鍵的旋鈕——威廉指標回看窗(21 / 28 / 35 / 42 日)與持股檔數(10 / 11 / 12 / 14 檔)——擺成一張二維網格,對完整策略(複合分選股 + 反波動加權 + 0050 指數擇時半倉)逐格真跑回測,看研究段月 Sharpe 的分布。

判讀色溫圖的關鍵,是看它像一片連續的高原,還是像一根突兀的孤峰。如果最高的 Sharpe 只孤零零出現在某一格、周圍四鄰全部很差,那通常是過擬合的警訊——換個鄰近參數就垮,代表這個成績是運氣不是結構。這張圖呈現的是前者:回看窗 28、35、42 日那三列整片偏綠(研究段月 Sharpe 約 1.21 ~ 1.38),相鄰格子之間平滑過渡;相對弱的是 21 日那一列(約 1.07 ~ 1.14),但即使這一列也都還在 1.0 以上。也就是說,「回看窗要拉長到中期」這個結論在連續一片參數上都成立,不是靠某一格僥倖。
正因為它是高原,本文選的 35 日、11 檔(研究段月 Sharpe 1.38)並不是孤零零的尖峰:它的鄰格——35 日 10 檔(1.25)、35 日 12 檔(1.33)、42 日 11 檔(1.38)、28 日 11 檔(1.26)——全都不弱。為了說明「就算不踩在最高那格,結論也一樣」,下圖把勝出設定和網格裡鄰域最穩健的那一格(42 日、12 檔)擺在一起對照研究段與樣本外月 Sharpe:

數字據實如下:勝出設定(35 日、11 檔)研究段月 Sharpe 1.38、樣本外 1.22;換到鄰域最穩健的 42 日、12 檔,研究段 1.29、樣本外 1.26。 兩組在研究段與樣本外幾乎打平,研究段 CAGR 也分別是 29.62% 與 27.03%、全期最大回撤 -34.38% 與 -34.93%,差距都在小數點層級。這正是「在高原上選參數」該有的樣子——選哪一格結論都成立,沒有免費的午餐;任何宣稱「精準調到某神奇參數、換一格 Sharpe 就翻倍」的優化,反而要當成過度最佳化的紅旗。
完整策略:威廉指標相對強勢主因子 + 指數擇時半倉
把上面的洞見組成一套可執行、可重現、完全不含基本面的純技術策略:
- 選股綜合分:可交易宇宙中,對每檔股票算兩項橫截面排名——①威廉指標(35 日)排名(值越接近 0、近 35 日越強勢,排名越高);②60 日報酬動能排名。按 0.6 與 0.4 的權重相加成綜合分,威廉指標主導、動能做交叉確認。
- 持股:取綜合分最高的 11 檔,以反波動度(1 ÷ 60 日波動度)加權,波動較低的股票配重較高。
- 風控(指數擇時):計算 0050 還原價的 60 日均線,判斷「0050 是否站上 60 日均線」,再用「近 10 個交易日 ≥ 50% 在均線上」的多數決平滑,得到 risk-on / risk-off 開關。
- 部位調節:risk-on 時滿倉持有那 11 檔;risk-off 時把整體部位縮到半倉、其餘轉現金,全程不加碼、不用槓桿。
- 月再平衡。
選股端的核心程式碼(可直接交給你的 AI 助理改寫、或下載完整版執行):
顯示程式碼
import pandas as pd
from finlab import data
# 套件會在需要資料時自動引導登入
import finlab
finlab.login()
# 載入價量資料
close = data.get("price:收盤價")
volume = data.get("price:成交股數")
amount = data.get("price:成交金額")
adj_close = data.get("etl:adj_close") # 還原權值股價,算 0050 擇時用
# 可交易宇宙:60 日均量 > 100 萬股、收盤 > 10 元、60 日均成交額前 300 大
# 排除 ETF(00 開頭)與權證 / KY(非 4 碼純數字)
liquidity_vol = volume.rolling(60, min_periods=20).mean()
liquidity_amt = amount.rolling(60, min_periods=20).mean()
is_common = pd.Series({s: (str(s)[:4].isdigit() and not str(s).startswith("00"))
for s in close.columns})
universe = (liquidity_vol > 1_000_000) & (close > 10) & liquidity_amt.is_largest(300) & is_common
# 因子一:威廉指標(35 日)橫截面排名,越強勢排名越高(主因子,權重 0.6)
willr = data.indicator("WILLR", timeperiod=35)
willr_rank = willr.where(universe).rank(axis=1, pct=True)
# 因子二:60 日報酬動能橫截面排名(交叉確認,權重 0.4)
mom_rank = (close / close.shift(60) - 1).where(universe).rank(axis=1, pct=True)
# 綜合分取最高 11 檔,再以反波動度加權
score = 0.6 * willr_rank + 0.4 * mom_rank
basket = score.where(universe).rank(axis=1, ascending=False) <= 11
inv_vol = 1.0 / close.pct_change().rolling(60).std()
weights = inv_vol.where(basket)
weights = weights.div(weights.sum(axis=1), axis=0)
# 指數擇時:0050 站上自身 60 日均線,再用 10 日多數決平滑成 risk-on 開關
idx = adj_close["0050"].dropna()
idx_ma60 = idx.rolling(60, min_periods=30).mean()
raw_on = idx > idx_ma60
risk_on = (raw_on.rolling(10, min_periods=5).mean() >= 0.5)
risk_on = risk_on.reindex(close.index).ffill().fillna(False)完整的半倉部位調節與回測請見文末可下載的 strategy.py。
這套策略全期(2015-2026)年化 31.27%、月 Sharpe 1.21、月 Sortino 2.34、最大回撤 -34.38%;分段來看,研究段(2015-2021)年化 29.62%、月 Sharpe 1.38、月 Sortino 2.43、最大回撤 -34.38%,樣本外段(2022-2026)年化 33.94%、月 Sharpe 1.22、月 Sortino 2.80、最大回撤 -33.21%,年換手約 8.4 次。 三段風險調整後都站上約 1.2 以上、樣本外不衰退,且都勝過含息 0050(全期年化 20.98%、月 Sharpe 1.05、最大回撤 -33.96%);代價是回撤與 0050 同級偏深(-34% 等級)。
下面是完整互動式回測:月報酬熱力圖、權益曲線、年度績效都可以直接在文章裡操作:
想加月營收 YoY 嗎:基本面是選配,不在主策略內
本文的主策略是完全不含基本面的純技術策略:選股只用威廉指標相對強勢與 60 日動能,風控只用 0050 指數均線,沒有任何財報或月營收輸入。這是刻意的設計——純技術訊號每日可得、無財報公布延遲與對齊問題,回測口徑乾淨、可重現性高,也才與本文「威廉指標純技術用法」的主題一致。
常見的延伸問題是:在相對強勢這一籃裡,再要求個股「月營收年增為正」會不會更好?這是一個合理的研究方向,但屬於主策略之外的選配實驗,不納入本文主策略的數字。原因有二:其一,主策略選股只取 11 檔、集中度已高,再加營收過濾會明顯縮小可選池,反而犧牲相對強勢的爆發力;其二,月營收是領先指標、公布有時間落差,要正確對齊「當期(含)以前已公布」的資料才不會前視,這會把乾淨的純技術口徑複雜化。想實驗的讀者可在下載的程式碼裡,於綜合分計算前加一層 monthly_revenue 的 YoY 過濾自行對照。基本面與技術面如何分工,可延伸看技術面與基本面選股的差異。
回測方法與口徑
量化結論的可信度取決於方法,以下逐項交代:
- 交易成本:策略使用 finlab
sim(),台股預設已內扣手續費(本文以 0.1425% 打三折計)與賣出證交稅 0.3%。 - 滑價:未額外假設滑價,實際成交衝擊取決於資金規模與流動性。
- 股票池:上市櫃普通股,60 日均量 > 100 萬股、收盤 > 10 元、60 日均成交金額前 300 名。
- 排除類別:排除 ETF(代號 00 開頭)、權證 / KY / 特別股(非 4 碼純數字)、金融保險股、處置與全額交割股,以降低生存者偏差與不可交易標的污染。
- 前視偏差:威廉指標、60 日動能與 0050 均線都只使用當日(含)以前的價格;月頻再平衡,訊號於當期可得。完全不使用財報或月營收等基本面資料,自然沒有財報公布日對齊問題。
- 權重:選股以反波動度(1 ÷ 60 日報酬波動度)加權、池內正規化,單一標的不另設硬上限;風控層為 0050 指數擇時開關,risk-off 時把整體部位縮到半倉、其餘轉現金,不持有額外防禦腿、不用槓桿。
- 周轉率:勝出策略年換手約 8.4 次,屬中等。
- 樣本內外:研究段 2015-2021、樣本外 2022-2026 分開回報,所有數字兩段都列,避免只報漂亮的一段。
穩健度
這套策略的 edge 不是靠單一參數湊出來的:
- 回看窗穩健:把威廉指標回看窗在 21 / 28 / 35 / 42 日間掃過,28 日以上整片站上研究段月 Sharpe 約 1.21 ~ 1.38;最短的 21 日略低(約 1.07 ~ 1.14)但也都在 1.0 以上——是一片連續高原,不是孤峰。
- 持股數穩健:在 35 日窗下取 10 / 11 / 12 / 14 檔,研究段月 Sharpe 分別約 1.25 / 1.38 / 1.33 / 1.32,方向一致,不是靠特定檔數湊出來。
- 勝出設定不靠尖峰:勝出格(35 日、11 檔)與鄰域最穩健格(42 日、12 檔)在研究段與樣本外月 Sharpe 都幾乎打平(前者 1.38 / 1.22、後者 1.29 / 1.26),換鄰格結論不變。
- 樣本外站得住:勝出策略樣本外月 Sharpe 1.22、年化 33.94%,涵蓋 2022 台股空頭,沒有「研究段漂亮、樣本外崩掉」的過擬合特徵。
使用威廉指標常見的四個陷阱
整理本文回測與單股示意圖暴露出的問題,初學者用威廉指標最常踩的坑有四個:
- 把超賣 −80 當無腦抄底訊號。 這是最普遍也最致命的誤用。台股強者恆強,跌進超賣區的常常是續弱股,回測研究段年化只有 3.78%、加金叉確認甚至 -1.53% 倒賠。超賣不等於便宜,更不等於要反彈。
- 拿單一檔股票當進出場依據、被甩巴掌磨損。 前面台積電、聯發科的示意圖已經看到:%R 在 −20 與 −80 之間反覆穿越,盤整段尤其頻繁,每穿一次就是一組進出。單股使用容易陷入 whipsaw,把獲利耗在來回的手續費與滑價上。比較穩的用法是把它當橫截面排序工具、用一籃股票與月頻再平衡稀釋雜訊。
- 用 14 日預設值就上場。 預設回看窗 14 日偏短、雜訊多。把回看窗拉到 28 ~ 42 日的中期區間,威廉指標衡量的才是「中期相對強勢」,訊噪比明顯變好,本文的參數網格裡這片中期窗整片站上研究段月 Sharpe 1.2 以上。
- 和 KD、RSI 疊在一起用。 從數學定義就看得出來,威廉指標衡量「收盤離近期高點多遠」,KD 的 RSV 衡量「收盤離近期低點多遠」,兩者幾乎是鏡像、資訊高度重疊。把三個擺盪指標硬疊在一起通常是負貢獻;真正互補的是「不同性質」的訊號,例如威廉指標相對強勢(選股)+ 60 日報酬動能(交叉確認)+ 0050 指數擇時(風控)。
這四點的共通教訓是:威廉指標本身沒有錯,錯的是把它當成一個能獨立發號施令的買賣訊號。它的位置應該是「一個衡量相對位置的排序量」,搭配風控與分散使用。
策略的限制與取捨
- 集中度帶來較深回撤:策略只持 11 檔、又是高 beta 的強勢股,全期最大回撤 -34.38%,與含息 0050 的 -33.96% 同級、並不算淺。選股集中換到較高報酬,代價是單股與類股風險集中,承受得住這級回撤才適合;指數擇時半倉只能緩和、無法消除這個結構性弱點。
- 高換手、成本敏感:年換手約 8.4 次明顯高於被動持有,報酬已在
sim()內扣手續費與證交稅後計算,但實單滑價會進一步侵蝕,資金規模越大越明顯。 - 擇時對崩盤型態敏感:指數擇時的減碼主要靠 0050 的 60 日均線;若未來空頭型態不同(如急殺 V 轉),均線可能來不及反應或被假訊號甩巴掌,10 日多數決平滑可緩解但不能消除。
- 容量與成本:宇宙限前 300 大、選股僅 11 檔,大資金部署需重估流動性衝擊;回測未逐筆估算滑價與借券成本,容量未估算。
自己跑一次
把下面這句話交給你的 AI 助理,它會引導你安裝 FinLab Skill、抓台股資料、重現這篇的回測:
用 AI 開始 FinLab
把這句話交給你的AI,它會帶你完成設定並做出第一個策略。
告訴你的AI:
「幫我設定 FinLab,做一個動能策略:https://finlab.finance/setup」
裝好之後,下載本文的 strategy.py 與 data.csv,即可在自己的環境重跑、改參數、換選股因子。登入只需在程式裡寫 finlab.login(),套件會在需要資料時引導你完成登入。想延伸成更完整的量化流程,可參考量化交易總覽與程式交易是什麼。
常見問題
Q:威廉指標的參數要設多少?預設 14 日好嗎? 預設 14 日在台股偏短,混進太多短線雜訊。本文把它當中期相對強勢主因子,回看窗設在 35 日;在參數網格裡,28 到 42 日的中期窗整片站上研究段月 Sharpe 約 1.21 ~ 1.38 並形成高原。重點不在微調到某個神奇數字,而在於用「中期」(28~42 日)的視角衡量相對強勢,避免被「短線」位置的雜訊干擾。
Q:威廉指標「超賣(< -80)一定會反彈」嗎? 不一定。超賣買進在台股研究段回測年化只有 3.78%,若再加「超賣後回升金叉」確認,研究段甚至 -1.53% 倒賠。原因是台股強者恆強、弱者續弱,弱勢股往往續弱而非反彈。把超賣當無腦抄底訊號,長期接近無效。
Q:威廉指標和 KD、RSI 差在哪?該一起用嗎? 三者都是擺盪指標,資訊高度重疊,硬疊在一起通常是負貢獻。威廉指標衡量收盤在近 N 日高低區間的位置,與 KD 的計算很接近。比較有效的組合是「不同性質」的訊號搭配,例如本文用威廉指標相對強勢搭 60 日報酬動能選股、再用 0050 指數擇時控風險。各擺盪指標的正確用法可參考 RSI、MACD、KD 比較。
Q:威廉指標可以單獨拿來當買賣訊號嗎? 不建議。無論是超賣買、超買賣,在台股單獨橫截面選股都站不住(年化個位數甚至倒賠)。它比較適合當「相對強勢的排序工具」搭配大盤風控使用,而不是自己當進出場依據。
Q:威廉指標和動能指標(如 RSI、ATR)有什麼關係? 威廉指標本質上是一個「相對位置」量,反過來讀就成了相對強勢動能因子。它衡量的是價格在區間中的位置,不衡量波動幅度;波動度量請看台股 ATR 波動度指標與肯特納通道與 ATR 指標。選股方法的全貌可參考台股選股方法總覽。
Q:這套策略適合誰? 適合想主動參與台股強勢股、追求明顯高於含息 0050 報酬、能接受 -34% 等級回撤與較高換手成本的人:它全期年化 31.27%、月 Sharpe 1.21,研究段與樣本外都勝過含息 0050。不適合受不了深度回撤、或偏好低周轉被動持有的人——那種需求直接買進持有含息 0050 更省心。
Q:風控為什麼用「0050 均線」這麼單純的訊號? 本文刻意把風控收斂到一個可操作、可重現的訊號:0050 還原價有沒有站上自己的 60 日均線。它每日可得、定義明確,再用 10 日多數決平滑就能壓掉均線附近的假訊號。風控的角色是「空頭減碼」,不需要太精巧;訊號越單純、越不容易在歷史上被調參調出漂亮的假象。
最後更新:2026-06|回測區間:2015-01 ~ 2026-06-09|作者:FinLab 量化研究團隊(經量化研究員審閱)
本文僅供量化研究與教學用途,所有回測數字均由 finlab 套件在真實台股資料上產出,過去績效不代表未來表現,不構成投資建議。威廉指標相對強勢主因子 + 指數擇時半倉純技術策略全期最大回撤 -34.38%,實際交易前請自行評估風險、滑價與交易容量。
FinLab AI
想建立自己的策略?
用自然語言描述你的選股想法,AI 自動驗證、回測、給你答案
免費開始
