MACDとADXを組み合わせる考え方 — モメンタム転換とトレンド強度の二段判定
MACD(Moving Average Convergence Divergence)は、短期・長期の指数移動平均の差分とそのシグナル線の関係からモメンタムを捉える指標です。ADX(Average Directional Index)は、+DIと-DIから算出される方向性移動を平滑化し、方向を問わずトレンドの「強さ」を単一のラインで数値化します。前者は「流れが加速しているか」を、後者は「そもそもトレンドがどれくらい強いのか」を示すため、性格の異なる2つを併せると、モメンタム転換の初動と、そこにトレンド構造が伴っているかを二段構えで確認する設計になります。
本記事では、MACDとADXを組み合わせて使う考え方と、cBotとして落とし込む際に意識したい設計上のポイントを整理します。あくまで「設計の参考」であり、特定のパラメータが成果を保証する話ではありません。
MACDの役割
MACDは、短期EMA(標準12)と長期EMA(標準26)の差を「MACDライン」、その9期間EMAを「シグナルライン」、両者の差分を「ヒストグラム」として表示するモメンタム系指標です。詳細はMACDが示すモメンタムの変化を参照してください。
MACDラインがシグナルラインを上抜けするタイミングは短期モメンタムが上方向に転じた材料として、下抜けは下方向に転じた材料として参照されます。ヒストグラムがゼロラインの上で拡大していく局面は上昇モメンタムの加速、縮小に転じる局面は加速の鈍化を示す材料として読まれることが多い指標です。ゼロラインクロス自体は、短期EMAが長期EMAを跨いだ瞬間として、より遅い方向転換の目安になります。
単独使用時の限界として、MACDはEMAベースの遅行性を持つため、シグナルは実際の相場転換から数本遅れる傾向があります。また、レンジ相場ではMACDラインとシグナルラインのクロスが頻発し、モメンタム転換シグナル自体がダマシになりやすい特性があります。したがって、「シグナルが出た」ことよりも、「そのシグナルが発生した相場環境がトレンド寄りかレンジ寄りか」を別軸で判定できる指標との併用が相性の良い設計になります。
ADXの役割
ADXは、価格の高値と安値から+DI(Plus Directional Indicator)と-DI(Minus Directional Indicator)を算出し、両者の差分を平滑化してトレンドの強度を0〜100の範囲で数値化する指標です。詳細はADXでトレンドの強度を測るにまとめています。
ADXの値が高いほどトレンドが強く、低いほどレンジ寄りの相場と一般的に解釈されます。一つの目安として、25前後を境にトレンド発生の判断基準とする使い方が多く見られますが、これは絶対的な閾値ではなく、銘柄・時間足によって挙動が異なる前提で扱う数字です。ADX自体は方向情報を持たないため、上昇トレンドでも下降トレンドでもADXは上昇する点に注意が必要で、方向は+DIと-DIの位置関係から別途読み取ります。
単独使用時の限界として、ADXは方向情報を持たないため、エントリーそのものの判定材料としては使いにくい指標です。また、平滑化を経て算出されるため反応が遅く、トレンド発生から相応の本数を経てからADXが上昇し始めるのが一般的です。したがって、ADXは「エントリー判定の主体」ではなく、「他のシグナルの信頼性を高めるフィルター」として使う設計と相性が良くなります。
なぜこの組み合わせか
MACDとADXは、互いの短所を打ち消し合う関係にあります。MACDは方向を含むモメンタム情報を持ちますがレンジ相場でのダマシに弱く、ADXはトレンド強度の情報を持ちますが方向は持ちません。役割が補完的で、「モメンタム転換のシグナル + トレンド強度による裏付け」という二段判定の型を構築しやすい組み合わせです。
考え方の例を挙げます。
- MACDが上方向にクロス + ADXが上昇して閾値を超過 → 上昇トレンドが発生・継続していると判定する材料
- MACDが上方向にクロス + ADXが低位で横ばい → モメンタム転換の兆しはあるがトレンド強度の裏付けが弱く、レンジ寄り局面と判定する材料
- MACDが下方向にクロス + ADXが上昇 → 下降トレンドの拡張局面と判定する材料
- MACDに変化なし + ADXが低位 → 方向感の乏しいレンジ局面で、シグナル発生を待つ局面と判定する材料
この構造の狙いは、MACDが単独で発するダマシシグナルを、ADXという別軸のフィルターで削ることにあります。ADXがトレンド不在を示す局面ではMACDのクロスシグナルを見送り、ADXがトレンド発生を示唆する局面のみでシグナルを採用する、というアプローチは一般論として合理性のある発想です。
注意点として、両指標とも遅行性を持つため、相場のピンポイントな転換点を捉える用途には向きません。「モメンタム転換とトレンド強度という2つの軸の一致を待って動く」ことが、この組み合わせの本質になります。強度が伴わないモメンタムシグナルを排除する分だけ、シグナル数は減少する傾向がある点も、設計時に理解しておきたい特徴です。
パラメータをどう考えるか
唯一の正解はなく、検証しながら運用時間軸に合わせる前提で、方向性だけ整理します。
MACD側 は標準の12/26/9が広く使われるパラメータです。より早く反応させたい場合は短めの数値(例えば8/17/9)に、平準化させたい場合は長めの数値に調整するといったアプローチが検討対象になります。ただし、短くするほどダマシが増え、長くするほど遅行性が増すというトレードオフは変わりません。短めの調整を選ぶ場合は、ADXフィルターの厳格化(閾値を上げる、連続本数を要求するなど)とセットで考えるのが一般的な設計方針です。
ADX側 の期間は標準が14で、短くすると反応は速くなる一方、値が振れやすくなります。長くすると平準化される反面、トレンド発生の検知が遅れます。閾値についても、25前後が広く言及されますが、ボラティリティの高い銘柄では20〜22、低ボラ銘柄では28〜30あたりでチューニングされる事例も見られます。過去データでの検証が前提であり、閾値の可搬性を過信しない姿勢が重要です。
時間足を分ける構成も有力な選択肢です。上位足のADXで大局のトレンド強度を判定し、下位足のMACDでエントリータイミングを取るマルチタイムフレーム設計は、両指標の性格に沿った組み合わせ方の一つになります。
cBot化する際の考慮点
cTraderのcBotとして実装する場合、押さえておきたい設計上のポイントがあります。
データ取得タイミング: MACDのシグナルクロスやヒストグラムのゼロクロスは、確定足ベースで判定するのが安定します。OnTickで毎ティック評価すると、同一バー内で値が振れてシグナル発生と取り消しが交互に発生します。ADXも複数本のTrue Rangeと方向性移動を用いる計算のため、確定後判定が原則です。基本方針はOnBarで確定した値をもとに評価する構造にすることです。
計算順序と依存関係: MACDはBars.ClosePricesから短期EMAと長期EMAを計算し、その差分をシグナル線でさらに平滑化する多段の依存関係を持ちます。ADXはBars.HighPricesとBars.LowPricesからTrue Rangeと方向性移動を計算します。cTrader組み込みのインジケーターを使う場合はライブラリが処理しますが、起動直後は履歴本数不足でNaNや0値が返る可能性があるため、値の妥当性チェックを入れておくのが安全です。
シグナルの確定処理: シグナル発生を捉える際、「1本前は基準を満たさず、現在足で基準を満たした」という差分検出パターンが基本になります。MACDのクロス判定であれば、prev.MACD < prev.Signal && current.MACD > current.Signalのような形です。ただし、ADXが閾値付近を頻繁に出入りする局面では、フィルターの状態が目まぐるしく切り替わります。ADXが閾値超え状態を「N本連続で維持している」ことをエントリー条件に加えると、ヒステリシスが効いて挙動が安定します。
簡単な疑似コード断片を挙げます。
// 例: MACDのゼロクロスとADX閾値・DI方向を組み合わせた判定
var macd = Indicators.MacdHistogram(Bars.ClosePrices, 26, 12, 9);
var adx = Indicators.DirectionalMovementSystem(14);
double histCurrent = macd.Histogram.LastValue;
double histPrev = macd.Histogram.Last(1);
double adxCurrent = adx.ADX.LastValue;
double diPlus = adx.DIPlus.LastValue;
double diMinus = adx.DIMinus.LastValue;
if (double.IsNaN(adxCurrent) || double.IsNaN(histCurrent)) return;
bool macdCrossUp = histPrev <= 0 && histCurrent > 0;
bool trendStrong = adxCurrent > 25.0;
bool upwardBias = diPlus > diMinus;
bool longSignal = macdCrossUp && trendStrong && upwardBias;
実装初期は、MACDヒストグラム、ADX値、+DIと-DIの関係、シグナルフラグの状態遷移をすべてログに出力しておくと、後から挙動を検証しやすくなります。
実装の流れ
ロジックをcBotに落とし込む際の全体像を、入力→計算→判定→出力の流れで整理します。
- 入力: 監視する銘柄・時間足を決め、
Barsから高値・安値・終値と十分な本数を取得する - 計算: MACD(MACDライン・シグナルライン・ヒストグラム)とADX(ADX・+DI・-DI)を別系列として保持する
- 判定:
- モメンタムフラグ: MACDのクロス方向・ヒストグラムのゼロクロス
- 強度フラグ: ADXが閾値を超えているか、連続N本で維持しているか
- 方向フラグ: +DIと-DIの位置関係で上昇バイアスか下降バイアスか
- 3つの組み合わせで、エントリー・スキップ・待機を決定する
- 出力: 判定結果と関連メトリクスをエントリーロジックや外部通知に渡す
この設計は、モメンタム判定レイヤーと強度判定レイヤーを分離しておくことで応用の幅が広がります。将来的にMACDを別のモメンタム指標(例えばRSIやStochastic)に差し替えたい場合でも、ADXによる強度フィルターの部分はそのまま流用しやすい構造になります。
どう活用するか
この設計図は、目的別に活用できます。
自作派の方は、Claude Codeを使ったcBot開発時のテンプレートとして、本記事のモメンタム判定レイヤーと強度判定レイヤーの分離方針を下敷きにしてみてください。委託派の方は、ai-programming.xyzへの開発相談時に「MACDでモメンタムを、ADXでトレンド強度を、それぞれ独立に扱いたい」という前提を共有しておくと、要件詰めがスムーズになります。教育派の方は、スクールでの実践課題として本記事のロジックを実装し、ADX閾値のチューニングやマルチタイムフレーム化へと発展させていく演習に使えます。
本記事は一般的な情報提供を目的としています。投資助言ではありません。 取引判断はご自身の責任で行ってください。