MFIとボリンジャーバンドの組み合わせ — バンド到達に資金の裏付けがあるかを分類する
価格がボリンジャーバンドの外側まで届いた場面は、チャート上ではどれも同じ形に見えます。しかし、その後の値動きは一様ではありません。バンドに沿って進み続けることもあれば、すぐにバンドの内側へ戻ることもあります。本記事では、この「同じ見た目の場面」を、MFI(マネーフローインデックス、出来高を加味したオシレーター)を使って2種類に分類する設計を整理します。対象は、バンド到達を条件に使う cBot を作ろうとしていて、条件の粗さが気になっている方です。なお、ここで扱うのは状態を分類するための考え方であり、特定の設定が成果につながることを示すものではありません。
ボリンジャーバンドの役割
ここでは、ボリンジャーバンドが何を測り、何を測っていないのかを確認します。
ボリンジャーバンドは、移動平均線を中心に、標準偏差(値のばらつきの大きさ)の一定倍の幅を上下に描いた指標です。価格が直近の平均からどれだけ離れているかを、その時点のばらつきを基準にして示します。バンド幅が狭まれば値動きが落ち着いている状態、広がれば値動きが大きくなっている状態と読めます。
単独で使うと、価格の相対的な位置とボラティリティ(値動きの大きさ)の変化が1枚で把握できます。一方で限界もはっきりしています。バンド到達は「平均から統計的に遠い位置にいる」という事実を示すだけで、そこから戻るのか進むのかは教えてくれません。レンジ相場では到達後に内側へ戻る場面が目立ちますが、トレンド相場ではバンドに沿って価格が進み続けるバンドウォークが起こります。同じ到達を逆張りの材料として一律に扱うと、後者の局面で判定が噛み合わなくなります。
MFI の役割
次に、分類役を担う MFI の性質を見ていきます。
MFI は、高値・安値・終値の平均である典型価格に出来高を掛けた値を、前の足より上がった足と下がった足に振り分け、その比率を 0〜100 で表す指標です。資金がどちら向きに厚く動いているかを1本の線にしたもの、と捉えると扱いやすくなります。高い水準は買い側への偏り、低い水準は売り側への偏りを意味し、80 付近と 20 付近が目安として使われることが多い指標です。
単独利用時の限界は2つあります。1つ目はデータの質です。FX や CFD では取引所の実出来高が得られないため、cTrader ではティックボリューム(価格更新の回数)で代用します。これは実出来高の近似にすぎず、ブローカーや時間帯によって性質が変わります。2つ目は、MFI だけでは価格の位置が分からないことです。資金の偏りが大きいと分かっても、それが平均から遠い場所で起きているのか、平均付近で起きているのかは別の物差しが必要になります。価格のみを素材にする RSI との違いは、MFIとRSIの組み合わせで整理しています。
なぜこの組み合わせか
2つの指標の接点は、バンド到達という事象に「参加の厚み」という属性を付け足せることにあります。
ボリンジャーバンドは価格の位置を、MFI は出来高を含んだ資金の偏りを見ています。そこで、バンド到達が起きた確定足で MFI の水準を参照すると、場面を次の2つに分けられます。
- 裏付けを伴う到達: 上側バンド到達と同時に MFI も高い水準にある状態です。値幅の拡大に出来高側の偏りが付いてきているため、バンドウォークに移行する可能性を考慮に入れる場面と整理できます。
- 裏付けの薄い到達: 上側バンドには届いたものの、MFI が中間的な水準にとどまっている状態です。値幅だけが先行しており、参加の厚みが相対的に伴っていない場面と整理できます。
下側バンドについても、MFI の低い水準を使って同じ分類ができます。重要なのは、これが「どちらが良い」という評価ではなく、状態のラベル付けだという点です。逆張り型のロジックなら前者を見送り対象に、順張り型のロジックなら後者を見送り対象にする、というように、ロジックの性格に合わせてラベルの使い道を決められます。ボリンジャーバンドが持つ「戻るか進むか分からない」という弱点に対して、MFI が判断材料を1つ加える補完関係です。
ただし、留保も必要です。MFI は計算に価格の上下を使っているため、価格が強く動けば MFI も同じ方向に振れやすく、両者は完全に独立した情報ではありません。多くの到達では2つの指標が同じ側を指すので、情報量が大きいのはむしろ食い違った場面です。加えて、ティックボリュームの質が悪い時間帯は MFI が実態以上に振れる場合があります。分類結果はあくまで材料の1つとして扱い、過信しない設計が前提になります。価格のみで過熱感を重ねる構成はRSIとボリンジャーバンドの組み合わせで扱っていますので、出来高を含める意味を比べる際の参考にしてください。
パラメータをどう考えるか
調整対象は、バンドの期間と倍率、MFI の期間、そして分類に使うしきい値の4点です。
ボリンジャーバンドは期間20・倍率2が標準的な出発点として知られています。倍率を上げれば到達の発生は少なくなり、下げれば多くなります。期間を短くすると短期向けの挙動に、長くすると長期向けの挙動に寄ります。MFI は期間14が広く使われる初期値で、同じく短くするほど反応が速くなります。
この組み合わせで考えどころになるのは、2つの期間の関係です。バンドより MFI を短くすると「到達した瞬間の資金の偏り」を、同程度にそろえると「同じ時間幅で見た位置と偏り」を比べることになります。どちらが正解ということはなく、分類に何を語らせたいかで決まります。
MFI のしきい値も固定値にこだわる必要はありません。銘柄や時間足によって線の振れ幅が違うため、直近の一定本数の中で相対的に高いかどうかを判定する方法も選択肢になります。いずれにしても、数値はバックテストで検証し、最適化に使った期間とは別の期間でも挙動が大きく崩れないかを確かめる手順が欠かせません。
cBot化する際の考慮点
実装上の論点を、設計メモとして順に挙げます。
データの取り方: バンド到達も MFI も、形成中の足では値が動き続けます。ティックごとに評価すると同じ足の中で分類が入れ替わるため、OnBar で確定足の値だけを参照する構成が出発点になります。
計算順序: 先にバンドの上下限と終値からバンド内の相対位置を求め、到達が起きた足に限って MFI を参照します。到達していない足では分類そのものが発生しないため、処理を早めに打ち切れます。
エッジケース: 起動直後は履歴不足で指標値が NaN になる場合があります。また、値動きがほぼ止まった局面ではバンド幅がゼロに近づくため、相対位置の計算で割り算を行う前に幅を確認します。週明けの最初の数本や流動性の薄い時間帯は、ティックボリュームが極端に偏りやすいので、分類の対象外とする時間フィルターも検討に値します。
ポジション管理との連携: 分類ラベルは入口の判断材料であり、決済の根拠には向きません。損切り幅は ATR などボラティリティ基準で別に設計し、役割を分けておくと扱いやすくなります。
// 抜粋: バンド到達の検出と MFI による分類
private BollingerBands _bb;
private MoneyFlowIndex _mfi;
protected override void OnStart()
{
_bb = Indicators.BollingerBands(Bars.ClosePrices, 20, 2.0, MovingAverageType.Simple);
_mfi = Indicators.MoneyFlowIndex(14);
}
protected override void OnBar()
{
double close = Bars.ClosePrices.Last(1);
double top = _bb.Top.Last(1);
double bottom = _bb.Bottom.Last(1);
double mfi = _mfi.Result.Last(1);
if (double.IsNaN(top) || double.IsNaN(bottom) || double.IsNaN(mfi)) return;
double width = top - bottom;
if (width <= 0) return; // バンド幅ゼロの保護
double position = (close - bottom) / width; // バンド内の相対位置
if (position < 1.0) return; // 上側到達のみを例示
bool flowBacked = mfi >= MfiUpperLevel; // しきい値は銘柄ごとに検証
// flowBacked が true なら「裏付けを伴う到達」、false なら「裏付けの薄い到達」
}
計算負荷はどちらの指標も軽く、複数銘柄に展開しても問題になりにくい構成です。
実装の流れ
全体は、入力から出力まで一方向に流れる4段階で整理できます。
- 入力: 確定足の価格とティックボリュームを取得します。
- 到達判定: バンド内の相対位置を計算し、上側または下側への到達があった足だけを次へ進めます。
- 分類: 到達した足の MFI を参照し、裏付けを伴う到達か、裏付けの薄い到達かのラベルを付けます。
- 出力: ラベルをログと通知に書き出し、ロジックの性格に応じて候補として扱うか見送るかを決めます。
到達判定と分類を別の関数に分けておくと、後から分類役を他の指標に差し替える場合も修正範囲が閉じます。また、最初から発注まで自動化するのではなく、ラベルを記録するだけの構成で一定期間動かし、2種類の到達がその後どう推移したかをログで見比べる段階を挟むと、分類が自分の対象銘柄で意味を持つのかを落ち着いて確認できます。
どう活用するか
自分で cBot を作る方は、本記事の4段階をそのまま Claude Code への指示の骨格として使ってみてください。「事象を検出してから属性で分類する」という型は、バンド到達以外のブレイク判定などにも応用できます。
開発を委託したい方は、ai-programming.xyz への相談時に、分類ラベルをどちらの用途で使うのか、しきい値を固定にするか相対判定にするかを先に決めておくと、要件の整理が進めやすくなります。
体系的に学びたい方には、スクールで指標の組み合わせ方から検証の進め方までを、実際の開発手順に沿って学ぶ道もあります。相場の局面そのものの見分け方は、トレンドとレンジの基礎もあわせてご覧ください。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。