<?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>iATR アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/iatr/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/iatr/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 03:02:44 +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>iATR アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/iatr/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】iATR関数の使い方を徹底解説！ATR（アベレージ・トゥルー・レンジ）でボラティリティを味方につけよう</title>
		<link>https://mql-programing.com/archives/13028/%e3%80%90mql4%e3%80%91iatr%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%81atr%ef%bc%88%e3%82%a2%e3%83%99%e3%83%ac%e3%83%bc%e3%82%b8%e3%83%bb/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sat, 11 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[インジケーター関数]]></category>
		<category><![CDATA[iATR]]></category>
		<category><![CDATA[ATR]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13028</guid>

					<description><![CDATA[<p>「相場の勢いが強いのか弱いのか、数値で判断できたらいいのに…」そんな風に思ったことはありませんか？ MQL4には、ボラティリティ（価格変動の大きさ）を数値化できる便利な関数iATRが用意されています。ATR（Averag [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13028/%e3%80%90mql4%e3%80%91iatr%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%81atr%ef%bc%88%e3%82%a2%e3%83%99%e3%83%ac%e3%83%bc%e3%82%b8%e3%83%bb/">【MQL4】iATR関数の使い方を徹底解説！ATR（アベレージ・トゥルー・レンジ）でボラティリティを味方につけよう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>「相場の勢いが強いのか弱いのか、数値で判断できたらいいのに…」そんな風に思ったことはありませんか？</p>
<p>MQL4には、ボラティリティ（価格変動の大きさ）を数値化できる便利な関数<strong>iATR</strong>が用意されています。ATR（Average True Range：アベレージ・トゥルー・レンジ）は、多くのプロトレーダーも活用している指標で、ストップロスの設定やエントリーフィルターなど、EA開発で大活躍します。</p>
<p>この記事では、iATR関数の基本的な使い方から、実践的なEAへの組み込み方まで、サンプルコード付きで徹底解説します！</p>
<h2><span id="toc1">ATR（アベレージ・トゥルー・レンジ）とは？</span></h2>
<p>ATRを理解するには、まず<strong>TR（トゥルー・レンジ）</strong>を知る必要があります。TRは「そのローソク足の本当の値動き幅」を表すもので、次の3つの値のうち最も大きいものを採用します。</p>
<ul>
<li><strong>当日の高値 − 当日の安値</strong>（通常の値幅）</li>
<li><strong>当日の高値 − 前日の終値</strong>の絶対値（上方向へのギャップを考慮）</li>
<li><strong>当日の安値 − 前日の終値</strong>の絶対値（下方向へのギャップを考慮）</li>
</ul>
<p>ATRは、このTRを指定した期間で<strong>平均化</strong>したものです。一般的には14期間がよく使われます。</p>
<p>ATRの値が大きいほど「ボラティリティが高い（値動きが激しい）」、小さいほど「ボラティリティが低い（値動きが穏やか）」と判断できます。なお、ATRはあくまで値動きの「大きさ」を示すものであり、方向（上昇・下降）は示しません。</p>
<h2><span id="toc2">iATR関数の基本構文</span></h2>
<p>MQL4でATRの値を取得するには、<strong>iATR関数</strong>を使います。基本構文は以下の通りです。</p>
<pre><code class="language-mql4">double iATR(
    string symbol,      // 通貨ペア名
    int    timeframe,   // 時間足
    int    period,      // 平均期間
    int    shift        // シフト（何本前のバーか）
);</code></pre>
<p>各引数の詳細を見ていきましょう。</p>
<table>
<thead>
<tr>
<th>引数</th>
<th>型</th>
<th>説明</th>
<th>例</th>
</tr>
</thead>
<tbody>
<tr>
<td>symbol</td>
<td>string</td>
<td>対象の通貨ペア名。NULL を指定すると現在のチャートの通貨ペアになります。</td>
<td>NULL, &#8220;USDJPY&#8221;</td>
</tr>
<tr>
<td>timeframe</td>
<td>int</td>
<td>時間足を指定します。0 を指定すると現在のチャートの時間足になります。</td>
<td>0, PERIOD_H1, PERIOD_D1</td>
</tr>
<tr>
<td>period</td>
<td>int</td>
<td>ATRを計算する平均期間。一般的には14が使われます。</td>
<td>14, 20</td>
</tr>
<tr>
<td>shift</td>
<td>int</td>
<td>何本前のバーの値を取得するか。0は現在の未確定バー、1は直近の確定バーです。</td>
<td>0, 1</td>
</tr>
</tbody>
</table>
<h2><span id="toc3">基本的な使い方 ― ATR値を取得してみよう</span></h2>
<p>まずは最もシンプルな使い方です。現在のチャートで14期間ATRの値を取得し、エキスパートログに出力してみましょう。</p>
<pre><code class="language-mql4">void OnTick()
{
    // 直近の確定バー（shift=1）のATR値を取得
    double atrValue = iATR(NULL, 0, 14, 1);

    // ログに出力
    Print("現在のATR(14) = ", DoubleToString(atrValue, 5));
}</code></pre>
<p>ここで重要なポイントは<strong>shift=1</strong>を使っていることです。shift=0だと現在形成中のバー（まだ確定していない）の値を参照するため、ティックごとに値が変動してしまいます。EAのロジックでは、基本的にshift=1（直近の確定バー）を使うのが安定した判断につながります。</p>
<h2><span id="toc4">実践サンプル①：ATRベースの動的ストップロス＆テイクプロフィット</span></h2>
<p>ATRの最も人気のある活用法の一つが、<strong>ボラティリティに応じてSL（ストップロス）とTP（テイクプロフィット）を動的に変える</strong>方法です。相場が激しく動いているときは広めに、穏やかなときは狭めに設定できます。</p>
<pre><code class="language-mql4">// --- 入力パラメータ ---
input int    ATR_Period    = 14;      // ATR期間
input double SL_Multiplier = 1.5;    // SLに使うATRの倍率
input double TP_Multiplier = 2.0;    // TPに使うATRの倍率
input double LotSize       = 0.1;    // ロットサイズ

void OnTick()
{
    // 既にポジションがあれば何もしない（簡略化のため）
    if(OrdersTotal() > 0) return;

    // ATR値を取得（確定バーを使用）
    double atr = iATR(NULL, 0, ATR_Period, 1);

    // ATRが0の場合は処理しない
    if(atr <= 0) return;

    // 動的なSL・TPを計算
    double sl_distance = atr * SL_Multiplier;
    double tp_distance = atr * TP_Multiplier;

    // 現在の価格を取得
    double askPrice = Ask;
    double bidPrice = Bid;

    // 買い注文の例
    double sl = askPrice - sl_distance;
    double tp = askPrice + tp_distance;

    // 小数点桁数を通貨ペアに合わせて丸める
    sl = NormalizeDouble(sl, Digits);
    tp = NormalizeDouble(tp, Digits);

    int ticket = OrderSend(
        Symbol(), OP_BUY, LotSize,
        askPrice, 3, sl, tp,
        "ATR-based SL/TP", 0, 0, clrBlue
    );

    if(ticket > 0)
    {
        Print("注文成功！ SL=", DoubleToString(sl, Digits),
              " TP=", DoubleToString(tp, Digits),
              " ATR=", DoubleToString(atr, 5));
    }
    else
    {
        Print("注文失敗: エラーコード=", GetLastError());
    }
}</code></pre>
<p>この例では、ATRの1.5倍をストップロスに、2.0倍をテイクプロフィットに設定しています。こうすることで、ボラティリティが高い相場では自然とSL/TP幅が広がり、低い相場では狭まります。固定pipsのSL/TPと比べて、相場環境に柔軟に対応できるのが大きなメリットです。</p>
<h2><span id="toc5">実践サンプル②：ATRでボラティリティフィルターを作る</span></h2>
<p>もう一つの活用法が、<strong>ボラティリティフィルター</strong>です。「ボラティリティが一定以上あるときだけトレードする」というフィルターを作ることで、値動きが小さすぎるレンジ相場でのムダなエントリーを避けられます。</p>
<pre><code class="language-mql4">// ボラティリティが十分かどうかを判定する関数
bool IsVolatilityEnough(int atrPeriod, int checkBars, double threshold)
{
    // 現在のATR
    double currentATR = iATR(NULL, 0, atrPeriod, 1);

    // 過去のATRの平均を計算
    double sumATR = 0;
    for(int i = 2; i <= checkBars + 1; i++)
    {
        sumATR += iATR(NULL, 0, atrPeriod, i);
    }
    double avgATR = sumATR / checkBars;

    // 平均に対する比率で判定
    if(avgATR <= 0) return false;

    double ratio = currentATR / avgATR;

    // 比率がしきい値以上ならボラティリティ十分と判定
    if(ratio >= threshold)
    {
        Print("ボラティリティOK: 現在ATR=", DoubleToString(currentATR, 5),
              " 平均ATR=", DoubleToString(avgATR, 5),
              " 比率=", DoubleToString(ratio, 2));
        return true;
    }

    return false;
}

// 使用例
void OnTick()
{
    // 過去20本のATR平均と比較して、0.8倍以上なら十分と判定
    if(!IsVolatilityEnough(14, 20, 0.8))
    {
        // ボラティリティが低いのでトレードしない
        return;
    }

    // ここにエントリーロジックを記述
    // ...
}</code></pre>
<p>この関数は、直近のATRが過去の平均ATRに対してどの程度の比率かを計算し、指定したしきい値以上であれば「ボラティリティ十分」と判定します。レンジ相場で無駄にエントリーしてしまう問題を軽減できる、実用的なフィルターです。</p>
<h2><span id="toc6">iATR関数を使う際の注意点</span></h2>
<h3><span id="toc7">① shift=1を基本にしよう</span></h3>
<p>先ほども触れましたが、EA内でATR値をロジック判定に使うときは<strong>shift=1</strong>（直近の確定バー）を使いましょう。shift=0はティックごとに値が変わるため、バックテストとリアルトレードで結果が乖離する原因になります。</p>
<h3><span id="toc8">② ATR値をpipsに換算する方法</span></h3>
<p>ATRの戻り値は「価格の値幅」です。pipsに換算したい場合は、以下のようにします。</p>
<pre><code class="language-mql4">double atr = iATR(NULL, 0, 14, 1);

// pipsに換算（3桁/5桁ブローカー対応）
double atrPips;
if(Digits == 3 || Digits == 5)
    atrPips = atr / (Point * 10);
else
    atrPips = atr / Point;

Print("ATR = ", DoubleToString(atrPips, 1), " pips");</code></pre>
<p>多くのブローカーは5桁（例：USDJPY = 110.123）または3桁（例：USDJPY = 110.12の場合もあり）の価格表示を使っています。Digitsの値を確認してpips換算することで、どのブローカーでも正しく動作するコードになります。</p>
<h3><span id="toc9">③ マルチタイムフレームでの活用</span></h3>
<p>iATR関数のtimeframe引数を使えば、現在のチャートとは異なる時間足のATRを取得できます。</p>
<pre><code class="language-mql4">// 日足のATRを5分足チャート上で取得
double dailyATR = iATR(NULL, PERIOD_D1, 14, 1);

// 4時間足のATRを取得
double h4ATR = iATR(NULL, PERIOD_H4, 14, 1);

Print("日足ATR=", DoubleToString(dailyATR, 5),
      " 4時間足ATR=", DoubleToString(h4ATR, 5));</code></pre>
<p>例えば、5分足でスキャルピングEAを作りつつ、日足のATRでその日全体のボラティリティを確認する、という使い方ができます。上位足のボラティリティ情報を加味することで、より精度の高いトレード判断が可能になります。</p>
<h2><span id="toc10">まとめ</span></h2>
<p>この記事では、MQL4の<strong>iATR関数</strong>を使ってATR（アベレージ・トゥルー・レンジ）を取得・活用する方法を解説しました。最後にポイントを振り返りましょう。</p>
<ul>
<li><strong>ATR</strong>はボラティリティ（値動きの大きさ）を数値化した指標で、方向性は示さない</li>
<li><strong>iATR関数</strong>は4つの引数（symbol, timeframe, period, shift）で手軽にATR値を取得できる</li>
<li>EAのロジックでは<strong>shift=1</strong>（確定バー）を使うのが基本</li>
<li><strong>動的SL/TP</strong>に活用すれば、相場のボラティリティに応じた柔軟なリスク管理が可能</li>
<li><strong>ボラティリティフィルター</strong>として使えば、レンジ相場でのムダなエントリーを回避できる</li>
<li>pips換算やマルチタイムフレーム対応も忘れずに実装しよう</li>
</ul>
<p>ATRは地味に見えるかもしれませんが、EA開発においては非常に汎用性の高い指標です。ストップロス、テイクプロフィット、ロットサイズの計算、エントリーフィルターなど、さまざまな場面で活躍します。ぜひ自分のEAに組み込んで、ボラティリティを味方につけてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13028/%e3%80%90mql4%e3%80%91iatr%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%81atr%ef%bc%88%e3%82%a2%e3%83%99%e3%83%ac%e3%83%bc%e3%82%b8%e3%83%bb/">【MQL4】iATR関数の使い方を徹底解説！ATR（アベレージ・トゥルー・レンジ）でボラティリティを味方につけよう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
