三角保ち合い:保ち合いを抜けた方向について行く
- 値幅収縮の後のブレイクは上が60.7%(34回/56回)。収縮なしのブレイクの57.8%とほぼ同じ
- 上ブレイクの20日後に上がっていた割合は60.6%。すべての日の58.0%と大差なく、54.5%は10日以内に箱の中へ戻った
- 上ブレイクで買って20日保有するルールは取引24回・年率0.8%。取引の少なさと後半の失速が弱点
三角保ち合いを「数字」で決める
三角保ち合い(さんかくもちあい)は、高値が少しずつ切り下がり、安値が少しずつ切り上がって、値動きの幅が三角形のように狭まっていく形です。英語ではトライアングル。どちらかの線を抜けることを「放れ」または「ブレイク」と呼びます。
斜めの線を機械的に引くのは難しいので、今回は20日ずつの2つの区間を比べる形で定義しました。結果を見る前に決めた条件です。
かつ 20日安値 > 前の20日安値
かつ 値幅率の250日順位 ≦ 30%
上ブレイク = 10日以内に 終値 > 箱の上限
下ブレイク = 10日以内に 終値 < 箱の下限
約19年(4,760営業日)で、収縮の条件を満たした日は316日(6.6%)。①②だけなら654日、③だけなら1,450日あり、3つを重ねるとぐっと絞られます。収縮日の値幅率の中央値は5.02%で、全日の7.53%より3割ほど狭くなっています。
「縮んだら大きく動く」は本当か
箱ができてから、抜けるか期限切れまでを1回と数えると57回。そのうち10日以内に抜けなかったのは1回だけで、平均1.4日で抜けていました。箱が狭いので、抜けること自体は簡単に起きます。
「値幅が縮んだ後は、大きく動き出す」と言われますが、収縮からのブレイク後20日間の日々の値動き(標準偏差)は1.11%で、全日の1.34%より小さいままでした。静かな相場は、抜けた後もしばらく静かです。
実際の日経平均で見てみる
直近500営業日で収縮の日は49日、箱は5回できました。2025年12月12日〜30日の箱(上限51,128円・下限48,644円)は、2026年1月5日に終値51,833円で上に抜け、20日後は+5.57%。一方、2024年12月12日の上ブレイク(39,849円)は20日後−3.20%でした。
いちばん新しいのは2026年9月15日〜30日の箱です。9月30日は20日高値67,035円・20日安値62,726円で、前の20日(69,608円・61,948円)より内側。値幅率6.45%は過去250日の8%の位置でした。10月1日に終値68,956円で上ブレイクし、主ルールでは保有中です。
集計:どちらに抜け、その後続いたか
| ブレイクの種類 | 上 | 下 | 上の割合 |
|---|---|---|---|
| 収縮からのブレイク | 34 | 22 | 60.7% |
| 前半(〜2016年9月) | 11 | 11 | — |
| 後半(2016年10月〜) | 23 | 11 | — |
| 収縮なしのブレイク(前日までの20日高値・安値を抜けた日) | 89 | 65 | 57.8% |
上に抜ける割合は60.7%と、収縮なしの57.8%とほとんど変わりません。日経平均がこの19年で上昇してきた分の偏りと見るのが自然です。直前60日が上昇中だった箱でも60.0%、下落中でも61.5%で、「それまでのトレンドの方向に放れる」傾向は見られませんでした。
下ブレイクは半分以上が20日後には上がっていて、「下に抜けたら下落が続く」とは言えません。上ブレイクも10日以内に終値が箱の中へ戻ったのが18回/33回(54.5%)。いわゆる「だまし」が半分を超えます。
検証:収縮からの上ブレイクで買い、20日保有
ルール:上の定義で上ブレイクした日の終値で買い、20営業日後に売る(保有中に再びブレイクしたら延長)。感度は保有16日・24日。比較として、収縮なしの上ブレイクでも同じ売買をしました。条件は共通の検証ルールのとおりです。
| 戦略 | 最終資産 | 年率 | 最大下落率 | 取引 | 勝率 | PF | 保有率 |
|---|---|---|---|---|---|---|---|
| 買い持ち | 3.93倍 | 7.3% | −61.4% | — | — | — | 100% |
| 収縮→上ブレイク→20日保有 | 1.18倍 | 0.8% | −16.0% | 24 | 54% | 1.59 | 11% |
| 収縮→上ブレイク→16日保有 | 1.05倍 | 0.2% | −18.2% | 24 | 58% | 1.22 | 9% |
| 収縮→上ブレイク→24日保有 | 1.39倍 | 1.7% | −17.9% | 24 | 54% | 1.94 | 13% |
| 収縮なし 上ブレイク→20日保有 | 1.62倍 | 2.5% | −35.6% | 79 | 52% | 1.47 | 37% |
| (参考)収縮→下ブレイクで買い→20日保有 | 1.39倍 | 1.7% | −17.9% | 20 | 55% | 1.96 | 9% |
主ルールは19年で24回しか取引がなく、保有率は11%。1回平均は+0.82%ですが、年率は0.8%にとどまります。前半8回はPF3.08、後半16回はPF1.14と、回数の多い後半で優位が薄れました。逆に、参考扱いの「下ブレイクで買う」版の方がPF1.96と高く、ブレイクの向きに意味が乏しいことを裏づけています。
同じ「縮みからの放れ」を狙った#015 バンド幅(年率0.2%、取引19回、PF1.25)、TTMスクイーズ(年率1.3%、取引34回、PF1.53)と並べても、結果はよく似ています。どれも回数が少なく、年率は1%前後です。
読み解き
- ブレイクの向きは、ほぼ地合いどおり。収縮後の上ブレイクは60.7%で、収縮なしの57.8%と差がない。直前60日の流れで分けても60.0%と61.5%で、トレンド継続の傾向は出なかった。
- 抜けても続かない。上ブレイク後20日で上がっていたのは60.6%と全日の58.0%並み。54.5%は10日以内に箱の中へ戻り、下ブレイクでも20日後平均は+1.25%だった。
- 縮みを条件にすると、機会が減るだけ。主ルールは取引24回・年率0.8%。収縮なしの上ブレイクの年率2.5%(取引79回)を下回り、#015・TTMスクイーズと同じく「静けさの後の放れ」に優位は見えなかった。
成績のまとめ(収縮からの上ブレイク→20日保有)
取引は19年で24回と少なく、後半(2016年10月〜)の年率0.1%は前半1.6%の半分に届かない。最大下落率−16.0%は小さいが、保有率11%で市場にいる時間が短いためで、年率0.8%は買い持ち7.3%に遠く及ばない。定義を変えた参考版(順位24%・36%、期間16日・24日)も取引は22〜30回で、回数の少なさは変わらなかった。
自分で試す(TradingView)
//@version=6
indicator("三角保ち合い(値幅収縮のブレイク)", overlay = true)
len = input.int(20, "期間")
q = input.float(30, "値幅率の順位(%以下)")
wait = input.int(10, "ブレイクを待つ日数")
h20 = ta.highest(high, len)
l20 = ta.lowest(low, len)
rng = (h20 - l20) / close
rk = ta.percentrank(rng, 250) // 過去250本の中での順位(近似)
squeeze = h20 < h20[len] and l20 > l20[len] and rk <= q
var float boxH = na
var float boxL = na
var int last = na
bool upB = false
bool dnB = false
if not na(boxH)
if bar_index - last > wait
boxH := na
boxL := na
else if close > boxH
upB := true
boxH := na
boxL := na
else if close < boxL
dnB := true
boxH := na
boxL := na
if squeeze and not upB and not dnB
boxH := h20
boxL := l20
last := bar_index
plot(boxH, "箱の上限", color.teal, style = plot.style_linebr)
plot(boxL, "箱の下限", color.orange, style = plot.style_linebr)
plotshape(upB, "上ブレイク", shape.triangleup, location.belowbar, color.green, size = size.tiny)
plotshape(dnB, "下ブレイク", shape.triangledown, location.abovebar, color.red, size = size.tiny)

