52週高値と出来高を組み合わせると、調べる銘柄をどこまで減らせるか
52週高値に近い株を買うとき、一番気になるのは「上抜けた直後に反落したらどうするか」だと思う。ただ、そこに出来高や相対出来高(RVOL)を重ねても、反落する銘柄を予知できるわけではない。
私が解決したいのは、注文よりずっと前の問題だ。高値圏にいるのに取引がほとんどない銘柄もあれば、出来高だけ急増して高値から遠く離れた銘柄もある。調べる時間が限られているなら、まずどれを残すか。
そこで価格の位置で一度絞り、絶対出来高でもう一段絞り、残った候補のRVOLや流動性を見ることにしている。今回、実際の画面で適用を確認したのは 52W High と Volume の2条件。Relative Volume 列は次の調査に利用できるものの、RVOL の数値しきい値を設定・検証したわけではない。
スクリーニングは、売買シグナルではなく、調査に使う時間の振り分けだ。
2つの条件は、別々の不安を減らす
52週高値は、現在値を過去1年の値動きの中で位置づける目安になる。高値に近いということは、少なくともこの期間では比較的強い価格帯にいる。しかし、ブレイクアウトの有効性やその後の上昇を保証するものではない。
そもそも「高値に近い」の定義はツールごとに異なりうる。Finvizのスクリーナー解説には期間高値や高値からのパーセント距離による条件がある。「高値から5%以内」は計算可能な調査ルールだが、別の製品で 52W High に「10」と入力したときも同じ意味になるとは限らない。
出来高が補うのは流動性の確認だ。高値に近くても取引が薄ければ、売買スプレッド、板の厚み、実際に希望する価格でポジションを出し入れできるかを調べなくてはならない。チャートがきれいでも、その価格で約定できるとは限らない。
私はこれを調査コストとして考える。商いの薄い銘柄が候補に1つ増えるたびに、売買のしやすさを確かめる仕事も増える。Investor.govの流動性に関する説明も、価格に大きな影響を与えずに売却できるかという点を重視している。出来高が多いからといって板が十分厚いとは限らない。
逆に出来高だけを追っても、下落時の大商いが混ざる。だからこの2条件は足し算するスコアではなく、候補集合の共通部分として使う。勝率が高くなると主張するためではない。
架空の6銘柄から、なぜ2銘柄だけ残るのか
実際の相場データはいったん使わない。S1〜S6という存在しない銘柄を6つ作り、それぞれに仮の現在値、52週高値、当日出来高を割り当てた。
1段目では「現在値が仮の52週高値の95%以上」、2段目では「仮の出来高が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],
];
// 各行:[銘柄ID、仮の現在値、仮の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、S4 | S5とS6は高値から遠い |
| 出来高100万株以上:2銘柄 | S2、S4 | S1とS3は出来高が不足 |
面白いのは S3 だ。仮の価格190に対し高値が200なので、ちょうど95%の境界にいる。ところが出来高は90万株、2段目の基準より10万株だけ少ない。プログラムは迷わず S3 を落とす。しかし、それで S3 に研究価値がないと決まるわけではない。
粗いフィルターで候補が短くなる一方、境界付近の銘柄を取りこぼす可能性もある。今日は数銘柄しか調べられないなら、この取りこぼしを受け入れるかもしれない。低浮動株の出来高急増を探す日なら、S3を「境界付近・要再確認」の別リストに置く方がよさそうだ。しきい値は時間の配分を助けるのであって、銘柄の良し悪しを採点しない。
絶対出来高にも事情がある。あくまで単位の説明だが、仮に100万株がすべて1株10元で取引されたなら売買代金は約1,000万元、100元なら約1億元になる。どちらも実際の約定データではないし、板の厚みを示す数値でもない。売買代金、回転率、スプレッドの方が、全銘柄共通の株数基準より役立つことがある。
実際の画面では「絞り込み」と「並べ替え」を取り違えやすい
配列をフィルタリングするコードは単純だ。実際のスクリーナーでは、条件を追加したつもりでテーブルの順序だけを変更してしまう方が厄介になる。
私は開発・運用にも関わっている NuvexLensのスクリーナー で、その手順を確認した。画面上で確かめたのは、2番目の条件を加えたあとも1番目のフィルターチップが残り、候補数の概要がさらに小さくなったことだ。2つのリストをエクスポートして手動で突き合わせずに済むのは便利だが、特別なバックエンドの仕組みを証明したわけではない。
US市場のOverview を確認した別の機会には、Volume と Relative Volume の列、および 52W High のフィルター入口が見えた。ただし列があることと、RVOLの数値条件が適用済みであることは別だ。画面に表示されていた実際の銘柄や価格もこの記事には載せていない。
2条件を同時に適用した観察は、それとは別のCN市場の操作だ。Add New Filterから 52W High > 10 を追加し、続けて Volume > 1000000 を追加した。2つのチップは同時に表示され、候補数の概要も縮んだ。言えるのはその時点のUIの動作までで、履歴バックテストでも、固定した同一銘柄集合の確認でも、内部エンジンの検証でもない。USの列表示とCNのフィルター操作を同じ市場スナップショットとして扱ってはいけない。
私が複数条件の操作を見直すときは、最初の価格フィルターが残っているか、出来高条件を列メニューではなくフィルターから追加したか、そして本当に対象行が変わったのかを確認する。
この注意には実体験がある。ある再確認の際、私は Volume 列の並べ替えメニューを開いてしまい、数値フィルターを操作していなかった。Add New Filterからやり直して、2つの条件が残っていることを確認できた。**並べ替えは表示順、フィルタリングは候補集合を変える。**市場範囲や時点が違えば、件数が減っただけでは、新しい集合が前の集合の部分集合だとも言い切れない。
もう1つ、数字の読み替えにも注意したい。先ほどの架空コードは「52週高値の95%以上」。画面で入力したのは 52W High > 10。フィールドの単位が確認できない以上、後者の「10」を勝手に「高値から10%以内」と解釈することはできない。
候補が少なくなっても、判断は終わらない
仮に S2 と S4 が実際の銘柄だったとしても、これだけでは注文しない。今日の出来高は、その銘柄の普段と比べて本当に活発なのか。絶対出来高は最初のふるいにすぎず、その次は同条件の過去平均出来高や RVOL を見る。
RVOLは通常、現在の出来高を比較可能な過去平均出来高と比べる。TradingView自身の公式ドキュメントには、直近10期間の平均を使う方式と、取引時間帯を合わせた別の比較方法が説明されている。これはTradingViewの計算についての資料であり、今回確認したスクリーナーの実装式を裏づけるものではない。「RVOL > 1.5 を今回適用して成功した」とも主張していない。
最後は価格の形だ。以前の高値に近づいているだけか、上抜けたばかりか、それとも急騰後に押し戻されているのか。近くの上値抵抗、売買代金、板の厚み、スプレッド、損切り位置、建玉サイズも見る必要がある。同じ条件を通った2銘柄でも、調べるべきことは違ってくる。
ここに示した 6 → 4 → 2 は再現可能な架空の例であり、実相場の検証結果ではない。画面操作で確認したのも、表示されたチップと候補数の変化まで。投資リターンの改善を証明するものではない。
私が使い続けたいのは、まず価格の位置、次に売買の活発さで候補を減らし、本当に人が判断すべき部分に時間を回す順番だ。スクリーナーが何百枚ものチャートを開く手間を減らしても、売買の責任まで引き受けてくれるわけではない。
本記事は調査・学習目的であり、投資助言ではありません。