ボリンジャーバンドとケルトナーチャネルの組み合わせ — 帯の内包でボラティリティ圧縮を捉える設計

チャート上に帯を描くインジケーターは数多くありますが、それらを2本同時に重ねる意味を考えたことはあるでしょうか。本記事では、標準偏差から幅を決めるボリンジャーバンドと、ATR(真の値幅の平均)から幅を決めるケルトナーチャネルを重ね、2つの帯の内包関係からボラティリティの圧縮局面を判定する考え方を整理します。単独の帯では「いま狭いかどうか」を過去との比較でしか語れませんが、性質の違う帯どうしを比べると、しきい値を決め打ちせずに状態を分類できます。想定読者は、ブレイクアウト型のcBotを自作したい方、レンジ局面での無駄なエントリーを減らしたい方です。ここで扱うのは判定の枠組みであり、特定の設定値を推奨するものではありません。

上段に価格とボリンジャーバンド・ケルトナーチャネルを重ね、下段に帯幅の推移を示した模式図。左側でボリンジャーバンドがケルトナーチャネルの内側に収まる圧縮局面、右側で外側へ抜ける拡張局面を対比している

ボリンジャーバンドの役割

ボリンジャーバンド(Bollinger Bands)は、移動平均を中心線とし、そこへ終値の標準偏差(ばらつきの大きさを表す統計量)×倍率を加減して上下の帯を描くインジケーターです。基本的な読み方はボリンジャーバンドの基礎にまとめているため、ここでは帯幅の変化に絞って扱います。

この指標の持ち味は、幅の変化が価格のばらつきに直結して現れる点です。値動きが小さくまとまると標準偏差が縮んで帯が細くなり、値動きが荒れると帯が急速に広がります。細くなった状態はスクイーズ、広がる過程はエクスパンションと呼ばれ、静と動の切り替わりを視覚化する材料として広く使われています。

単独使用時の限界は、「細い」の判断基準が相対的にしかつくれないことです。帯幅の絶対値は銘柄や時間足で桁が変わるため、過去の自分の幅と比べる形になります。しかし何本前と比べるかで結論が変わり、比較期間の決め方そのものが恣意的になりがちです。加えて、帯が細いという情報は次の動きの方向を含みません。狭い帯の中で価格が上下どちらへ抜けるかは、この指標だけでは判断できないのです。

ケルトナーチャネルの役割

ケルトナーチャネル(Keltner Channel)は、中心線のEMA(指数移動平均)に、ATR×係数の帯を加減して描くチャネルです。ATRの性質はATRの基礎を、他のチャネル系との使い分けはケルトナーチャネルとRSIの組み合わせを参照してください。

ボリンジャーバンドとの決定的な違いは、幅の材料です。標準偏差が終値のばらつきだけを見るのに対し、ATRは高値・安値・前日終値から算出する真の値幅を平均します。つまりケルトナーチャネルは、ヒゲを含む実際の値動きの大きさを反映します。さらにATRは平滑化されているため、帯幅の変化は滑らかで、短期的な凹凸に振り回されにくい性質があります。

単独使用時の弱点は、この滑らかさの裏返しです。反応が穏やかなぶん、ボラティリティが急に萎むような局面では帯の縮小が遅れて現れます。また帯は方向を示さないため、価格が帯のどこにいるかは分かっても、そこから何が起きるかは別の判定に委ねる必要があります。

なぜこの組み合わせか

2つの帯は、どちらもボラティリティを測っていながら、測り方が異なります。ボリンジャーバンドは統計的なばらつき、ケルトナーチャネルは実効的な値幅です。この測定尺度の違いこそが、組み合わせる意味の中心にあります。

反応特性を並べると差がはっきりします。標準偏差は直近の静けさを敏感に拾って素早く縮み、ATRは平滑化の影響でゆっくり縮みます。したがって値動きが本格的に凪いだ局面では、ボリンジャーバンドの縮小がケルトナーチャネルの縮小を追い越し、ボリンジャーバンドの上下端がケルトナーチャネルの内側へ完全に収まる状態が生まれます。この内包状態が、いわゆるスクイーズの判定材料です。

設計面での利点は、判定が2つの帯の相対関係で完結することにあります。帯幅そのものにしきい値を置く方式と違い、内包しているかどうかは価格の桁に依存しません。銘柄や時間足をまたいでも意味が保たれやすく、パラメータの移植性が高い形になります。一般論として、ばらつきの敏感さと値幅の安定性が互いを補完する関係にあると考えられます。

内包が解けて、ボリンジャーバンドの端がケルトナーチャネルの外へ出る瞬間は、圧縮の解放に相当します。静から動への遷移を、目視ではなく機械的に定義できるのがこの組み合わせの実用的な価値です。

ただしトレードオフは明確です。第一に、圧縮も解放も方向を教えてくれません。どちら側へ抜けるかは別の判定軸を用意する必要があります。第二に、解放直後に元へ戻る動きも珍しくなく、遷移の検出がそのまま優位性になるわけではありません。第三に、内包状態が長く続いたまま何も起きない期間も存在します。圧縮の検出とは切り離した損切りルールを別立てで用意しておくことが、この設計を成り立たせる条件になります。関連する考え方はボラティリティブレイクアウト戦略の基礎でも扱っています。

パラメータをどう考えるか

調整対象は、ボリンジャーバンドの期間と標準偏差倍率、ケルトナーチャネルのEMA期間・ATR期間・ATR係数の5つです。

出発点としては、ボリンジャーバンドが期間20・倍率2.0、ケルトナーチャネルが期間20・係数1.5という組み合わせが広く知られています。ただしこれは正解ではなく、あくまで比較の起点です。倍率と係数のどちらを動かしたときに検出頻度がどう変わるかを、狙う時間軸のバックテストで確かめてから採用する流れが前提になります。ボリンジャーバンドとATRの組み合わせで扱った幅の考え方も、係数を詰める際の参考になります。

cBot化する際の考慮点

実装上の特徴は、判定対象が瞬間のイベントではなく、継続する状態である点です。

// OnBar内: 確定足で2つの帯を計算し、内包(圧縮)状態とその遷移を判定する
var bb  = Indicators.BollingerBands(Bars.ClosePrices, bbPeriod, bbDeviations, MovingAverageType.Simple);
var ema = Indicators.ExponentialMovingAverage(Bars.ClosePrices, kcPeriod);
var atr = Indicators.AverageTrueRange(atrPeriod, MovingAverageType.Exponential);

double kcUpper = ema.Result.Last(1) + atr.Result.Last(1) * kcMultiplier;
double kcLower = ema.Result.Last(1) - atr.Result.Last(1) * kcMultiplier;
bool squeezeNow = bb.Top.Last(1) < kcUpper && bb.Bottom.Last(1) > kcLower;   // 内包=圧縮

double kcUpperPrev = ema.Result.Last(2) + atr.Result.Last(2) * kcMultiplier;
double kcLowerPrev = ema.Result.Last(2) - atr.Result.Last(2) * kcMultiplier;
bool squeezePrev = bb.Top.Last(2) < kcUpperPrev && bb.Bottom.Last(2) > kcLowerPrev;

bool released = squeezePrev && !squeezeNow;  // 圧縮から解放への遷移

このあとに、解放の向きを決める判定と、ロット設計・損切り幅の決め方を加えて細部を詰めていくことになります。

実装の流れ

処理は「帯の計算 → 内包判定 → 遷移検出 → 方向判定 → 行動」という一方向の流れに整理できます。

  1. 帯の計算: 確定足で標準偏差とATRをそれぞれ求め、上下端を算出する
  2. 内包判定: 上端・下端の両方が内側にあるかを確認し、圧縮状態を真偽値で持つ
  3. 遷移検出: 1本前の状態と比較し、開始・継続・解放のどれに当たるかを分類する
  4. 方向判定: 解放が検出された足で、直近レンジのどちら側を抜けたか、あるいは別のモメンタム指標がどちらを向いているかを確認する
  5. 行動決定と記録: 新規は解放かつ方向が定まった場合のみ候補とし、判定時の帯の値と分類結果をログに残す

帯の計算から内包判定・遷移検出・方向判定を経て行動決定に至る5段階の戦略フロー図。圧縮継続なら見送り、解放かつ方向が定まった場合のみ候補として扱う分岐を示している

方向判定を独立した工程として切り出しておくと、後から差し替えて比較しやすくなります。圧縮の検出部分は据え置いたまま、方向の決め方だけを入れ替えて挙動の違いを数え直せる構造は、検証を進めるうえで扱いやすい形です。圧縮が続いた本数も一緒に記録しておくと、どれくらいの長さの静けさを対象にするかを、感覚ではなく記録で決められるようになります。

どう活用するか

「性質の違う2つの尺度を重ね、相対関係で状態を定義する」という骨格は、この組み合わせに限らず応用が利きます。帯どうしの比較を、短期と長期のボラティリティ比較や、指標間の乖離の比較に置き換えても同じ設計パターンが成立します。ご自身で開発される場合は、本記事の内包判定と遷移検出の切り分けを、Claude Codeへ渡す仕様メモの出発点として使ってみてください。開発そのものを依頼したい場合は、ai-programming.xyzで要件のご相談を受け付けています。基礎から順に学びたい場合は、スクールで指標の合成と状態管理の実装を段階的に扱っています。

本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。