追著 52 週新高買,最讓人擔心的就是剛突破又掉頭。可是把成交量或相對成交量(RVOL)疊上去,也不會神奇地告訴我哪檔股票會套住人。它們能解決的是更早的一個問題:有些股票接近一年高點,成交卻很冷清;有些突然爆量,價格還離高點很遠。如果今天只能研究其中幾檔,該先看哪一些?

我會先用價格位置縮小名單,再用絕對成交量過一道初篩,最後看相對成交量與流動性。實際檢查介面時,我疊加的是 52W High 和 Volume 兩個條件;RVOL 出現在 Overview 的 Relative Volume 欄位,供下一輪觀察,這次沒有實際設定或驗證 RVOL 數值門檻。

初篩的目的,是分配研究時間,不是產生買進訊號。

兩個條件排除的是不同麻煩

52 週高點提供一個歷史價格參照。價格接近一年內高點,表示過去一年相對處於較強的位置,可能值得從趨勢或動能角度再看幾眼。但接近高點不等於突破有效,更不能推論之後一定上漲。

連「接近」都得先定義清楚。Finviz 的篩選器說明使用期間高點及百分比距離作為條件。「距離高點不超過 5%」至少是一個可以計算的研究設定;這不代表別家產品的 52W High 欄位輸入 10,就一定是「距高點 10%」。

成交量處理的是另一件事。接近高點但交易稀疏的標的,往後還得仔細看買賣價差、委託簿深度,以及部位能否以合理價格進出。圖形漂亮,不代表能照畫面上的價格成交。

我把它視為研究成本:每多留下一檔交易冷清的股票,就多一份要核實流動性的工作。Investor.gov 對流動性的定義關心的是資產能否在不明顯衝擊價格的情況下成交。較高成交量或許值得進一步研究,但單看股數仍不能證明委託簿有足夠深度。

反過來,光找爆量股也不可靠,因為下跌放量同樣可能很熱鬧。所以第一輪真正有用的是兩個條件的交集,不是把它們相加,就得到一個想像中的高勝率策略。

六檔虛構股票,為什麼最後剩兩檔?

先不要碰即時行情。我假設有 S1 到 S6 六檔不存在的股票,替它們安排現價、52 週高點和當日成交量。程式先保留現價達到各自一年高點至少 95% 的股票,再保留成交量至少 100 萬股的股票。

95% 和 100 萬股都是我為虛構案例自訂的門檻,不是對任何正式篩選器欄位單位的解釋。

// 以下全為虛構資料,成交量單位僅用於這個例子。
const stocks = [
  ["S1",  96, 100,  600000],
  ["S2",  49,  50, 1800000],
  ["S3", 190, 200,  900000],
  ["S4", 9.8,  10, 2400000],
  ["S5",  80, 100, 1600000],
  ["S6",  60, 100, 2200000],
];
// 每列:[代號、假設現價、假設52週高點、假設當日成交量]
const nearHigh = stocks.filter(([, price, high]) => price / high >= 0.95);
const candidates = nearHigh.filter(([, , , volume]) => volume >= 1000000);
console.log(stocks.length, nearHigh.length, candidates.length); // 6 4 2
console.log(candidates.map(([id]) => id)); // ["S2", "S4"]

輸出是 6、4、2,留下 S2、S4。就算不執行程式,表格也能看懂:

篩選階段留下的虛構股票被排除的原因
原始名單:6 檔S1、S2、S3、S4、S5、S6—
達到 52 週高點至少 95%:4 檔S1、S2、S3、S4S5、S6 離高點較遠
再加 100 萬股成交量門檻:2 檔S2、S4S1、S3 成交量不足

我反而想多看一眼 S3。它的假設價格 190,對照高點 200,正好踩在 95% 邊界;假設成交量 90 萬股,只比第二道門檻少 10 萬。程式直接把它剔除,但這不能證明 S3 比留下的股票差,也不代表它沒有研究價值。

這就是粗篩的代價:清單變短,邊界樣本也可能被錯過。如果時間很有限,我願意接受這種取捨;如果研究的是低流通股的異常量價,S3 也許該進另一份「門檻附近待複查」的名單。門檻只是幫人分配時間,不是替市場打分數。

成交股數還受到股價與流通股數影響。僅為說明量綱,假設成交 100 萬股,每股 10 元約對應 1,000 萬元成交金額,每股 100 元則約 1 億元;這不是實際成交資料。兩者都不能代表委託簿深度。成交金額、週轉率與買賣價差,通常比對所有股票套同一個股數門檻更值得看。

真正在篩選器裡操作,怎麼確認沒有篩錯?

程式裡的集合交集很簡單。實際介面比較容易出錯的地方,是以為自己新增了條件,結果只是改了表格排序。

我用自己參與維護的 NuvexLens 篩選器 核對這個流程。能直接觀察到的是:第二個條件加入時,第一個篩選標籤仍在,候選數摘要也繼續縮小。不必匯出兩份清單再手動求交集,確實省事;但這並不能當作某種特殊後端演算法已通過驗證的證據。

一次 US 市場 Overview 介面核對裡,可以同時看到 Volume 和 Relative Volume 資料欄,頂部也有 52W High 的篩選入口。這只能說明欄位可見,不能代表 RVOL 的數值過濾已經生效;我也沒有將畫面上的個股報價放進本文。

實際疊加兩個條件的觀察來自另一次 CN 市場操作:透過 Add New Filter 先加入 52W High > 10,再加入 Volume > 1000000。兩個標籤確實同時出現,候選數摘要也變小。這是特定時間點的 UI 觀察,不是歷史回測,也沒有凍結相同的股票池。CN 的條件操作不能和前面的 US Overview 欄位畫面混成同一份行情快照。

之後我會核對三件事:第一個價格標籤還在不在;第二個成交量條件究竟是從篩選器加入,還是只動了欄位選單;候選池真的變了,還是僅僅更換顯示順序。

這不是憑空假設。我有一次複查時點進 Volume 欄位的排序選單,而不是數值篩選器。後來重新透過 Add New Filter 操作,才確認兩個標籤並存。**排序只改變排列順序,過濾才改變入選集合。**而且若兩次的市場範圍或行情時間點不同,就算顯示筆數變少,也無法證明新名單必然是舊名單的子集合。

還有兩個數值不能混為一談:程式範例的「距 52 週高點不超過 5%」是我定義的假設條件;介面輸入的 52W High > 10 則是另一個真實 UI 操作記錄。沒有可靠的欄位單位說明,就不能自行把 10 解釋成「距新高 10%」。

名單縮短後,仍然得做的功課

就算 S2、S4 是真實股票,我也不會因為通過兩道初篩就下單。我更想問:今天的成交量,相對這檔股票平常的成交量,到底算不算活躍?絕對股數適合粗篩;RVOL 或同口徑的歷史平均量,則是下一步參考。

RVOL 大致是用目前成交量相對於可比較的歷史平均成交量來衡量。TradingView 的官方說明介紹一種以前 10 個週期均量為參考的算法;盤中同時段比較又會有不同處理。這說的是 TradingView 自己的計算方式,不能直接當成我操作那個篩選器的正式後端公式。本文也沒有實測 RVOL > 1.5 的過濾結果。

再來要看價格結構:只是靠近舊高、剛突破,還是已經衝高回落?附近有沒有壓力區?成交金額、委託簿深度、價差、停損位置和部位大小,又會不會讓兩檔看似相似的股票變成截然不同的決策?

本文的 6 → 4 → 2 完全是可複製的虛構例子;真實介面核對只驗證了可見的篩選標籤與候選摘要變化,沒有證明提高報酬。

我最後想保留的,是一個比較省力的研究順序:先看價格位置,再看成交活躍度,把有限時間留給還需要自己判斷的地方。篩選器可以讓我少打開很多張圖,但不會替我承擔買賣決策。

本文僅供研究與教育參考,不構成投資建議。