ドンチャンチャネルとADXを組み合わせる考え方 — 更新の瞬間と強度の遅れのずれを扱う設計

ブレイクアウトのダマシを減らしたいとき、「ADXが高いときだけ更新を採用する」という条件は真っ先に思いつく発想です。ただ、実際に組むと奇妙なことが起きます。もみ合いを抜けた直後の足では、ADXはまだ低いままのことが多いのです。本記事では、水準の更新を検知する ドンチャンチャネル と、値動きの強さを測る ADX を組み合わせ、この時間差をどう扱うかを cBot 設計の視点から整理します。ブレイクアウト系のロジックに強度の判定を足したい中級者の方を想定しており、特定の設定が成果につながることを示すものではありません。

上段にドンチャンチャネルの更新、下段にADXを並べ、更新の足からADXが基準を上抜くまでに時間差が生じる様子を示した模式図

ドンチャンチャネルの役割

はじめに、検知役であるチャネルが返す情報の範囲を確認します。

ドンチャンチャネルは、直近N本の最高値と最安値を結んだ帯です。価格から直接求まるため定義にあいまいさがなく、「終値が上限を超えたか」を真偽値で表現できます。基礎はドンチャンチャネルとはにまとめています。

強みは反応の速さです。平滑化を挟まないので、更新が起きたその足で事実が確定します。

限界は、更新の 勢いを語らない 点です。チャネルは大きく抜けた足も、上端をわずかにはみ出した足も同じ「更新」として返します。狭いレンジでは上下の更新が交互に現れ、抜けたはずの価格がすぐ元の帯へ戻ることも珍しくありません。この構造はブレイクアウトとダマシの基本でも扱っています。

ADXの役割

次に、強度を測るADXの性格を整理します。

ADX(Average Directional Index)は、値動きに方向性がどの程度あるかを測る指標です。方向そのものは示さず、上下どちらの動きでも強まれば数値が上がります。方向は、組になる +DI と -DI の大小で読みます。詳しくはADXとはをご覧ください。

レンジとトレンドを大まかに分類する材料としては扱いやすい指標です。一方の限界は、平滑化を重ねた計算のため反応が遅い ことです。DIを平滑化した値からさらに平均を取る構造上、値動きの変化が数値に表れるまで時間がかかります。また、高い数値は「強い動きがすでに続いてきた」ことを示すものであり、この先も続くことを意味しません。

なぜこの組み合わせか

ここからが本題です。補完関係そのものは明快ですが、組み方に注意が要ります。

チャネルは速いが勢いを語らず、ADXは遅いが勢いを語る。性格が逆向きなので、一方の弱点を他方が補完する関係と考えられます。問題は、この「速い」と「遅い」が同じ足の上でかみ合わない点です。

ブレイクアウトの多くは、値幅が縮んだもみ合いの後に起こります。もみ合いの間はADXが低下していくため、チャネルを抜ける足でADXが高い状態は、構造的に起こりにくいのです。単純に「更新かつADXが基準以上」と書くと、有望かもしれない初動を落とし、すでに伸びきった局面の更新だけを拾う形になるおそれがあります。

そこで、同じ足の水準ではなく ADXの状態 で更新を仕分ける設計が検討対象になります。

更新時のADX読み方の一例扱いの一例
低く、横ばい〜低下勢いが確認できない保留または見送りの材料
低いが、上向きに転じている強度が立ち上がる途中の候補数本の猶予を置いて再評価
高く、上向きトレンドの途中での更新採用候補。ただし伸びきりに注意
高いが、下向きに転じている勢いが鈍っている可能性新規の判定を慎重に扱う材料

あわせて、更新の向きと +DI・-DI の大小が一致するかも照合します。ADXが上向きでも、動いている方向が更新と逆なら、仕分けの前提が崩れるためです。

なお、確認を待つほど反応は遅れます。ダマシを削る代わりに、判定時の価格は抜けた水準から離れ、損切りまでの距離も広がりやすくなります。これは解消できない交換関係であり、どちらを重く見るかは設計者の判断です。

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

唯一の正解はないため、考える順序を整理します。

チャネル期間は、短期向けなら短め、大きな波を狙うなら長めという方向性です。ADXの期間は慣例的な14前後を起点にできますが、短くすると反応は速まり、数値の振れも増えます。

基準となる水準は、一般に20〜25前後が目安として語られます。ただし銘柄や時間足で分布が異なるため、自分の対象でADXがどの範囲を動くのかを先に確認してください。

この設計で増えるのは「何本前と比べるか」「どれだけの上昇を立ち上がりとみなすか」「何本まで待つか」の3つです。条件を足すほど過去データには合わせやすくなるため、調整する値は絞り、検証に使っていない期間でも確認することをおすすめします。手順はバックテストの基礎にまとめています。

cBot化する際の考慮点

実装で押さえておきたい点を整理します。

上限は判定足を含めずに求める: 判定足の高値を含めると、終値が上限を超える状態は成立しません。判定足の手前までで確定した水準と比べます。

ADXのウォームアップを長めに取る: ADXは再帰的に平滑化されるため、期間と同じ本数では値が安定しません。期間の数倍の本数を確保してから判定に入ります。

保留を状態として持つ: 「更新は起きたが強度が未確認」という状態を変数で保持します。保留中に価格が抜けた水準の内側へ戻った場合と、待機本数を超えた場合は破棄します。

ポジション管理と連携する: 保持中の銘柄では新規の保留を作らない、再起動時は保留を破棄する、といった扱いを先に決めます。損切りは判定の成否とは別に、発注時点で設定します。

// 抜粋: 確定足でチャネル更新を検知し、ADXの状態で採用か保留かを分ける
private DirectionalMovementSystem _dms;
private int _pendingBars = -1;   // -1 = 保留なし
private double _brokenLevel;

protected override void OnStart()
{
    _dms = Indicators.DirectionalMovementSystem(AdxPeriod);
}

protected override void OnBar()
{
    if (Bars.Count < Math.Max(ChannelPeriod, AdxPeriod * 3) + AdxLookback + 2) return;

    double close = Bars.ClosePrices.Last(1);
    double adx   = _dms.ADX.Last(1);
    bool rising  = adx - _dms.ADX.Last(1 + AdxLookback) > AdxRiseMin;
    bool diUp    = _dms.DIPlus.Last(1) > _dms.DIMinus.Last(1);

    if (_pendingBars >= 0)   // 保留中: 再評価
    {
        if (close <= _brokenLevel || ++_pendingBars > MaxWaitBars) _pendingBars = -1;
        else if (rising && diUp) { _pendingBars = -1; /* 候補として出力 */ }
        return;
    }

    // 判定対象の足(Last(1))を含めず、その手前のN本で上限を求める
    double upper = double.MinValue;
    for (int i = 2; i <= ChannelPeriod + 1; i++)
        upper = Math.Max(upper, Bars.HighPrices.Last(i));

    if (close <= upper || !diUp) return;

    if (adx >= AdxLevel && rising) { /* 候補として出力 */ }
    else { _pendingBars = 0; _brokenLevel = upper; }
}

上方向のみの抜粋です。下方向は別の保留状態として対称に持つと、状態の混線を防げます。

実装の流れ

処理の順序を、入力から出力までの流れで示します。

  1. 入力: OnBar で確定足を受け取り、必要本数を確認する
  2. 再評価: 保留中なら、破棄か採用かを先に判定する
  3. 検知: 判定足の手前までの上限・下限と終値を比較する
  4. 照合: 更新の向きと +DI・-DI の大小を突き合わせる
  5. 強度判定: ADXの水準と変化から、採用・保留を振り分ける
  6. 出力: 候補を発注層または通知へ渡し、根拠の値をログへ残す

確定足の受け取りから更新の検知、DIの照合、ADXの判定を経て、出力・保留・見送りへ分岐する実装フロー図

検証の初期段階では、見送った更新と破棄した保留もログへ残すと、フィルターが何を落としているのかを後から確かめられます。チャネルの手前で値幅の縮みを捉えたい場合は、Range Compression Detectorで状態を目視しながら判定と突き合わせる方法もあります。損切り幅まで含めて設計するなら、ドンチャンチャネルとATRの組み合わせの軸を重ねる拡張が考えられます。

どう活用するか

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

自作派の方は、Claude Code への指示で保留の開始・破棄・採用の3条件を箇条書きにして渡すと、実装のぶれを抑えやすくなります。委託派の方は、ai-programming.xyz への相談時に「更新時点でADXが低い場合の扱い」を先に決めておくと、要件のすり合わせが進めやすくなります。教育派の方には、複数足にまたがる状態管理の練習題材として、スクールでの学習に活用いただけます。実装の参考になれば幸いです。

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