本文へスキップ
hdknr blog
戻る

株の「20%ルール」は3種類ある — 損切り幅で損益分岐勝率が倍以上ちがう

株式投資の「20%ルール」が X でトレンド入りしていた。「20%上がったら売る」というだけの、覚えやすくて実行しやすいルールだ。

20%ルール(20%ルール、20パーセントルール)とは、株価が買値から20%上昇したら利益確定する売買ルールの総称で、実際には損切り幅の異なる3つの流派がある。ところがこの3つは、期待値が成立する条件で見ると要求水準が正反対になる。分けているのは誰もが注目する利確側の「20%」ではなく、ほとんど話題にならない損切り側の幅のほうだ。

この記事で整理するのは次の4つ。

  1. 3つの「20%ルール」を損益分岐勝率という一本の物差しに載せる
  2. 実データ(TOPIX Core30)とシミュレーションで、市場平均と比べてどこが壊れるのかを確かめる
  3. 「勝率が高いルールほど良い」が成立しない理由
  4. 自分の売買ルールを3ステップで検証する手順

「20%ルール」は3つある

まず流通している定義を並べる。

呼ばれ方利確損切り出どころ
20/25ルール+20%−25%オックスフォードクラブ系。リバランスの目安として紹介されている
±20%ルール+20%−20%「20%上がったら売る、20%下がったら損切り」という最も流布した形
オニールの20〜25%ルール+20〜25%−7〜8%ウィリアム・オニールの CAN-SLIM(成長株の選定基準)。IBD 系で広く共有されている

上2つは「+20%で利確」という点で見た目がそっくりだが、3つ目とは損切り幅が3倍以上ちがう。この差が効いてくる。

20/25ルール・±20%ルール・オニールのCAN-SLIMの3つを並べ、利確幅と損切り幅、ペイオフレシオ、損益分岐勝率を比較した図。損切り幅の違いによって損益分岐勝率が55.6%から21.9%まで倍以上ひらくことを示している

「20/25ルール」は、オックスフォードクラブ・ジャパンの志村暢彦氏が『個人投資家もマネできる 世界の富裕層がお金を増やしている方法』(ダイヤモンド社)で紹介しているリバランスの目安だ。ダイヤモンド・オンラインの抜粋記事でも「短期的に保有銘柄の株価が20%値上がりしたら一度売却して利益確定し、25%値下がりしたら売る」と説明されている。ただし単体の売買手法ではなく、25銘柄のポートフォリオを回すための入れ替えトリガーとして提示されている点は補足しておきたい。

損益分岐勝率という一本の物差し

計算式

3つを比べるには、勝ったときの幅と負けたときの幅を勝率と突き合わせる必要がある。式はきわめて単純だ。

期待値 = 勝率 × 利確幅 − (1 − 勝率) × 損切り幅

これがゼロになる勝率が損益分岐勝率で、整理すると利確幅と損切り幅だけで決まる。

損益分岐勝率 = 損切り幅 ÷ (利確幅 + 損切り幅)

あわせて、利確幅 ÷ 損切り幅をペイオフレシオと呼ぶ。1回勝ったときの取り分が、1回負けたときの失点の何倍かを表す。

3つのルールを並べる

コードにするとこうなる。

def breakeven_winrate(take_profit: float, stop_loss: float) -> float:
    """利確幅・損切り幅(いずれも正の比率)から損益分岐勝率を返す"""
    return stop_loss / (take_profit + stop_loss)


for name, tp, sl in [
    ("20/25ルール", 0.20, 0.25),
    ("±20%ルール", 0.20, 0.20),
    ("オニール 20/8", 0.20, 0.08),
    ("オニール 25/7", 0.25, 0.07),
]:
    print(f"{name:<14} ペイオフ {tp/sl:>4.2f}  損益分岐勝率 {breakeven_winrate(tp, sl):>6.1%}")
20/25ルール       ペイオフ 0.80  損益分岐勝率  55.6%
±20%ルール        ペイオフ 1.00  損益分岐勝率  50.0%
オニール 20/8      ペイオフ 2.50  損益分岐勝率  28.6%
オニール 25/7      ペイオフ 3.57  損益分岐勝率  21.9%

ここで3つの性格がはっきり分かれる。

利確側の「20%」は3つとも共通なのに、損益分岐勝率は 21.9% から 55.6% まで倍以上ひらく。議論すべきなのは利確幅ではなく損切り幅、というのが最初の結論になる。

SBI証券のTOPIX Core30検証 — ±20%ルールは市場平均に負けた

ここまでは机上の算数なので、実データを見る。SBI証券の投資情報メディアが TOPIX Core30(東証の代表的な大型株30銘柄)で ±20%ルールを検証している(2026年2月19日、投資情報部 土居雅紹氏)。

検証期間は 2023/10/2〜2025/9/30 の2年間で、毎月末終値で判定する。結果はこうなった。

項目結果
TOPIX Core30 構成銘柄の単純平均騰落率+33.6%
同期間の TOPIX 変化率+35.6%
±20%ルールで運用した場合の平均騰落率(各銘柄に同額を配分)+12.0%
+20%で利確して終了した銘柄23銘柄
−20%で損切りして終了した銘柄5銘柄
最後まで残った銘柄2銘柄
最も上昇した銘柄の2年騰落率+199%(約3倍)

ルールを守った結果、市場平均に近い +33.6% に対して +12.0% しか取れていない。原因は明快で、30銘柄中28銘柄が2年を待たずに強制的に降ろされている。とくに +199% まで伸びた銘柄も、+20%に触れた時点で手放している。

株式リターンの分布がロングテールであることを示すヒストグラムに、−20%と+20%の売却ラインを重ねた図。+20%より右側の上昇帯が丸ごと放棄されていることを赤く塗って示している

株式リターンの分布は左右対称の「富士山型」ではなく、ごく一部の銘柄が極端に伸びるロングテールになっている。上位のわずかな銘柄が全体のリターンの大半を稼ぐ構造だ。±20%ルールはこの右の裾を根元で切り落とす。

なお SBI証券自身が注記しているとおり、この試算は配当・税金・売却代金の再運用損益を考慮せず、期中の銘柄入れ替えも織り込んでいない。それでも「ヒーロー銘柄を早く手放した」という主因は動かない。

一方で ±20%ルールにも良い面はある。−20%より先に下落した銘柄については、そこで損失が止まっている。損失の管理装置としては機能していた。壊れているのは利確側だけだ。裏を返せば、エントリー側に優位性を持ち込めるなら話は変わる(この論点は押し目買いの記事で扱っている)。

モンテカルロ検証:勝率が高いルールほど良い、は成立しない

ここが直感に反する部分なので、シミュレーションで確かめる。幾何ブラウン運動(GBM。株価がランダムに上下しながら一定の率で成長すると仮定する標準的なモデル。詳しくは wiki のモンテカルロ法による売買判定にまとめている)で2年分の価格経路を2万本生成し、バイ&ホールドと各ルールを比較した。SBI証券の検証は月末終値判定だったが、ここでは日次で判定するので利確・損切りに触れやすい点は割り引いて読んでほしい。

import numpy as np

rng = np.random.default_rng(42)

N_PATHS, N_STEPS = 20_000, 504        # 2年 ≒ 504営業日
MU, SIGMA = 0.08, 0.30                # 年率ドリフト 8%・ボラティリティ 30%
DT = 1 / 252


def simulate_paths():
    shocks = rng.normal((MU - 0.5 * SIGMA**2) * DT, SIGMA * np.sqrt(DT), (N_PATHS, N_STEPS))
    return np.exp(np.cumsum(shocks, axis=1))     # 買値を 1.0 とした価格経路


def bracket_rule(paths, take_profit, stop_loss):
    """先にタッチしたほうで手仕舞う。どちらも触れなければ満期の価格で決済する"""
    hit_tp = paths >= 1 + take_profit
    hit_sl = paths <= 1 - stop_loss
    first_tp = np.where(hit_tp.any(1), hit_tp.argmax(1), N_STEPS)
    first_sl = np.where(hit_sl.any(1), hit_sl.argmax(1), N_STEPS)
    exited = np.where(first_tp < first_sl, take_profit, -stop_loss)
    survived = (first_tp == N_STEPS) & (first_sl == N_STEPS)
    return np.where(survived, paths[:, -1] - 1.0, exited)


paths = simulate_paths()
bh = paths[:, -1] - 1.0
print(f"バイ&ホールド        平均 {bh.mean():+.1%}  中央値 {np.median(bh):+.1%}  勝率 {(bh > 0).mean():.1%}")
for tp, sl in [(0.20, 0.25), (0.20, 0.20), (0.20, 0.08), (0.25, 0.07)]:
    r = bracket_rule(paths, tp, sl)
    print(f"利確{tp:.0%}/損切り{sl:>3.0%}    平均 {r.mean():+.1%}  中央値 {np.median(r):+.1%}  勝率 {(r > 0).mean():.1%}")
バイ&ホールド        平均 +17.3%  中央値 +7.3%  勝率 56.9%
利確20%/損切り25%    平均 +4.2%  中央値 +20.0%  勝率 64.5%
利確20%/損切り20%    平均 +3.6%  中央値 +20.0%  勝率 58.8%
利確20%/損切り 8%    平均 +1.8%  中央値 -8.0%  勝率 35.1%
利確25%/損切り 7%    平均 +2.2%  中央値 -7.0%  勝率 28.9%

読みどころは3つある。

1. 勝率の高さは、成績の高さを意味しない

最も勝率が高いのは 20/25ルールの 64.5%、最も低いのはオニール型(25/7)の 28.9%。勝率で2倍以上ひらいているのに、平均リターンはどれも +1.8〜4.2% の狭いレンジに収まる。勝率3割でもペイオフレシオが効いて期待値はプラスに立つ、というのがこの表の意味だ。

20/25ルールが人気を集めやすい理由もここに出ている。3回に2回勝てるという体感が得られるうえ、中央値が +20.0% とバイ&ホールドの +7.3% を上回る。典型的な1回は気持ちよく勝てる。平均で負けているだけだ。

2. どのルールも損益分岐勝率は上回っている

20/25ルールの実現勝率 64.5% は損益分岐点の 55.6% を、オニール型の 28.9% は 21.9% を、それぞれ超えている。つまりこの4つはいずれも期待値プラスであり、「20/25ルールは期待値マイナスだからダメ」という単純な断定は、上昇ドリフトのある相場では成り立たない。損益分岐勝率は入口の足切り基準であって、それを超えるかどうかは相場次第だ。

3. それでも平均では全部がバイ&ホールドに負けている

+17.3% に対してどれも数%。ここが本丸だ。上下どちらかに手仕舞いラインを置いた時点で、右の裾に到達する経路が消える。損切り幅をどういじってもこの損失は取り戻せない。

なお、これはあくまで銘柄選択の巧拙がゼロという前提のシミュレーションであることに注意したい。エントリーに優位性があるなら結論は変わりうる。オニールのルールは「ブレイクアウトした主導株」という選別済みの母集団を前提にしているので、無選別の GBM に当てはめて優劣を語ることはできない。

逆方向の注記もひとつ。実際の株式リターンは GBM が仮定する対数正規分布よりも裾が厚いので、このシミュレーションはロングテール切断の損失をむしろ過小評価している。SBI証券の実データで差が21.6ポイントもひらいたのは、そのためだ。

オニールの20〜25%ルールが壊れない理由 — 8週ルールという例外

同じ「+20〜25%で利確」なのに、オニールのルールだけがロングテールの切断を回避できているのは、単体のルールではなく例外規定とセットで運用されるからだ。

損切りは −7〜8%

ペイオフレシオが 2.5〜3.6 あるので、勝率3割前後でも回る。利確側を動かさずに損切り側だけを絞ることで、必要勝率を半分以下に下げている。

8週ルール(8-week hold rule)

ブレイクアウトから3週間以内に20%以上上昇した銘柄は、利確ルールを適用せず最低8週間は保有する。短期間で20%走る動きは機関投資家の強い需要を示すシグナルとみなし、大化けする可能性のある銘柄を早売りしないための例外として置かれている。8週間のあいだにはたいてい10%程度の押し目が入るが、ルールで握らせることで振り落としを防ぐ設計だ。

つまり「20〜25%で利確」は原則であって、ヒーロー銘柄をふるい分ける条件が別途組み込まれている。この例外を外して「20%で利確」だけを抜き出すと、SBI証券の検証で起きたのと同じ結果になる。X で拡散されているのは、たいていこの抜き出された断片のほうだ。

売買ルールを自分で検証する最小手順

出どころの違うルールが同じ名前で流れてくる以上、鵜呑みにせず自分で確かめる手順を持っておくのが早い。最小構成は3ステップで足りる。

ステップ1:損益分岐勝率を出す

stop_loss / (take_profit + stop_loss) を計算するだけ。ここに自分の実現勝率が届きそうにないなら、その時点で検討を打ち切ってよい。

ステップ2:ベンチマークと比べる

「そのルールが勝てるか」ではなく「何もしないより勝てるか」を問う。比較対象はバイ&ホールドかインデックス。上の検証では4つとも「勝てるが、何もしないよりは負ける」だった。あわせて往復コストを引いても残るかも見る。損益分岐勝率が 50% 前後のルールは、手数料と譲渡益課税を通しただけで符号が反転する。

ステップ3:試行回数を確保する

10回程度の検証では期待値の符号すら判定できない。マナカブ.com の中山まさかず氏も同じ趣旨の指摘をしていて、最低でも50〜100回の検証を推奨している。検証データを揃える手段は J-Quants を使ったファクター分析の記事に、実装側は自動バックテストの記事にまとめてある。

3の裏返しとして、1銘柄あたりの張り方にも触れておきたい。20/25ルールで4連敗した場合、資金の何%を1銘柄に投じていたかで結果はまったく違う。値幅ルールは資金配分とセットでないと安全性を語れない。もともと20/25ルールが25銘柄のポートフォリオ前提で提示されていたのは、そういう意味だ。

まとめ

関連記事

本記事は情報整理を目的としたもので、特定の売買を推奨するものではありません。投資判断はご自身の責任でお願いします。

参考リンク



前の記事
AIエージェントで採用ES・履歴書を事前スクリーニングする仕組みの作り方【2026年】
次の記事
グラフエンジニアリング入門 — AIエージェントで多因子アルファモデルを組む「4段階」の到達点