平均足とADXを組み合わせる考え方 — 方向と強度を分離して観察する設計

平均足(Heikin Ashi)は、ローソク足を再計算してトレンドの流れを滑らかに見せる描画手法であり、ADX(Average Directional Index)は、価格の上下方向を問わずトレンドの 強さ だけを数値化する指標です。前者はトレンドの「方向」を視覚的に整理し、後者は「強度」を定量的に評価するため、性格が大きく異なる2つを並べると、相場状態の判定を多角的に進めやすくなります。

本記事では、平均足とADXを併用する考え方と、cBotとして組み込む際に意識したい設計上のポイントを整理します。あくまで「設計の参考」としての位置づけであり、特定の数値が成果を保証するという話ではありません。

平均足とADXがそれぞれ捉えるトレンドの側面

平均足の役割

平均足は、通常のローソク足とは異なる計算式で4本値を作り直す描画手法です。詳細は平均足とは何を描く手法かを参照してください。

平均足は、前足の平均値を加えて計算し直すため、連続した同色足が出やすく、視覚的にトレンドの方向感を素直に追いやすくなります。陽線が連続している間は上昇方向、陰線が連続している間は下降方向のバイアスがあると一般的に解釈されます。下ヒゲのない陽線が並ぶような状態は、上昇圧力が強い局面の目安として参照されることが多い指標です。

単独利用時の限界として、平均足は本質的に平滑化された再計算ローソクであるため、実勢価格と乖離します。エントリーの執行価格は通常足から算出する必要があり、平均足の高安だけで損切り・利確を設計すると実価格との差が問題になりやすくなります。また、トレンドの方向は読み取れても「どれくらい強いトレンドか」までは、足の連続本数や色だけでは定量化しにくいという面もあります。

ADXの役割

ADXは、Directional Movement Index(DMI)から派生した指標で、+DIと-DIの差分を平滑化し、トレンドの強さを0〜100のスコアで表現します。詳細はADXとは何を測る指標かにまとめています。

ADXの読み方の基本は、25前後を超えるとトレンドが効きはじめている目安、20を下回るとレンジ寄りの目安、と一般的に整理されます。重要なのは、ADXは方向を表さず純粋に強度だけを示す点です。上昇トレンドであっても下降トレンドであっても、十分に強ければADXは上昇します。

単独利用時の限界として、ADXは遅行性が比較的強く、トレンドが発生した後に追随する形になりがちです。さらに、強度は分かっても方向は別途+DI/-DI、または別の指標で確認する必要があります。「強いトレンドが出ている」と分かったときに、それが上下どちらに向かう動きなのかを判断する材料は、ADXの本体スコア単独からは得られません。

なぜこの組み合わせか

平均足とADXは、互いに欠けている情報を補完しやすい関係にあります。平均足は方向感を視覚的に整理しますが強度の定量化が苦手で、ADXは強度を数値化しますが方向は示しません。役割が真逆に近いため、組み合わせると「方向 × 強度」の二軸で状態を把握しやすくなります。

考え方の例を挙げます。

このように、片方では「上昇トレンドっぽい」と一括りにしてしまう局面を、もう一方で強度面から再評価できる点に意義があります。一般論として、トレンドフォロー戦略の前提条件を多角的に確認するためのフィルターとして機能することが期待できます。

注意点として、両指標とも遅行性を持つため、転換の瞬間を即座に捉える用途には向きません。「いまどんな状態が継続しているか」を観察し、その状態のうちにエントリーすべきかをふるい分ける材料として扱う設計のほうが、両指標の特性に沿った使い方になります。すでに公開している平均足×ADX エントリーシグナルも、この補完関係を前提に状態判定を組み立てたツールです。

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

唯一の正解があるわけではなく、検証して自分の運用時間軸に合わせる前提で、方向性だけ整理します。

平均足側 は計算式自体に調整パラメータがほとんどなく、表示する時間足の選択が実質的なパラメータです。短期スキャル寄りなら1〜5分足、デイトレード寄りなら15分〜1時間足、スイング寄りなら4時間〜日足が検討対象になります。連続同色足の本数(2本連続/3本連続)を「方向確定」の閾値にする設計も一般的に採られます。

ADXの期間 は標準が14です。短くすれば反応は早くなりますがノイズも増え、長くすれば平準化されますが反応は鈍くなります。スキャル寄りなら7〜10、スイング寄りなら14〜21といった調整が検討されます。トレンド成立判定のしきい値も、20/25/30のどこに置くかで挙動が変わるため、過去データで検証する前提で組むのが安全です。

時間足の組み合わせも設計要素です。上位足の平均足で大局の方向、下位足のADXでタイミングの強度判定、というマルチタイムフレーム構成も検討の余地があります。いずれの場合も、自分の運用環境でバックテストして挙動を確認するプロセスを省略しないことが重要です。

cBot化する際の考慮点

cTraderのcBotとして実装する場合、設計面で押さえておきたいポイントがあります。

データ取得タイミング: 平均足は前足の自身の値を参照する再帰計算のため、確定足ベースで判定するのが安定しやすい構造です。OnTickで毎回再計算すると同一バー内で平均足の値が揺れ、状態フラグがバタつきます。OnBarで確定後に評価する設計が無難です。ADXも複数本のデータを使う指標のため、確定足ベースでの判定と相性が良いです。

計算順序の依存関係: 平均足のオープン/クローズは前足の平均足オープン/クローズに依存するため、起動直後の数本はnullや初期値が混じります。判定ロジックの前にnull/NaNチェックを入れて、十分な本数が貯まるまではエントリー判定をスキップする実装が安全です。ADXも同様で、Result.LastValue がNaNを返す期間が起動直後に存在します。

状態判定のヒステリシス: ADXは閾値前後で振動しやすく、25を行ったり来たりすると「トレンド開始/終了」フラグが頻繁に切り替わります。直近N本連続でしきい値を超えたら状態を切り替える、といったヒステリシス設計を加えると判定が安定します。平均足も色変化を「1本だけで確定」と扱うとノイジーになりやすいため、2〜3本連続を条件にする工夫が有効です。

簡単な疑似コード断片を挙げます。

// 例: 平均足の色とADXの強度を組み合わせる
var ha = Indicators.HeikenAshi();
var adx = Indicators.DirectionalMovementSystem(14);

double haOpen = ha.HeikinAshiOpen.LastValue;
double haClose = ha.HeikinAshiClose.LastValue;
double adxValue = adx.ADX.LastValue;

if (double.IsNaN(haClose) || double.IsNaN(adxValue)) return;

bool isBullish = haClose > haOpen;
bool isTrending = adxValue > 25;
// isBullish と isTrending を組み合わせて状態フラグを更新

実装初期は、平均足の色フラグとADX値を毎バーログ出力しておくと、検証時にチャート上の挙動と突き合わせやすくなります。

実装の流れ

ロジックをcBotに落とし込むときの全体像を、入力→計算→判定→出力の流れで整理します。

  1. 入力: 監視する銘柄・時間足を決め、Bars から4本値(O/H/L/C)を取得する
  2. 計算: 平均足の4本値を再計算し、ADXを別途算出する。直近N本分の系列を保持する
  3. 判定:
    • 方向フラグ: 平均足が同色連続(陽線連続/陰線連続)か
    • 強度フラグ: ADXがしきい値以上で上昇しているか
    • 両者の組み合わせで、現在の状態(上昇トレンド進行中 / 下降トレンド進行中 / レンジ / 転換警戒)を決定
  4. 出力: 状態フラグを、エントリーロジックや外部通知に渡す

この設計はエントリーシグナルそのものというより、状態判定レイヤー として実装すると応用が利きます。実際のエントリーや決済ロジックは別モジュールに分け、状態フラグを前提条件として参照する構造にしておくと、後から戦略を差し替えやすくなります。

平均足×ADXを使った状態判定の戦略フロー

どう活用するか

この設計図は、目的別に活用できます。

自作派の方は、Claude Code を使った cBot 開発時の状態判定モジュール設計書として、本記事の節構造をそのまま下敷きにしてみてください。委託派の方は、ai-programming.xyz への開発相談時に「平均足とADXで方向と強度を分離して状態判定したい」という前提を共有しておくと、要件詰めがスムーズになります。教育派の方は、スクールでの実践課題のテーマとして、本記事の状態判定ロジックを自分の手で実装し、ヒステリシスやマルチタイムフレーム化へと発展させていく演習に使えます。

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