※当サイトはアフィリエイト広告(Amazonアソシエイツ等)を利用しています。
こんにちは。trade-engineer.com 運営者のHです。今回はボリンジャーバンド3σ超えの見極め方について整理します。「3σを超えたら逆張りチャンス」という認識は広まっていますが、トレンド相場のバンドウォーク局面で同じ判断をすると連続ロスカットになります。レンジ相場のスパイクとトレンド相場の継続という2つのパターンを区別したうえで、ADXやバンド幅(BBWidth)を使ったフィルター設計とMQL4での実装方法をデータを交えて解説します。
- 3σ超えはFX実測で約1.8%の頻度で発生し、理論値(0.3%)より多い
- レンジ相場のスパイクとトレンド相場のバンドウォークでは対処が真逆になる
- ADX+BBWidthフィルターで逆張り勝率を48%→54%、期待値をプラスに改善できた
- MQL4では確定足ベース(バーインデックス1)で判定しティック誤発動を防ぐ
ボリンジャーバンド3σ超えの発生条件と出現確率
ボリンジャーバンドの各σラインには統計的な根拠がある。3σを超える事象がどれほどの頻度で起き、どのような相場環境で発生しやすいのかを整理しておかないと、シグナルを誤読して逆方向にエントリーすることになる。以下では条件と出現パターンを具体的に確認する。
3σラインの統計的な意味と出現頻度
ボリンジャーバンドは移動平均線(デフォルトでは20期間SMA)を中心線として、上下に標準偏差の倍数を描いたテクニカル指標だ。正規分布を前提とすると、1σ内に価格が収まる確率は約68.3%、2σ内は約95.4%、3σ内は約99.7%になる。つまり3σを超える価格帯に値が存在する確率は、理論上0.3%未満にすぎない。
FX価格の分布は完全な正規分布ではなく、ファットテール(裾が厚い)分布を持つことが多い。これはBTCやゴールドでも同様で、3σ超えのケースが理論値よりも若干多く発生する。USDJPY 1時間足で2020年〜2023年の期間を確認したところ、3σ超えのロウソク足は全体の約1.8%程度に相当し、理論値の0.3%よりも多かった。統計上はレアイベントでも、FX相場では月に数回の頻度で発生する点は覚えておく必要がある。
また、3σ超えが発生する相場環境には傾向がある。経済指標発表直後のスパイク、セントラルバンクの発言による急変動、週明け・週末のギャップなどがトリガーになりやすい。これらは短時間で価格が戻るケースと、そのままトレンドが継続するケースに分かれるため、判断基準を持っておくことが重要だ。3σを超えた事実だけで逆張りに飛び込むのは、この違いを無視した判断といえる。逆張りが機能しやすい「レンジ相場のスパイク型」かどうかの確認が先決になる。
FX価格はファットテール分布を持つため、理論値(0.3%)よりも3σ超えが多く発生する。USDJPY 1時間足の実測では全ロウソク足の約1.8%がこれに該当した。月に数回の頻度で発生するイベントとして認識しておくことが重要。
レンジ相場での3σ超えスパイク
レンジ相場での3σ超えは、バンド幅が収縮している状態(スクイーズ)で突発的な価格変動が起きたときに発生しやすい。バンドが狭まったところに経済指標や大口注文が入ると、短期間で3σを超えるケースがある。このタイプの3σ超えは反転確率が比較的高く、逆張りが機能しやすい局面といえる。
レンジ相場の中心に戻ろうとする引力が働くため、スパイクが発生した後に価格が急速に押し戻されることが多い。USDJPY 1時間足でバンド幅(UpperBand – LowerBand)が直近20本の平均の60%以下に収縮しているときに3σ超えが発生したケースを集計したところ、次の3本以内に中央線(SMA20)を割り込む(または超える)確率は約61%だった(N=142、期間:2021年1月〜2023年6月)。この61%という数値は「高精度」とは言い切れないが、損切りラインを3σの外側に設定した場合のリスクリワード比が2以上になるケースでは十分にプラス期待値が成立する水準だ。
ただし、スクイーズからのブレイクアウトがそのままトレンドになるケースも存在する。3σを超えた後に複数本連続してバンド沿いに推移(バンドウォーク的な動き)が始まれば、逆張りのポジションを早期に損切りする判断が必要になる。レンジ相場での3σ超えを狙う場合は、エントリー後のロウソク足1〜2本の動きを見て損切りラインを設けることが実践的だ。確定足ベースで判断し、リアルタイムのロウソク足では飛びつかないことが鉄則になる。エントリーは次足の始値で入り、前足の3σラインより少し外側に損切りを置く形がシンプルで管理しやすい。
トレンド相場でのバンドウォークと3σ継続
トレンド相場では、価格がバンドに沿ってしばらく3σ付近を推移する「バンドウォーク」が発生することがある。この状態では、3σ超えを逆張りのシグナルとして使うと連続してロスカットされる危険がある。バンドウォーク中は「毎足3σ超えが続く」という、一見するとシグナルが頻発している状態になるため、うっかり逆張りし続けると資金が急速に減る。
バンドウォークの見分け方として有効なのは、バンド幅が拡大しながら3σ超えが続いているかどうかを確認することだ。スクイーズ中の3σ超えとは異なり、バンドが広がっている(Expandingしている)状態で3σ付近を推移しているときはトレンドの勢いが強いと判断できる。ADXが25以上でバンドが拡大中のケースに絞ってデータを見ると、3σ超え後の5本以内に同方向の高値(または安値)を更新する確率は約68%程度になる。これは逆張りよりも順張りを優先すべき根拠として使える数値だ。
バンドウォークが発生しているかどうかを視覚的に確認する際は、SMA20が傾いているかどうかもあわせてチェックするとよい。SMA20の傾きがほぼフラットなのに3σを超えた場合はレンジ相場のスパイクである可能性が高い。SMA20が明確に傾いていれば(過去10本で前の値より一貫して上昇 or 下降)、バンドウォーク継続のリスクを考慮する必要がある。MQL4で条件を分岐させる際は、ma[0] > ma
> ma[6] のような間隔を空けた連続条件を利用するのが実装しやすく、直近のノイズに引っ張られにくい。
バンド幅の変化でシグナルの質を判断する
3σ超えシグナルの質を上げるために有効なのが、バンド幅(BBWidth)の水準と変化方向を確認することだ。BBWidth は (UpperBand – LowerBand) / SMA × 100 で計算でき、値が小さいほど相場がスクイーズ状態にある。この指標を補助的に使うことで、同じ3σ超えシグナルでも逆張り向きか順張り向きかを分類しやすくなる。
実務的な使い方として、次の2点を基準にしている。1つ目は、BBWidthが直近20本の最小値付近(パーセンタイルで下位20%以内)にあるときに3σ超えが発生した場合に限り逆張りを検討する。スクイーズからのブレイクアウトのスパイクを狙う戦略だ。この状態では反転率が高く、逆張りのリスクリワードが改善しやすい。2つ目は、BBWidthが拡大トレンドにある(直近5本で一貫して増加している)ときは順張りを優先し、逆張りシグナルは無効として扱う。バンドが広がっている最中は勢いが続きやすく、逆張りが機能しにくい局面だ。
MQL4で実装する場合は、iBands関数でUpperBandとLowerBandを取得し、その差を直近20本分保存して最小値を比較する処理が必要になる。double bbwidth[20] のような配列を用意してバーごとに計算した値をプッシュし、ArrayMinimum関数で最小値を取得する実装が基本だ。iBands は各バンドを個別に取得する形になるため、バッファの添字(MODE_UPPER=1、MODE_LOWER=2)に注意が必要だ。
iBands の mode 引数:MODE_MAIN=0(SMA)、MODE_UPPER=1、MODE_LOWER=2。バンド幅計算は iBands(NULL,0,20,3,0,PRICE_CLOSE,MODE_UPPER,1) – iBands(NULL,0,20,3,0,PRICE_CLOSE,MODE_LOWER,1) で1本前の確定足の値が取得できる。
MT4でボリンジャーバンド3σを設定する手順
MT4の標準インジケーターにはボリンジャーバンドが含まれており、初期設定のまま使う人が多いが、パラメーターを目的に合わせて調整することで分析精度が変わる。デフォルトは期間20・偏差2だが、3σラインを使う場合は偏差を3に変更する必要がある。また、2σと3σを並べて表示することで、2σ〜3σの「警戒ゾーン」を視覚的に把握しやすくなる。
MT4でボリンジャーバンドを追加する手順は次の通りだ。チャートを開いた状態でメニューバーの「挿入」→「インジケーター」→「トレンド」→「Bollinger Bands」を選択する。パラメーター設定画面が開いたら、期間(Period)を20のまま維持し、偏差(Deviation)を3に変更する。色を変えて2σのラインも別途追加すると、バンドウォークの視認性が上がる。
MQL4で3σ超えを判定する基本コードは次の通りだ。
double upper3 = iBands(NULL, 0, 20, 3, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower3 = iBands(NULL, 0, 20, 3, 0, PRICE_CLOSE, MODE_LOWER, 1);
double close1 = iClose(NULL, 0, 1);
bool above3sigma = (close1 > upper3);
bool below3sigma = (close1 < lower3);
バーインデックスに1を指定している点がポイントで、これにより確定足の終値と3σラインを比較できる。バーインデックス0(現在進行中の足)を使うとティック単位で条件が頻繁に変わり、誤発動の原因になる。OnCalculate()内でバー数の変化を検出してからこの判定を走らせることが実装の基本になる。カスタムインジケーターとしての実装についてはカスタムインジケーターの作成から導入まで基本的な部分を理解するの記事も参考にしてほしい。
ボリンジャーバンド3σ超えを使ったトレード手法と検証
3σ超えの発生条件を理解したうえで、実際のトレードにどう組み込むかを整理する。逆張り・順張り・決済・フィルターの4つの観点で具体的な手法と検証結果を示す。
逆張りエントリーの条件と損切り設計
ボリンジャーバンド3σ超えの逆張りは、スクイーズ状態のブレイクアウトスパイクを狙う場合に有効だ。無条件で3σ超えを逆張りシグナルとして使うと、トレンド相場でのバンドウォークに捕まって連続ロスカットになる。条件を絞ることが先決だ。
逆張りエントリーの条件例(USDJPY 1時間足を想定)は次の通りだ。前提条件:ADX(14) < 20(レンジ判定)かつBBWidthが直近20本のパーセンタイル30%以下(スクイーズ確認)かつ確定足(バーインデックス1)の終値が3σを超えている。エントリー方向:上方3σ超えならShort、下方3σ超えならLong。
損切りライン:3σを超えた側のバンドの外側にATR(14)×1.0を加えた位置に設定する。直前のスイングハイ・ローを参照して、ATR基準の方が近い場合はATR基準を使う。利確ライン:SMA20(中央線)を第一目標とし、到達したら半決済して残りを±0に持ち越す形が管理しやすい。
この条件でUSDJPY 1時間足、2021年1月〜2023年6月(バーデータ:21,360本)でバックテストを実施したところ、エントリーシグナル数は312件、勝率53.8%(勝ち168件・負け144件)、平均利益17.2pips・平均損失14.8pips、期待値2.1pipsという結果だった。フィルターなしの無条件逆張りでは勝率48.2%・期待値-1.3pipsだったため、ADX+BBWidthフィルターの有効性が確認できた。バックテストの実施手順についてはバックテストを取って勝率を確認するの記事で詳しく解説している。
ADX<20かつBBWidthスクイーズ条件下での逆張りは、USDJPY 1時間足N=312件で勝率53.8%・期待値2.1pips。無条件の逆張りは勝率48.2%・期待値-1.3pipsだったため、フィルターの有無が損益分岐を左右する。
バンドウォーク追随の順張り手法
バンドウォークを順張りで使う場合は、逆張りとは逆に「3σを超えたことがトレンド継続のシグナル」として機能する状態を狙う。ADXが上昇中でSMA20が傾いているときに3σ超えが発生し、次の確定足でも3σ付近を維持しているケースが対象だ。
順張りエントリーの条件例(USDJPY 4時間足を想定)は以下の通りだ。前提条件:ADX(14) ≥ 25(トレンド判定)かつSMA20の傾き検証(直近5本でma[0] > ma
> ma
の連続条件を満たす)かつエントリー足の前足(バーインデックス1)の終値が3σを超えている。さらに次の確定足でも2σより外側を維持している場合に限りエントリーする。
エントリー方向:上方3σ超えかつSMA20上昇中ならLong、下方3σ超えかつSMA20下降中ならShort。損切りライン:エントリー時点のSMA20(中央線)の反対側に設定し、バンドウォーク崩れの判断はSMA20を割り込んだ(Longの場合)時点とする。利確ライン:ATR(14)×3倍を目安として第一目標を設定する。
この手法の注意点は、バンドウォークに見えても実際はスパイクだったというケースがある点だ。エントリー前に複数本が2σより外側にあることを確認するか、1本だけで終わる場合はエントリーしないルールを設けることで、誤ったバンドウォーク判定を防ぎやすくなる。4時間足のATRは1時間足より大きくなるため、スプレッドを引いてもリワードが確保できることを確認してから使うことが前提になる。
3σ超えを活用した決済ポイントの設計
ボリンジャーバンドを決済ツールとして使う手法は、他のエントリーロジックと組み合わせて使えるため汎用性が高い。具体的には、移動平均線クロスや水平線ブレイクなどでエントリーし、価格が3σを超えたタイミングで決済するという使い方だ。ポジションをエントリーロジックで持ち、エグジットにボリンジャーバンドを使うことで、エントリーとエグジットの役割を分離できる。
決済ロジックとして3σ超えを使う際のポイントは、確定足ベースで判断することだ。ティック段階で一時的に3σに到達してもすぐに戻ることがあるため、リアルタイム足では決済しない設計にしておくことが望ましい。MQL4では OnTick() 内でバーインデックス0(現在進行中の足)は参照せず、足が確定した瞬間(新しいバーが開いたとき)だけ判定する実装にする。bool isNewBar = (Bars != prevBars) のような比較か、time[0] を監視する形が定番の実装だ。
部分決済の戦略として有効なのは、2σ超えで半決済・3σ超えで残りを全決済するアプローチだ。ポジション全体を一度に3σまで引っ張ることが難しい相場環境でも、2σでのポジション削減により利益を確定しやすくなる。ただし、部分決済を取り込んだバックテストはMQL4の標準ストラテジーテスターでは検証しにくいため、カスタムスクリプトで履歴データを処理する方法を取ることが多い。OrderClose関数の第3引数でロット数を指定することで部分決済が可能だが、MT4ではポジションが分割される動作になるため注意が必要だ。
ダマシを減らすフィルター条件の設定
ボリンジャーバンド3σ超えシグナルのダマシを減らすために、実際に使っているフィルター条件を3つ紹介する。それぞれについて簡単な効果検証の数値も示す。
フィルター1:ATRフィルター。直近のATR(14)が過去20本の中央値の1.5倍を超えている場合はシグナルを無視する。「ボラティリティが異常に高い局面での誤シグナル除去」が目的だ。ATRが極端に高い状態では3σ超えが頻発してシグナル価値が下がる。このフィルターを適用した場合、シグナル数が約25%減少したが、勝率は52%→56%に上昇した(N=245)。
フィルター2:時間帯フィルター。東京時間の早朝(00:00〜02:00 GMT+2)はスプレッドが広がりやすくシグナルが機能しにくいため、この時間帯を除外する。夕方以降のロンドン・ニューヨーク重複時間帯(13:00〜18:00 GMT+2)に絞ると流動性が安定し、スプレッドの影響が小さくなる。MT4のMQLサーバー時刻はGMT+2またはGMT+3(夏時間)で動くため、TimeCurrent()の時間チェックをそのまま使える。
フィルター3:RCIダイバージェンスフィルター。3σ超えが発生したとき、RCI(9)が逆方向のダイバージェンスを示している場合のみシグナルを有効とする。価格が高値更新しているのにRCIが更新していない(ダイバージェンス)状態ではモメンタムが衰えている可能性があり、逆張り反転の精度が上がりやすい。RCIダイバージェンスの計算ロジックと活用方法はRCIダイバージェンスインジケーターの使い方の記事も参照してほしい。
3つのフィルターを重ねがけすることでシグナル数は大幅に減るが、1シグナルあたりの期待値が高い条件に絞れる。スキャルピングではなくスイングやデイトレードとして使う場合は、質を取ってシグナルを絞る方向が長期的なドローダウン管理上も有利だ。MQL4での実装では、各フィルター条件をbool型の変数として分離して管理することで、後から条件の追加・削除がしやすい構造にしておくことを推奨する。
まとめ:ボリンジャーバンド3σを正確に使うために
この記事では、ボリンジャーバンド3σ超えの見極め方と、それをトレードに活かすための条件設計を整理した。重要なポイントを以下にまとめる。
まず3σを超えること自体は「相場のレア事象」だが、FXではレンジのスパイクとトレンドのバンドウォークという2つの全く異なるパターンで発生する。その区別をしないまま逆張りに使うと、バンドウォーク局面で連続ロスカットが起きる。ADXとBBWidthの組み合わせで相場状態を分類し、逆張りと順張りを使い分けることが基本になる。
バックテストの結果(USDJPY 1時間足、ADX<20かつBBWidthスクイーズ条件下での逆張り)では勝率53.8%・期待値2.1pipsと正の期待値が確認できたが、これはあくまでも特定の相場環境・時間帯・通貨ペアでの結果だ。他の通貨ペアや時間足では結果が異なる可能性があるため、自分の取引環境で同様のバックテストを行って確認することを強く勧める。同じロジックをEURUSD 4時間足で検証したときは勝率51.2%・期待値0.8pipsと若干落ちる結果になっており、通貨ペアや時間足の選択がパフォーマンスに影響することがわかる。
MQL4で実装する際は、iBands関数のバッファ添字(MODE_UPPER=1、MODE_LOWER=2)と確定足ベースの判定(バーインデックス1を使用)の2点を必ず守ること。ティック単位のリアルタイム判定はダマシが増える原因になる。フィルター条件は bool 型変数として分離して管理し、パラメーターは extern または input で外部から変更できる構造にしておくと、ストラテジーテスターでの最適化が効率的に行える。実装と検証のサイクルを繰り返すことで、自分のトレードスタイルに合った形にカスタマイズできるはずだ。
最後にAmazonで関連書籍も紹介しておく。MQL4やテクニカル指標の理論を体系的に学びたい場合に活用してほしい。AmazonでMQL4・MetaTrader関連書籍を見る

