MT4でレンジ相場を自動判定する方法|ADXでトレンド判定するMQL4実装例

スーツ姿のデグーマウスがMT4 EAのコードを指しながら解説しているイラスト。ぷろぐらむFXのデフォルトアイキャッチ。
EAサンプル・ノウハウ

EAはロジックが優れていれば勝てる——
そう思われがちですが、実運用では 「相場環境との相性」 が成績を大きく左右します。

・ナンピンはレンジで強い
・ブレイクアウトはトレンドで強い
・順張りはADX上昇局面で機能しやすい

つまり、

ロジック単体ではなく「相場環境とセット」で設計する必要がある


本記事では、
MT4でレンジ相場を自動判定する方法
ADXを使ったトレンド判定の実装手順
そしてレンジかどうかを見分ける設計方法を、
MQL4コード付きで解説します。

単なるインジケーター解説ではありません。
これは EA設計における「相場モード管理」の基礎技術 です。


なぜMT4でレンジ判定が必要なのか?

多くのEAは、特定の相場環境に最適化されています。

例えば:

  • ナンピン型 → レンジ向き
  • ブレイク型 → トレンド向き
  • 押し目買い → 上昇トレンド向き

しかし環境を無視すると、

・レンジ用EAがトレンドで崩壊
・トレンド用EAがヨコヨコで損切り連発
・「バックテストは良かったのに…」状態

が起きます。

そこで必要なのが、

MT4上で相場環境を自動判定する仕組み

です。


MT4でトレンド判定する方法|ADXを使う理由

MT4でトレンド判定する方法として、
最も一般的に使われるのが ADX(Average Directional Index) です。

ADXは「方向」ではなく、

トレンドの“強さ”を数値化する指標

です。

一般的な目安

  • ADX 20以下 → レンジ傾向
  • ADX 25〜30以上 → トレンド傾向

つまり、
ADXを使えばレンジ相場かどうかを数値で見分けることができます。

しかし実務では、単純な閾値判定だけでは不十分です。


ADXでレンジを見分ける設計方法(実務ベース)

実際にMT4でレンジ判定を安定させるには、
以下の3要素を組み合わせます。

① ADX閾値

トレンド判定の基準値。

例:

  • 28以上 → トレンド化
  • 22以下 → レンジ化

② DI差(+DIと-DIの差)

ADX単体では「強さ」しか分かりません。

DI差を入れることで、

  • 方向性の優位性
  • 本当に力のあるトレンドかどうか

を補完できます。


③ ヒステリシス設計(最重要)

ヒステリシスとは、

ONとOFFの閾値を分ける設計

です。

例:

ADX_Trend_On  = 28
ADX_Trend_Off = 22

これにより:

・モードの頻繁な切替を防ぐ
・ノイズによる誤判定を防ぐ
・相場状態が安定する

単純な「25超えたらトレンド」では、
実運用では振り回されます。


MQL4でレンジ・トレンドを判定するコード例

以下は、バー確定時に相場モードを判定する関数例です。

enum MODE
{
   MODE_RANGE = 0,
   MODE_TREND = 1
};MODE CalcModeOnBarClose()
{
   double adx1 = iADX(Symbol(), PERIOD_M5, 14, PRICE_CLOSE, MODE_MAIN, 1);
   double adx2 = iADX(Symbol(), PERIOD_M5, 14, PRICE_CLOSE, MODE_MAIN, 2);   double pdi  = iADX(Symbol(), PERIOD_M5, 14, PRICE_CLOSE, MODE_PLUSDI, 1);
   double mdi  = iADX(Symbol(), PERIOD_M5, 14, PRICE_CLOSE, MODE_MINUSDI, 1);   double diDiff = MathAbs(pdi - mdi);   static MODE currentMode = MODE_RANGE;
   MODE nextMode = currentMode;   // トレンド → レンジ
   if(currentMode == MODE_TREND)
   {
      if(adx1 <= 22 && diDiff <= 8 && adx1 <= adx2)
         nextMode = MODE_RANGE;
   }
   // レンジ → トレンド
   else
   {
      if(adx1 >= 28 && diDiff > 8)
         nextMode = MODE_TREND;
   }   currentMode = nextMode;
   return nextMode;
}

このように

  • ADX値
  • DI差
  • ADXの傾き

を組み合わせることで、
安定したレンジ判定が可能になります。


判定結果を可視化する(応用)

MT4でレンジ判定を実装できても、
チャート上で確認できなければ検証効率は上がりません。

別記事で公開している VisualMode.mqh を使えば、

  • レンジ → 青背景
  • トレンド → 赤背景
  • モード切替ライン描画

が可能です。

MT4でEAの状態を色分け表示する方法

👉 MT4でEAの状態を色分け表示する方法

本記事では「判定ロジック」に集中し、
可視化は応用として扱います。


実装例:ADXモード管理をEAに組み込むと?

ここまで解説した

MT4でレンジ相場を自動判定する方法

を実際のEAに組み込むとどうなるのでしょうか。

当サイトでは、
ボリンジャーバンド順張りEAにADXトレンド判定を組み込んだ実例を公開しています。

👉 MT4でADX連携ボリンジャーバンドEAを作成

このEAでは、

  • ボリンジャーバンド → 方向
  • ADX → 強さ

を分離設計し、
レンジ相場での無駄なエントリーを抑制しています。

相場モード管理がどのように実戦ロジックへ落とし込まれるのか、
ぜひ併せてご覧ください。


まとめ|MT4レンジ判定はEA設計の基礎技術

MT4でレンジ判定を実装することは、
単なるインジケーター追加ではありません。

それは

相場モードを管理する設計思想

です。

ADXによるトレンド・レンジ判定は、

  • デバッグ効率向上
  • パラメータ最適化の精度向上
  • ロジックと相場環境の理解深化

につながります。

EAはロジック単体では完成しません。

ロジック × 相場環境

で初めて安定します。

まずはADXを使ったトレンド判定を実装し、
あなたのEAに「相場モード管理」を組み込んでみてください。

コメント

タイトルとURLをコピーしました