MACDとボリンジャーバンドを組み合わせる — トレンドとボラティリティの両面から読む設計
MACD(移動平均収束拡散法)とボリンジャーバンドは、観察している対象が大きく異なる指標です。MACDは2本の指数移動平均の差から 方向と勢いの転換 を捉えようとし、ボリンジャーバンドは標準偏差の広がりから ボラティリティの状態 を可視化します。トレンド系・モメンタム系・ボラティリティ系という分類でみると、片方が「勢い」を、もう片方が「広がり」を担当するイメージです。
本記事では、MACDとボリンジャーバンドを併用する考え方と、cBotとして実装する際に意識したい設計上の注意点を整理します。あくまで「設計の参考」としての位置づけであり、特定のロジックや数値が成果を保証するという話ではありません。
MACDの役割
MACDは、短期EMAと長期EMAの差を「MACDライン」として描き、そのMACDラインのEMAを「シグナルライン」として描く2本立てのインジケーターです。両者の差分は「ヒストグラム」として棒グラフで描かれ、cTraderにも標準搭載されています。
単独利用での代表的な観察は次のとおりです。
- MACDラインとシグナルラインのクロス: 上抜けは方向転換の検知材料、下抜けは逆方向の検知材料
- 0ラインとの位置関係: 0より上は短期EMAが長期EMAを上回っている状態、下はその逆
- ヒストグラムの伸縮: 棒の伸び縮みでモメンタムの増減を観察
ただし、MACDは2本の移動平均から派生する指標であるため 遅行性 を持ちます。クロスが発生したときには既に値動きがある程度進行している場合があり、特に値動きの小さいレンジ相場ではダマシのクロスが頻発しやすい性質があります。「方向と勢いを示す」のに対して「いまの値動きの広がり方が異常か通常か」については情報を持っていない、という点が単独使用時の限界として残ります。
ボリンジャーバンドの役割
ボリンジャーバンドは、移動平均線(ミドルライン)と、その線から標準偏差の N倍を上下に伸ばした2本のラインで構成される指標です。一般的な設定は期間20・標準偏差±2σで、価格分布の大半がそのレンジに収まるという統計的な性質を背景にしています。基礎的な仕様は別記事のボリンジャーバンドとはにまとめていますので、必要に応じて参照してください。
単独利用での代表的な観察ポイントは次のとおりです。
- バンド幅の伸縮: 収縮(スクイーズ)はボラティリティ低下、拡張はボラティリティ上昇の目安
- 価格とバンドの位置関係: ミドルラインの上下どちらに張り付いているかで偏りを観察
- バンドウォーク: 強いトレンド時に上下どちらかのバンドに沿って価格が走り続ける現象
ボリンジャーバンドの単独使用での限界は、「バンドにタッチしたから反転」と単純に読みにくい点です。バンドウォーク中は逆張り発想が機能しにくくなりますし、スクイーズ中はバンドを基準にしたシグナルの判定材料が薄くなります。ボリンジャーバンドは「価格の広がり方」の情報は豊富に持つものの、「方向と勢いの転換」を直接示す指標ではない、という整理ができます。
なぜこの組み合わせか
MACDが答えるのは「方向と勢いがいま転換に向かっているか」であり、ボリンジャーバンドが答えるのは「価格分布がいまどのくらい広がっているか」です。両者は観察する対象がそもそも違うため、組み合わせると情報量が掛け合わさるイメージで増えます。
考え方の例を挙げます。
- MACDが上抜けクロス + バンドが収縮から拡張へ転じている → 方向転換とボラティリティ拡大が同時に検知された材料
- MACDが上抜けクロス + バンドが収縮したまま → 方向は出始めたが、まだ広がりを伴っていない可能性を示す材料
- MACDが0ラインを上回って継続 + 価格がアッパーバンド寄りで推移 → 上方向のトレンド継続が複数の角度から確認できる材料
- MACDが0ライン付近で揺れる + バンド幅が狭い → 方向感もボラティリティも乏しいレンジ局面の目安
このように、MACDだけでは「同じクロス」に見える局面を、ボリンジャーバンドの状態で粒度を分解できる点に意義があります。一般論として、シグナル整合性をフィルターするためのノイズ除去レイヤーとして機能することが期待できます。
注意点として、両者ともに 遅行性 を持つ指標です。リアルタイムで天井・底を当てるためのものではなく、「いまどちら向きの偏り・勢いが続いているか」「いまボラティリティが広がっているか縮んでいるか」を観察する材料として扱うほうが実用的です。組み合わせれば即座に判断精度が上がる、という性質のものではありません。また、両者ともパラメータの取り方で挙動が大きく変わるため、組み合わせの設計とパラメータの設計はセットで考えるのが基本になります。
パラメータをどう考えるか
唯一の正解があるわけではなく、検証して自分の運用時間軸に合うものを選ぶ前提で、方向性だけ整理します。
MACDの期間 は短期EMA12・長期EMA26・シグナルEMA9が標準として広く使われています。短期側を縮めれば反応は早くなりますがダマシも増え、長期側を伸ばせばクロスが発生しにくくなる代わりにシグナルの安定感が増します。スキャル寄りなら(8, 17, 9)前後、スイング寄りなら(12, 26, 9)〜(19, 39, 9)前後といった調整が検討されます。
ボリンジャーバンドの期間と倍率 は、ミドルラインの期間20・倍率±2σが標準です。期間を短くすると直近の値動きに敏感になり、倍率を大きくするとバンド到達の頻度が下がります。MACDの長期EMAとボリンジャーバンドの期間を 同じスケール感 で揃えると、両指標の時間軸がズレて挙動が読みにくくなる事態を避けやすくなります。
時間足の組み合わせも設計要素です。上位足のMACDで大局のモメンタム方向を判定し、下位足のボリンジャーバンドでボラティリティ環境を観察する マルチタイムフレーム 構成にすると、方向判定の安定性と環境判定の機動性を両立しやすくなります。いずれの場合も、過去データでバックテストして自分の運用環境での挙動を確認するプロセスを省略しないことが重要です。
cBot化する際の考慮点
cTraderのcBotとして実装する場合、設計面でいくつか押さえておきたいポイントがあります。
データ取得タイミング: OnBar(確定足)で判定するのか、OnTickで判定するのかを最初に決めます。MACDのクロスもバンド幅の判定も、未確定バーでは値が動き続けるため、確定足ベースで判定する設計が安定しやすくなります。
計算順序の依存関係: cTrader API では Indicators.MacdHistogram や Indicators.MacdCrossOver でMACDを取得でき、Indicators.BollingerBands でボリンジャーバンドを取得できます。両者は独立して計算できるため依存はありませんが、起動直後はバー数が不足してNaNが返る場合があります。判定ロジックを走らせる前にnull/NaNチェックを入れる設計が安全です。
バンド幅の状態化: ボリンジャーバンドを判定材料に使う際は、Top - Bottom で算出したバンド幅をそのまま閾値判定に使うのではなく、直近 N 本の中央値や、ATRなどとの比率に正規化して扱うほうが安定します。銘柄や時間足によって絶対値のスケールが大きく異なるためです。
クロス判定のヒステリシス: MACDのクロスは1本前と現在を比較する形で実装するのが一般的です。ノイズの大きい時間足では同じバーで上下に振れることがあり、フラグ管理が必要になります。直前のクロス方向を状態変数として持ち、反対方向のクロスが来るまでは新たなクロスを発火させない設計が使われます。
簡単な疑似コード断片を挙げます。
// 例: MACDクロスとバンド状態を組み合わせて整合性を判定する
var macd = Indicators.MacdCrossOver(Bars.ClosePrices, 26, 12, 9);
var bb = Indicators.BollingerBands(Bars.ClosePrices, 20, 2,
MovingAverageType.Simple);
double macdLine = macd.MACD.LastValue;
double signalLine = macd.Signal.LastValue;
double bandWidth = bb.Top.LastValue - bb.Bottom.LastValue;
double mid = bb.Main.LastValue;
if (double.IsNaN(macdLine) || double.IsNaN(bandWidth)) return;
bool macdBullish = macdLine > signalLine;
bool widening = bandWidth > _recentBandWidthMedian;
bool aboveMid = Bars.ClosePrices.LastValue > mid;
// 各フラグを組み合わせて環境ラベルを決定する
実装初期は、MACDライン・シグナルライン・バンド幅・ミドルラインからの乖離などを毎バーログ出力しておくと、後からチャート上の動きと突き合わせて検証しやすくなります。
実装の流れ
ロジックをcBotに落とし込むときの全体像を、入力 → 計算 → 判定 → 出力の流れで整理します。
- 入力: 監視する銘柄・時間足を決め、
Barsから終値の系列を取得する - 計算: MACD(短期EMA・長期EMA・シグナルEMA)とボリンジャーバンド(期間20・±2σ)を別々に計算し、最新値・1本前の値・バンド幅などを取得する
- 判定:
- MACD状態: 上抜けクロス / 下抜けクロス / 継続 / クロスなし
- バンド状態: 拡張中 / 収縮中 / 中庸
- 価格位置: アッパー寄り / ミドル付近 / ロワー寄り
- 3つの組み合わせから、環境ラベルを決定
- 出力: 環境ラベル(BULL_EXPANDING / BEAR_EXPANDING / SQUEEZE / MIXED など)を、ログまたは外部ダッシュボードに送る
この設計はエントリーシグナルそのものではなく、環境認識レイヤー として実装すると応用が利きます。トレンドフォロー系・逆張り系の別ロジックを上に乗せ、環境ラベルを前提条件として参照する構造にしておくと、後から戦略を差し替えやすくなります。
どう活用するか
この設計図は、目的別に活用できます。
自作派の方は、Claude Code を使った cBot 開発時の環境認識モジュールの設計書として、本記事の節構造をそのまま流用してみてください。委託派の方は、ai-programming.xyz への開発相談時に「MACDとボリンジャーバンドを併用して環境ラベルを出したい」という前提を共有しておくと、要件詰めがスムーズになります。教育派の方は、スクールでの実践課題のテーマとして、本記事の環境認識ロジックを自分の手で実装してみる演習に使えます。
MACDとボリンジャーバンドの組み合わせは、「測っている対象が違う指標を重ねると情報量が掛け合わさる」という設計思想を学ぶ題材としても有用です。ここで身につけた環境認識の考え方は、より複雑な組み合わせ(MACD + ボリンジャーバンド + ATR など)へ拡張するときの土台になります。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。