ボリンジャーバンドとADXを組み合わせる考え方 — スクイーズ明けを見極める設計
ボリンジャーバンドは価格の散らばりからボラティリティの状態を、ADX(Average Directional Index)はトレンドの強さを数値化する指標です。バンド幅が広がったとき、それが方向性を伴う動きの始まりなのか、それとも一時的に荒れているだけなのかは、バンドだけを眺めていても判別しにくいところがあります。ADXは、この「広がりに方向性が伴っているか」という問いに対する材料を与えてくれます。
本記事では、バンド幅の変化とトレンド強度を重ねて観察する設計の考え方と、cBotに落とし込むときの実装上の注意点を整理します。特定の設定が成果を保証するという趣旨ではなく、設計の道具立てを揃えるための資料として読んでいただければと思います。
ボリンジャーバンドの役割
ボリンジャーバンドは、移動平均線を中心に、終値の標準偏差を一定倍した幅を上下へ描く指標です。指標そのものの成り立ちはボリンジャーバンドとは何を測る指標かにまとめていますので、必要に応じて参照してください。
この指標が可視化しているのは「価格がどれだけ散らばっているか」です。バンド幅が狭くなる収縮(スクイーズ)は値動きが小さくまとまっている状態、広がる拡張(エクスパンション)は散らばりが大きくなった状態として一般に解釈されます。収縮のあとに拡張が訪れやすいという経験則から、待機と仕掛けのリズムを測る道具として扱われることもあります。
ただし、バンド幅が語れるのはそこまでです。幅が広がったという事実は「動きが大きくなった」ことを示しますが、その動きに一貫した方向があるかどうかまでは含んでいません。上下へ激しく振れるだけの荒れた相場でも、片方向へ伸び続ける相場でも、バンドは同じように広がります。±2σへのタッチを反転の合図と読むか、継続の裏づけと読むかで解釈が正反対になってしまうのも、この「方向性の情報が欠けている」点に由来します。単独利用の限界はここにあります。
ADXの役割
ADXは、上昇方向の勢い(+DI)と下降方向の勢い(−DI)の差を平滑化し、トレンドの強さを一定の範囲の数値として表す指標です。詳細はADXでトレンドの強さを測るを参照してください。
ADXの特徴は、値が「強さ」だけを示し、方向を示さない点にあります。上昇でも下降でも、一方向への動きが継続していればADXは上向きになります。数値が低い水準にとどまっている間は方向感の乏しいもみ合い、上昇して一定の水準を超えてくるとトレンドが発生している、という読み方が一般的とされています。
一方で、単独利用には明確な弱点があります。ひとつは遅行性です。ADXは平滑化を重ねた指標のため、動きが始まってからしばらく経って、ようやく上向きに転じます。もうひとつは方向情報を持たないことで、買い側と売り側のどちらに傾いているかは+DIと−DIの位置関係を別途確認しなければ分かりません。「強さは分かるが、いつ・どちらに、という情報は薄い」というのがADXの性格です。
なぜこの組み合わせか
この2つは、欠けている部分がちょうど裏返しになっています。ボリンジャーバンドは「動きの大きさが変化したタイミング」に敏感ですが、方向性については何も語りません。ADXは「方向性の有無」を語りますが、タイミングの検知は遅れます。一方の弱点をもう一方が補完する関係にあると考えられます。
両者の状態を掛け合わせると、次のような読み分けができます。
- バンド幅が収縮 + ADXが低位 → 方向感の乏しい停滞局面と判定する材料
- バンド幅が拡大 + ADXが上昇 → 方向性を伴う拡大と判定する材料
- バンド幅が拡大 + ADXは低位のまま → 振れ幅だけが大きい荒れた局面と疑う材料
- バンド幅が収縮 + ADXが高位から低下 → 動きが減速しつつある局面と判定する材料
3つ目のパターンが、この組み合わせの実質的な価値だと言えます。バンドだけを見ていると、拡大はどれも等しく「動き出した」ように見えます。そこへADXを重ねることで、方向性の伴わない拡大を切り分ける材料が手に入ります。判定が二重の確認になるため、ダマシへの耐性という文脈で語られることも多い構成です。ダマシそのものの整理はブレイクアウトとダマシの基本にまとめています。
一方で、副作用も正直に見ておく必要があります。条件を重ねるほど、両方が揃うまで待つことになり、判定は確実に遅くなります。ADXの遅行性が、ボリンジャーバンドの反応の早さを打ち消す方向に働くためです。「動き出しをできるだけ早く捉えたい」という目的に対しては、この組み合わせは向きません。フィルターを増やすことは、判定の慎重さと機会の数のトレードオフである、という前提を持っておくと設計判断がぶれにくくなります。同じボラティリティ側の指標を重ねるボリンジャーバンドとATRを組み合わせる考え方とは狙いが異なるため、意識して使い分けたいところです。
パラメータをどう考えるか
唯一の正解があるわけではないので、検証して自分の運用時間軸に合わせる前提で、方向性だけを整理します。
ボリンジャーバンドの期間と乗数: 期間20・±2σが標準として広く使われています。期間を短くすると収縮・拡張の判定が敏感になり、状態フラグが頻繁に切り替わります。長くすれば判定は安定しますが、変化を捉えるタイミングはさらに遅れます。
ADXの期間としきい値: 期間は14が標準です。しきい値は20〜25あたりを目安に「トレンドあり/なし」を分ける運用が一般的とされていますが、適正な水準は銘柄と時間足によって変わります。値動きの荒い銘柄では同じ期間設定でもADXの出方が違うため、複数銘柄で同じしきい値を使い回すのは避けたほうが無難です。
バンド幅の正規化: バンド幅は価格の絶対値に比例するため、そのままでは銘柄をまたいで比較できません。中心線で割る、あるいは直近N本のバンド幅の中での相対位置に変換しておくと、しきい値を共通化しやすくなります。
いずれの設定であっても、過去データで挙動を確認してから運用へ移す流れは省略しないことが大切です。
cBot化する際の考慮点
cTraderのcBotとして組み込む場合、押さえておきたい設計上のポイントがいくつかあります。
判定タイミング: どちらの指標も複数本のデータに依存するため、確定足を対象にOnBarで判定する構成が安定しやすいです。ティックごとに再計算すると、同一バー内でバンド幅もADXも動き続けるため、状態フラグが立ったり消えたりします。
ウォームアップ期間: ADXは平滑化の段数が多く、起動直後は値が落ち着きません。バー数が不足している間はLastValueがNaNを返す場合もあります。判定へ入る前にバー数のチェックとNaNチェックを置き、必要な本数が溜まるまでは状態を「不明」として扱う設計にしておくと安全です。
状態遷移のヒステリシス: ADXがしきい値の近辺を行き来すると、判定が一本ごとに反転します。上抜け用と下抜け用でしきい値を少しずらす、あるいは連続N本条件を満たしたときだけ状態を切り替えるといった作り込みを入れると、フラグが安定します。
計算負荷: 指標値そのものの参照は軽い処理ですが、直近N本のバンド幅から相対位置を毎回計算するような処理はコストが乗ります。OnBarで一度だけ更新し、結果をフィールドに保持する形が扱いやすいです。
// 例: バンド幅とADXを状態フラグにまとめる
private BollingerBands _bb;
private DirectionalMovementSystem _dms;
protected override void OnStart()
{
_bb = Indicators.BollingerBands(Bars.ClosePrices, 20, 2, MovingAverageType.Simple);
_dms = Indicators.DirectionalMovementSystem(14);
}
protected override void OnBar()
{
int i = Bars.Count - 2; // 確定済みの最新バー
if (i < 0) return;
double width = _bb.Top[i] - _bb.Bottom[i];
double adx = _dms.ADX[i];
if (double.IsNaN(width) || double.IsNaN(adx)) return;
double normalized = width / _bb.Main[i]; // 中心線で正規化
// normalized と adx を組み合わせて状態フラグを更新する
}
開発初期は、正規化後のバンド幅とADXを毎バーログへ出しておくと、あとからチャートの動きと突き合わせて検証しやすくなります。
実装の流れ
処理全体を、入力から出力までの流れで整理します。
- 入力: 監視する銘柄と時間足を決め、確定足の価格系列を取得する
- 計算: バンド幅(上限−下限)を正規化した値と、ADXの最新値・数本前の値を求める
- 判定: バンド幅の状態(拡大/収縮/中間)とADXの状態(高位・上昇中/低位)を突き合わせ、現在の局面フラグを決める
- 出力: 決まったフラグをログ、チャート表示、あるいは外部通知へ渡す
この構成は、エントリー判定そのものではなく 局面を分類する部品 として実装しておくと応用が利きます。順張り寄りのロジックも逆張り寄りのロジックも、前提となる局面フラグを参照する形にしておけば、上に乗せる戦略だけを差し替えられる構造になります。フラグの定義とエントリー条件を同じメソッドへ詰め込んでしまうと、あとから片方だけを調整することが難しくなるため、最初から分けておくことをおすすめします。
どう活用するか
ここまでの内容は、目的に応じて使い分けられます。
自作される方は、Claude Code でcBotを書き起こす際の設計メモとして、本記事の節構造をそのまま指示文の骨組みに流用してみてください。開発を依頼される方は、ai-programming.xyzへご相談いただく際に「バンド幅とADXの二軸で局面を分類したい」という前提を共有しておくと、要件の詰めがスムーズになります。学習目的で読まれた方は、スクールの実践課題として、局面フラグを自分の手で実装してみる演習に使えます。
ボリンジャーバンドとADXの組み合わせは、「タイミングを捉える指標」と「性質を確認する指標」を役割分担させるという、組み合わせ設計の基本形でもあります。この考え方に慣れておくと、より多くの要素を重ねる設計へ進むときの足場になります。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。