<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>ADX アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/adx/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/adx/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 03:12:46 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>ADX アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/adx/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】iADX関数の使い方を徹底解説！ADXでトレンドの強さを判定するサンプルプログラム付き</title>
		<link>https://mql-programing.com/archives/13034/%e3%80%90mql4%e3%80%91iadx%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81adx%e3%81%a7%e3%83%88%e3%83%ac%e3%83%b3%e3%83%89%e3%81%ae%e5%bc%b7/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Mon, 13 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[iADX]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[テクニカルインジケーター]]></category>
		<category><![CDATA[ADX]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13034</guid>

					<description><![CDATA[<p>「トレンドが出ているのか、レンジなのか」を判断できたら、EAの精度は格段に上がりますよね。そんなときに頼りになるのがADX（Average Directional Index）というインジケーターです。 MQL4には、A [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13034/%e3%80%90mql4%e3%80%91iadx%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81adx%e3%81%a7%e3%83%88%e3%83%ac%e3%83%b3%e3%83%89%e3%81%ae%e5%bc%b7/">【MQL4】iADX関数の使い方を徹底解説！ADXでトレンドの強さを判定するサンプルプログラム付き</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>「トレンドが出ているのか、レンジなのか」を判断できたら、EAの精度は格段に上がりますよね。そんなときに頼りになるのが<strong>ADX（Average Directional Index）</strong>というインジケーターです。</p>
<p>MQL4には、ADXの値を簡単に取得できる<strong>iADX()関数</strong>が用意されています。この記事では、iADX()関数のパラメーターを一つひとつ解説し、実際にEAで使えるサンプルコードまで紹介します。</p>
<h2><span id="toc1">ADXインジケーターとは？</span></h2>
<p>ADXは、J. Welles Wilder Jr.（ワイルダー）が開発したテクニカル指標で、<strong>トレンドの「強さ」を0〜100の数値で表す</strong>ものです。トレンドの方向（上昇・下降）ではなく、「どれくらい強いトレンドが出ているか」を測定します。</p>
<p>ADXは以下の<strong>3本のライン</strong>で構成されています。</p>
<ul>
<li><strong>ADX（メインライン）</strong> — トレンドの強さを示す（値が大きいほどトレンドが強い）</li>
<li><strong>+DI（プラス方向指標）</strong> — 上昇の勢いを示す</li>
<li><strong>-DI（マイナス方向指標）</strong> — 下降の勢いを示す</li>
</ul>
<p>一般的には、<strong>ADXが25以上</strong>でトレンドが発生していると判断します。また、+DIが-DIより上にあれば上昇トレンド、-DIが+DIより上にあれば下降トレンドと判断できます。</p>
<h2><span id="toc2">iADX()関数の書式とパラメーター</span></h2>
<p>MQL4のiADX()関数の書式は以下の通りです。</p>
<pre><code class="language-mql4">double iADX(
    string   symbol,          // 通貨ペア名
    int      timeframe,       // 時間足
    int      period,          // 計算期間
    int      applied_price,   // 適用価格
    int      mode,            // 取得するライン
    int      shift            // シフト（何本前の足か）
);
</code></pre>
<p>各パラメーターの意味を詳しく見ていきましょう。</p>
<h3><span id="toc3">symbol（通貨ペア名）</span></h3>
<p>対象の通貨ペアを文字列で指定します。現在のチャートの通貨ペアを使う場合は<strong>NULL</strong>または<strong>Symbol()</strong>と記述します。</p>
<h3><span id="toc4">timeframe（時間足）</span></h3>
<p>計算に使う時間足を指定します。現在のチャートの時間足を使う場合は<strong>0</strong>または<strong>PERIOD_CURRENT</strong>を指定します。他にも<code>PERIOD_M1</code>、<code>PERIOD_H1</code>、<code>PERIOD_D1</code>などが使えます。</p>
<h3><span id="toc5">period（計算期間）</span></h3>
<p>ADXの計算期間です。ワイルダーが推奨した<strong>14</strong>がデフォルトとしてよく使われます。</p>
<h3><span id="toc6">applied_price（適用価格）</span></h3>
<p>価格の種類を指定します。ADXでは通常<strong>PRICE_CLOSE</strong>（終値）を指定します。</p>
<h3><span id="toc7">mode（取得するライン）</span></h3>
<p>ADXの3本のラインのうち、どれを取得するかを指定します。ここが最も重要なパラメーターです。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>値</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>MODE_MAIN</strong></td>
<td>0</td>
<td>ADXメインライン（トレンドの強さ）</td>
</tr>
<tr>
<td><strong>MODE_PLUSDI</strong></td>
<td>1</td>
<td>+DI（上昇の勢い）</td>
</tr>
<tr>
<td><strong>MODE_MINUSDI</strong></td>
<td>2</td>
<td>-DI（下降の勢い）</td>
</tr>
</tbody>
</table>
<h3><span id="toc8">shift（シフト）</span></h3>
<p>何本前の足のデータを取得するかを指定します。<strong>0</strong>が現在の足（形成中）、<strong>1</strong>が1本前の確定済み足です。EAのロジックでは、確定した値を使うために<strong>1以上</strong>を指定するのが一般的です。</p>
<h2><span id="toc9">基本的な値の取得方法</span></h2>
<p>まずは、3本のラインの値をそれぞれ取得する基本コードを見てみましょう。</p>
<pre><code class="language-mql4">void OnTick()
{
    // 1本前の確定足からADXの各ラインを取得（期間14）
    double adxValue  = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MAIN,    1);
    double plusDI     = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_PLUSDI,  1);
    double minusDI    = iADX(NULL, 0, 14, PRICE_CLOSE, MODE_MINUSDI,1);

    // ログに出力して確認
    Print("ADX=", DoubleToString(adxValue, 2),
          " +DI=", DoubleToString(plusDI, 2),
          " -DI=", DoubleToString(minusDI, 2));
}
</code></pre>
<p>このコードをEAに貼り付けてストラテジーテスターで実行すると、操作ログにADXの各値が表示されます。まずはここから試してみてください。</p>
<h2><span id="toc10">実践サンプル①：ADXをトレンドフィルターとして使う</span></h2>
<p>ADXの最もポピュラーな使い方は、<strong>トレンドフィルター</strong>です。「ADXが一定値以上のときだけエントリーする」というルールを加えるだけで、レンジ相場での無駄なエントリーを減らせます。</p>
<pre><code class="language-mql4">// --- 入力パラメーター ---
input int    ADX_Period    = 14;     // ADX期間
input double ADX_Threshold = 25.0;   // トレンド判定のしきい値

void OnTick()
{
    double adxValue = iADX(NULL, 0, ADX_Period, PRICE_CLOSE, MODE_MAIN, 1);
    double plusDI    = iADX(NULL, 0, ADX_Period, PRICE_CLOSE, MODE_PLUSDI, 1);
    double minusDI   = iADX(NULL, 0, ADX_Period, PRICE_CLOSE, MODE_MINUSDI, 1);

    // トレンドが弱い場合は何もしない
    if(adxValue < ADX_Threshold)
    {
        // レンジ相場と判断 → エントリーしない
        return;
    }

    // +DI > -DI なら上昇トレンド
    if(plusDI > minusDI)
    {
        // ここに買いエントリーのロジックを記述
        Print("上昇トレンド検出！ ADX=", DoubleToString(adxValue, 2));
    }
    // -DI > +DI なら下降トレンド
    else if(minusDI > plusDI)
    {
        // ここに売りエントリーのロジックを記述
        Print("下降トレンド検出！ ADX=", DoubleToString(adxValue, 2));
    }
}
</code></pre>
<p>この仕組みを他の売買ロジック（移動平均線のクロスなど）と組み合わせることで、エントリー精度を高められます。</p>
<h2><span id="toc11">実践サンプル②：+DI/-DIクロスで売買するEA</span></h2>
<p>ここでは、+DIと-DIのクロスをシグナルとして実際にエントリーを行うEAの完全なコードを紹介します。</p>
<h3><span id="toc12">売買ルール</span></h3>
<ul>
<li><strong>買い条件</strong>：+DIが-DIを上抜け（ゴールデンクロス）＋ ADXがしきい値以上</li>
<li><strong>売り条件</strong>：-DIが+DIを上抜け（デッドクロス）＋ ADXがしきい値以上</li>
<li>既に同方向のポジションがある場合はエントリーしない</li>
</ul>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| ADX Cross EA                                                      |
//+------------------------------------------------------------------+
#property strict

// --- 入力パラメーター ---
input int    ADX_Period    = 14;     // ADX期間
input double ADX_Threshold = 25.0;   // ADXしきい値
input double LotSize       = 0.1;    // ロットサイズ
input int    StopLossPips  = 50;     // ストップロス（pips）
input int    TakeProfitPips= 100;    // テイクプロフィット（pips）
input int    MagicNumber   = 12345;  // マジックナンバー

//+------------------------------------------------------------------+
//| pip補正値を取得する関数                                            |
//+------------------------------------------------------------------+
double PipPoint()
{
    if(Digits == 3 || Digits == 5)
        return Point * 10;
    else
        return Point;
}

//+------------------------------------------------------------------+
//| 指定方向のポジション数を数える関数                                  |
//+------------------------------------------------------------------+
int CountOrders(int orderType)
{
    int count = 0;
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
            {
                if(OrderType() == orderType)
                    count++;
            }
        }
    }
    return count;
}

//+------------------------------------------------------------------+
//| OnTick - メイン処理                                                |
//+------------------------------------------------------------------+
void OnTick()
{
    // --- 1本前（確定足）の値 ---
    double adx_1      = iADX(NULL, 0, ADX_Period, PRICE_CLOSE, MODE_MAIN,    1);
    double plusDI_1    = iADX(NULL, 0, ADX_Period, PRICE_CLOSE, MODE_PLUSDI,  1);
    double minusDI_1  = iADX(NULL, 0, ADX_Period, PRICE_CLOSE, MODE_MINUSDI, 1);

    // --- 2本前の値（クロス判定に使用） ---
    double plusDI_2    = iADX(NULL, 0, ADX_Period, PRICE_CLOSE, MODE_PLUSDI,  2);
    double minusDI_2  = iADX(NULL, 0, ADX_Period, PRICE_CLOSE, MODE_MINUSDI, 2);

    double pip = PipPoint();

    // --- 買いシグナル判定 ---
    // 2本前は +DI <= -DI だったのに、1本前で +DI > -DI になった（ゴールデンクロス）
    bool buySignal  = (plusDI_2 <= minusDI_2) &#038;&#038; (plusDI_1 > minusDI_1) && (adx_1 >= ADX_Threshold);

    // --- 売りシグナル判定 ---
    // 2本前は -DI <= +DI だったのに、1本前で -DI > +DI になった（デッドクロス）
    bool sellSignal = (minusDI_2 <= plusDI_2) &#038;&#038; (minusDI_1 > plusDI_1) && (adx_1 >= ADX_Threshold);

    // --- 買いエントリー ---
    if(buySignal && CountOrders(OP_BUY) == 0)
    {
        double sl = Ask - StopLossPips * pip;
        double tp = Ask + TakeProfitPips * pip;
        int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, sl, tp,
                               "ADX Cross Buy", MagicNumber, 0, clrBlue);
        if(ticket > 0)
            Print("買いエントリー成功 ADX=", DoubleToString(adx_1, 2),
                  " +DI=", DoubleToString(plusDI_1, 2),
                  " -DI=", DoubleToString(minusDI_1, 2));
        else
            Print("買いエントリー失敗 Error=", GetLastError());
    }

    // --- 売りエントリー ---
    if(sellSignal && CountOrders(OP_SELL) == 0)
    {
        double sl = Bid + StopLossPips * pip;
        double tp = Bid - TakeProfitPips * pip;
        int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, sl, tp,
                               "ADX Cross Sell", MagicNumber, 0, clrRed);
        if(ticket > 0)
            Print("売りエントリー成功 ADX=", DoubleToString(adx_1, 2),
                  " +DI=", DoubleToString(plusDI_1, 2),
                  " -DI=", DoubleToString(minusDI_1, 2));
        else
            Print("売りエントリー失敗 Error=", GetLastError());
    }
}
</code></pre>
<h3><span id="toc13">コードのポイント解説</span></h3>
<p><strong>クロス判定の仕組み：</strong>2本前の足と1本前の足で+DIと-DIの大小関係が逆転したかどうかで判定しています。例えば、2本前は「+DI ≤ -DI」だったのに1本前で「+DI > -DI」になっていれば、+DIが-DIを上抜けた（ゴールデンクロス）と判断します。</p>
<p><strong>pip補正（PipPoint関数）：</strong>3桁・5桁の通貨ペア（例：ドル円が110.123のように小数点3桁）では、Pointが0.001になります。pipsとして扱うにはPoint×10が必要なので、Digitsに応じて補正しています。</p>
<p><strong>重複エントリー防止：</strong>CountOrders()関数で同方向のポジションが既にあるかチェックし、重複エントリーを防いでいます。マジックナンバーで他のEAのポジションと区別している点も実用的なテクニックです。</p>
<h2><span id="toc14">iADX()を使うときの注意点</span></h2>
<h3><span id="toc15">1. 確定足の値を使おう</span></h3>
<p>shift=0で取得する値は、現在形成中の足の値なので、ティックごとに変動します。売買判定には<strong>shift=1以上</strong>（確定済みの足）の値を使うのが安定したロジックのコツです。</p>
<h3><span id="toc16">2. ADXは「方向」を示さない</span></h3>
<p>ADXのメインラインはあくまで「トレンドの強さ」だけを示します。上昇・下降の方向は+DIと-DIの位置関係で判断する必要があります。ADXが高い＝上昇トレンドではない点に注意してください。</p>
<h3><span id="toc17">3. MQL5との違い</span></h3>
<p>MQL4のiADX()は直接double値を返しますが、<strong>MQL5</strong>ではiADX()が「ハンドル」（整数値）を返し、実際の値は<code>CopyBuffer()</code>で配列にコピーして取得する仕組みに変わっています。MQL5に移行する際はコードの書き換えが必要になるので覚えておきましょう。</p>
<h2><span id="toc18">他のインジケーターとの組み合わせ</span></h2>
<p>ADXは単体でも有用ですが、他のインジケーターと組み合わせるとさらに効果的です。</p>
<h3><span id="toc19">移動平均線（MA）+ ADX</span></h3>
<p>MAのゴールデンクロス・デッドクロスをエントリーシグナルとし、ADXが25以上のときだけエントリーするフィルターとして使います。レンジ相場でのダマシを大幅に減らせます。</p>
<h3><span id="toc20">RSI + ADX</span></h3>
<p>RSIの買われすぎ・売られすぎをシグナルとしつつ、ADXが低い（レンジ相場）ときだけ逆張りエントリーする手法です。ADXが高いとき（トレンド発生時）にはRSIの逆張りを控えることで、トレンドに逆らうリスクを回避できます。</p>
<h3><span id="toc21">マルチタイムフレーム分析</span></h3>
<p>iADX()のtimeframe引数を変えれば、異なる時間足のADX値を取得できます。例えば、日足のADXでトレンドを確認し、1時間足で具体的なエントリータイミングを計る、といった使い方が可能です。</p>
<pre><code class="language-mql4">// 日足のADX値を取得
double adx_daily = iADX(NULL, PERIOD_D1, 14, PRICE_CLOSE, MODE_MAIN, 1);

// 1時間足の+DI/-DIを取得
double plusDI_H1  = iADX(NULL, PERIOD_H1, 14, PRICE_CLOSE, MODE_PLUSDI, 1);
double minusDI_H1 = iADX(NULL, PERIOD_H1, 14, PRICE_CLOSE, MODE_MINUSDI, 1);

// 日足でトレンドが出ていて、1時間足で+DI優勢なら買い
if(adx_daily >= 25 && plusDI_H1 > minusDI_H1)
{
    Print("マルチタイムフレーム分析：買い条件成立");
}
</code></pre>
<h2><span id="toc22">まとめ</span></h2>
<p>この記事では、MQL4の<strong>iADX()関数</strong>の使い方を基礎から実践まで解説しました。ポイントを振り返りましょう。</p>
<ul>
<li>ADXはトレンドの<strong>「強さ」</strong>を0〜100で数値化するインジケーター</li>
<li>iADX()関数の<strong>mode引数</strong>で、ADX本体・+DI・-DIの3つのラインを切り替えて取得する</li>
<li>ADXが25以上でトレンド発生、+DIと-DIの位置関係でトレンドの方向を判定</li>
<li>売買判定には<strong>確定足（shift=1以上）</strong>の値を使うのが基本</li>
<li>他のインジケーターの<strong>トレンドフィルター</strong>として組み合わせると効果的</li>
</ul>
<p>ADXはシンプルながら非常に強力なインジケーターです。まずは基本の値取得から試して、自分のEAにトレンドフィルターとして組み込んでみてください。レンジ相場での無駄なエントリーが減り、トレード成績の改善が期待できるはずです！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13034/%e3%80%90mql4%e3%80%91iadx%e9%96%a2%e6%95%b0%e3%81%ae%e4%bd%bf%e3%81%84%e6%96%b9%e3%82%92%e5%be%b9%e5%ba%95%e8%a7%a3%e8%aa%ac%ef%bc%81adx%e3%81%a7%e3%83%88%e3%83%ac%e3%83%b3%e3%83%89%e3%81%ae%e5%bc%b7/">【MQL4】iADX関数の使い方を徹底解説！ADXでトレンドの強さを判定するサンプルプログラム付き</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
