平均足とボリンジャーバンドを組み合わせる考え方 — バンドウォークの継続と終わりを読み分ける設計

ボリンジャーバンドは、移動平均を中心に標準偏差の幅で上下のバンドを描き、価格が平均からどれだけ離れているかを示す指標です。平均足(Heikin Ashi)は、4本値を前の足の値と平均して描き直した合成足で、流れの向きを滑らかに見せます。

ボリンジャーバンドでつまずきやすいのが「バンドウォーク」の扱いです。価格が上側のバンドに沿って進み続ける状態で、バンドへの接触を「行き過ぎ」と読むと、流れに逆らう判断を重ねやすくなります。一方で、バンドウォークがいつ終わったのかは、バンドだけでは判別しにくい面があります。本記事では、平均足の色と足の形を「バンドウォークが続いているか、崩れ始めたか」を読む材料に割り当てる設計を整理します。バンドを逆張りの道具としてだけでなく、流れの継続判定にも使いたいcBot開発者を想定しています。特定の設定が成果を約束するものではなく、設計の考え方の整理として読んでください。

ボリンジャーバンドのスクイーズ・バンドウォーク・終わりの兆候の3局面と、各局面での平均足の形を示す模式図

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

まず、ボリンジャーバンドが単独で何を示し、どこで迷いが生じるのかを確認します。

中心線は一般に20本の単純移動平均、上下のバンドは中心線から標準偏差の2倍(±2σ)離れた位置に描かれます。基本の読み方はボリンジャーバンドとはで解説しています。この記事で使うのは次の3つの性質です。

限界は、同じ「バンド接触」が2通りに読めることです。レンジではバンドへの接触が反転の材料になりやすい一方、拡大局面では接触が流れの強さの表れになります。バンドの形だけでは、いまどちらの読み方を採るべきか、そしてバンドウォークが終わったのかを判断しきれません。

平均足の役割

次に、流れの質を読む側としての平均足を見ていきます。

平均足の終値は「その足の4本値の平均」、始値は「前の平均足の始値と終値の平均」です。基礎は平均足の基礎にまとめています。この記事で使うのは、色だけでなく足の形です。

平均足単独の弱点は、価格の「位置」を持たないことです。陽線が続いていても、それが平均から大きく離れた伸び切った場所なのか、まだ中心付近なのかはわかりません。また、平均足の4本値は計算上の値で、実際に約定する価格とは一致しません。損切や指値の基準に平均足の高値・安値をそのまま使うと、想定とずれた位置に注文を置くことになります。

なぜこの組み合わせか

ここでは、2つの指標がどう補い合うのかを、局面ごとに整理します。

ボリンジャーバンドは「どこにいるか」を示し、平均足は「流れの質がどうか」を示します。前者で局面を特定し、後者でその局面の中身を確認する、という役割分担が組み合わせの根拠です。

スクイーズからの動き出し: バンド幅が縮んだ状態から広がり始めたとき、平均足の色が動き出しの向きとそろっているかを確認します。そろっていなければ、拡大が一時的な振れである可能性を残して待つ材料になります。

バンドウォークの継続: 価格が上側バンド寄りにあり、平均足が下ヒゲのない陽線を続けている間は、バンド接触を「行き過ぎ」ではなく「流れの継続」として扱う材料にします。逆張り判定をこの局面で止めておく、というフィルターとしての使い方です。

終わりの兆候: 平均足に下ヒゲが出始め、実体が縮み、価格が中心線側へ戻り始めたら、バンドウォークが崩れ始めた材料とします。色の反転を待たずに、形の変化を段階的な警戒として扱えるのが平均足を重ねる利点です。保有中であれば、ストップを引き寄せる検討のきっかけになります。考え方の土台はトレーリングストップとはを参照してください。

代償もあります。平均足は前の足を引き継いで計算されるため、反転を示すのが実際の価格より遅れます。また、バンドウォークの途中で一時的に下ヒゲが出ることは珍しくなく、形の変化に反応しすぎると、続いている流れから早く降りることになります。どこまでを「警戒」にとどめ、どこからを「終わり」とみなすかは、段階を分けて設計する必要があります。二重確認の一般的な考え方はダマシ回避の二重確認にまとめています。スクイーズ判定をケルトナーチャネルとの比較で行う方法はボリンジャーバンドとケルトナーチャネルの組み合わせで扱っています。

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

パラメータに正解はないため、調整の方向性だけを整理します。

ボリンジャーバンドは期間20・偏差2が広く使われる設定です。偏差を小さくするとバンドウォークと判定される場面が増え、大きくすると減ります。バンドウォークを「上側バンドへの接触」と厳密に定義すると判定が途切れやすいため、中心線から上側バンドまでのどのあたりにいれば「バンド寄り」とみなすか、というゾーンで定義するほうが扱いやすいと考えられます。

平均足自体にパラメータはありませんが、「下ヒゲなし」の判定にどれだけ許容幅を持たせるかが実質的な設定になります。許容幅をゼロにすると、わずかなヒゲで継続判定が途切れます。ATRなどで正規化した小さな許容幅を設ける方法も検討できます。

継続とみなす本数や終わりとみなす条件の段階は、この組み合わせ独自の設定です。ここを細かく詰めるほど過去データへの当てはめになりやすいため、少数の候補値で比較し、期間を分けたバックテストで傾向が保たれるかを確認する進め方が安全です。短い時間足ほど平均足の形が頻繁に変わるため、時間足ごとに評価を分けることも大切です。

cBot化する際の考慮点

ここからは、cTraderのcBotに組み込む際の設計上のポイントです。

確定足のみで判定する: 平均足の形もバンド内の位置も、未確定足では足の途中で変わります。OnBarで処理し、直近の確定足(Bars.Count - 2)の値を使います。

平均足は自前で計算し、起動時に初期化する: 平均足の始値は前の足の値に依存するため、cBotの起動時点から計算を始めると、最初の数本は初期値の影響を強く受けます。OnStartで過去の足を順に流して平均足を計算しておくか、一定本数が経過するまで判定しない設計にします。

バンドの計算元は実際の終値にする: バンドを平均足の終値で計算すると、平滑化が二重にかかり、位置の情報が鈍ります。この記事の設計では、位置は実際の価格、流れの質は平均足、と分けて扱います。

損切は実際の価格で決める: 平均足の安値ではなく、実際の直近安値や中心線など、約定価格と同じ基準の水準を使います。この点は平均足とATRの組み合わせでも詳しく扱っています。

状態管理: バンドウォークの継続本数と、「警戒」「終了」の段階を状態として保持します。中途半端な足では状態を変えない(ヒステリシス)ようにすると、判定の往復を抑えやすくなります。

// 例: OnStartで bb = Indicators.BollingerBands(Bars.ClosePrices, 20, 2, MovingAverageType.Simple) を生成済み
protected override void OnBar()
{
    int i = Bars.Count - 2;                                   // 直近の確定足
    double o = Bars.OpenPrices[i], h = Bars.HighPrices[i];
    double l = Bars.LowPrices[i],  c = Bars.ClosePrices[i];

    double haClose = (o + h + l + c) / 4.0;
    double haOpen  = double.IsNaN(_haOpen) ? (o + c) / 2.0 : (_haOpen + _haClose) / 2.0;
    double haLow   = Math.Min(l, Math.Min(haOpen, haClose));
    _haOpen = haOpen; _haClose = haClose;
    if (++_haBars < warmupBars) return;                       // 初期値の影響が薄れるまで判定しない

    double top = bb.Top[i], mid = bb.Main[i];
    if (double.IsNaN(top) || top <= mid) return;
    double pos = (c - mid) / (top - mid);                     // 1 で上側バンド上

    bool bull      = haClose > haOpen;
    bool noLowWick = haOpen - haLow <= wickTolerance;         // 下ヒゲなし(許容幅つき)

    if (pos >= walkZone && bull && noLowWick) { _walkBars++; _warning = false; }
    else if (_walkBars > 0 && (!noLowWick || pos < walkZone)) _warning = true;  // 警戒段階
    if (pos < 0.0 || !bull) { _walkBars = 0; _warning = false; }              // 中心線割れ・陰転で終了
    // _walkBars と _warning を、逆張り停止やストップ引き寄せの判断材料に渡す
}

計算負荷: ボリンジャーバンドは組み込みインジケーター、平均足は1足あたり数回の四則演算で、負荷は軽微です。

実装の流れ

全体の処理を、入力から出力までの流れで整理します。

  1. 入力: 対象銘柄と時間足の確定足をOnBarで受け取る
  2. 計算: 平均足の4本値を前回値から更新し、バンドの上下・中心と価格の位置を求める
  3. 局面の特定: バンド幅の推移からスクイーズ・拡大を判定し、価格の位置からバンド寄りかどうかを判定する
  4. 流れの質の評価: 平均足の色とヒゲから、継続・警戒・終了のどの段階かを更新する
  5. 出力: 未保有なら逆張り判定の停止や動き出しの候補として判断材料に渡し、保有中ならストップの引き寄せや部分決済の検討、ログ出力を行う

この構成のポイントは、「位置」と「流れの質」を別の指標に任せ、段階を持つ状態として扱うことです。継続・警戒・終了を分けておけば、警戒段階で何をするかだけを差し替えて検証することもできます。

位置の判定と流れの質の評価を分け、継続・警戒・終了の段階で出力を切り替えるcBotの実装フロー

どう活用するか

最後に、立場別の使い方をまとめます。

自作派の方は、本記事の「位置はバンド、流れの質は平均足」という分担と、継続・警戒・終了の3段階を、Claude Code を使ったcBot開発の設計書にしてみてください。平均足の初期化と状態遷移はずれが出やすいため、足ごとの値をログに出してチャートと見比べる進め方がおすすめです。委託派の方は、ai-programming.xyzへの相談時に「バンドウォークの継続を平均足の色と下ヒゲで判定し、崩れ始めたら段階的にストップを引き寄せたい」と伝えていただくと、要件のすり合わせが進めやすくなります。教育派の方は、合成足の自前計算と段階的な状態管理の練習題材として活用できます。

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