<?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>MACD アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/macd/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/macd/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 02:47:38 +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>MACD アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/macd/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】iMACD関数の使い方を徹底解説！MACDの値を取得してEAに組み込もう【サンプルコード付き】</title>
		<link>https://mql-programing.com/archives/13019/%e3%80%90mql4%e3%80%91imacd%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%81macd%e3%81%ae%e5%80%a4%e3%82%92%e5%8f%96%e5%be%97%e3%81%97/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 08 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[関数]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[iMACD]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[インジケーター関数]]></category>
		<category><![CDATA[MACD]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13019</guid>

					<description><![CDATA[<p>「MACDのクロスで自動売買したい！」──テクニカル分析の定番指標MACDをEAに組み込むなら、まず覚えるべきなのがiMACD関数です。 この記事では、MQL4のiMACD関数の書式・引数の意味から、ゴールデンクロス・デ [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13019/%e3%80%90mql4%e3%80%91imacd%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%81macd%e3%81%ae%e5%80%a4%e3%82%92%e5%8f%96%e5%be%97%e3%81%97/">【MQL4】iMACD関数の使い方を徹底解説！MACDの値を取得してEAに組み込もう【サンプルコード付き】</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>「MACDのクロスで自動売買したい！」──テクニカル分析の定番指標MACDをEAに組み込むなら、まず覚えるべきなのが<strong>iMACD関数</strong>です。</p>
<p>この記事では、MQL4の<strong>iMACD関数</strong>の書式・引数の意味から、ゴールデンクロス・デッドクロスの判定ロジック、そして実際に動くEAのサンプルコードまで、ステップバイステップで解説します。初心者の方でも、この記事を読み終える頃にはMACDを使ったEAの原型が作れるようになるはずです。</p>
<h2><span id="toc1">MACDのおさらい</span></h2>
<p>コードの話に入る前に、MACD（Moving Average Convergence Divergence）の基本をおさらいしておきましょう。MACDは以下の<strong>3つの要素</strong>で構成されます。</p>
<h3><span id="toc2">MACDの3つの構成要素</span></h3>
<ul>
<li><strong>メインライン（MACDライン）</strong>：短期EMA（通常12期間）と長期EMA（通常26期間）の差</li>
<li><strong>シグナルライン</strong>：メインラインのEMA（通常9期間）</li>
<li><strong>ヒストグラム</strong>：メインライン − シグナルラインの差をバーで表示したもの</li>
</ul>
<h3><span id="toc3">基本的な売買シグナル</span></h3>
<ul>
<li><strong>ゴールデンクロス（買いシグナル）</strong>：メインラインがシグナルラインを下から上に抜ける</li>
<li><strong>デッドクロス（売りシグナル）</strong>：メインラインがシグナルラインを上から下に抜ける</li>
</ul>
<p>このクロスをプログラムで検出するのが、MACD系EAの基本中の基本です。</p>
<h2><span id="toc4">iMACD関数の書式と引数</span></h2>
<p>MQL4でMACDの値を取得するには、<strong>iMACD関数</strong>を使います。書式は以下のとおりです。</p>
<pre><code class="language-mql4">double iMACD(
   string       symbol,           // 通貨ペア名
   int          timeframe,        // 時間足
   int          fast_ema_period,  // 短期EMAの期間
   int          slow_ema_period,  // 長期EMAの期間
   int          signal_period,    // シグナルラインの期間
   int          applied_price,    // 適用価格
   int          mode,             // 取得するライン
   int          shift             // シフト（何本前のバーか）
);</code></pre>
<h3><span id="toc5">各引数の詳細</span></h3>
<table>
<thead>
<tr>
<th>引数</th>
<th>説明</th>
<th>よく使う値</th>
</tr>
</thead>
<tbody>
<tr>
<td>symbol</td>
<td>通貨ペア名。現在のチャートならNULL</td>
<td>NULL, Symbol()</td>
</tr>
<tr>
<td>timeframe</td>
<td>時間足。0で現在のチャートの時間足</td>
<td>0, PERIOD_H1 など</td>
</tr>
<tr>
<td>fast_ema_period</td>
<td>短期EMAの期間</td>
<td>12</td>
</tr>
<tr>
<td>slow_ema_period</td>
<td>長期EMAの期間</td>
<td>26</td>
</tr>
<tr>
<td>signal_period</td>
<td>シグナルラインの期間</td>
<td>9</td>
</tr>
<tr>
<td>applied_price</td>
<td>計算に使う価格の種類</td>
<td>PRICE_CLOSE</td>
</tr>
<tr>
<td>mode</td>
<td>取得するライン（後述）</td>
<td>MODE_MAIN, MODE_SIGNAL</td>
</tr>
<tr>
<td>shift</td>
<td>何本前のバーの値を取得するか</td>
<td>0（現在）, 1（1本前）</td>
</tr>
</tbody>
</table>
<h3><span id="toc6">modeパラメータの値</span></h3>
<p><strong>mode</strong>には以下の2つの定数を指定できます。</p>
<ul>
<li><strong>MODE_MAIN（0）</strong>：MACDメインラインの値を返す</li>
<li><strong>MODE_SIGNAL（1）</strong>：シグナルラインの値を返す</li>
</ul>
<p>なお、ヒストグラムの値は直接取得する定数がありません。<strong>メインライン − シグナルライン</strong>を自分で計算して求めます。</p>
<h3><span id="toc7">適用価格（applied_price）の定数一覧</span></h3>
<table>
<thead>
<tr>
<th>定数名</th>
<th>値</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>PRICE_CLOSE</td>
<td>0</td>
<td>終値</td>
</tr>
<tr>
<td>PRICE_OPEN</td>
<td>1</td>
<td>始値</td>
</tr>
<tr>
<td>PRICE_HIGH</td>
<td>2</td>
<td>高値</td>
</tr>
<tr>
<td>PRICE_LOW</td>
<td>3</td>
<td>安値</td>
</tr>
<tr>
<td>PRICE_MEDIAN</td>
<td>4</td>
<td>中央値 (High+Low)/2</td>
</tr>
<tr>
<td>PRICE_TYPICAL</td>
<td>5</td>
<td>代表値 (High+Low+Close)/3</td>
</tr>
<tr>
<td>PRICE_WEIGHTED</td>
<td>6</td>
<td>加重終値 (High+Low+Close+Close)/4</td>
</tr>
</tbody>
</table>
<p>特別な理由がなければ、<strong>PRICE_CLOSE（終値）</strong>を使うのが一般的です。</p>
<h2><span id="toc8">基本的な使い方</span></h2>
<p>まずは最もシンプルな使い方を見てみましょう。現在のチャートでMACDのメインラインとシグナルラインの値を取得するコードです。</p>
<pre><code class="language-mql4">void OnTick()
{
   // 1本前の確定バーからMACDメインラインの値を取得
   double macdMain = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
   
   // 1本前の確定バーからシグナルラインの値を取得
   double macdSignal = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1);
   
   // ヒストグラムの値を計算
   double histogram = macdMain - macdSignal;
   
   // ログに出力して確認
   Print("MACD Main: ", macdMain, " Signal: ", macdSignal, " Histogram: ", histogram);
}</code></pre>
<p><strong>ポイント：</strong>shiftに<strong>1</strong>を指定しているのは、「1本前の確定したバー」の値を取得するためです。shift=0は現在形成中のバーなので値が変動します。売買判定にはshift=1以降の確定した値を使うのが基本です。</p>
<h2><span id="toc9">MACDクロス判定ロジック</span></h2>
<p>MACDのゴールデンクロス・デッドクロスを判定するには、<strong>1本前と2本前</strong>のバーの値を比較します。</p>
<pre><code class="language-mql4">// --- 1本前のバー（直近の確定バー）---
double macdMain1   = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);
double macdSignal1 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1);

// --- 2本前のバー ---
double macdMain2   = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 2);
double macdSignal2 = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 2);

// ゴールデンクロス判定：2本前ではメインがシグナル以下 → 1本前でメインがシグナルを超えた
bool goldenCross = (macdMain2 <= macdSignal2) &#038;&#038; (macdMain1 > macdSignal1);

// デッドクロス判定：2本前ではメインがシグナル以上 → 1本前でメインがシグナルを下回った
bool deadCross = (macdMain2 >= macdSignal2) && (macdMain1 < macdSignal1);</code></pre>
<p>この「2時点を比較してクロスを検出する」パターンは、移動平均線やRSIなど他のインジケーターでも応用できる重要なテクニックです。</p>
<h2><span id="toc10">実践！MACDクロスEAのサンプルコード</span></h2>
<p>ここからは、MACDのゴールデンクロスで買い、デッドクロスで売り（ドテン方式）のEAを作ってみましょう。実際にMT4で動作する完全なコードです。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//|                                              MACD_Cross_EA.mq4   |
//|                        MACDクロスで売買するシンプルなEA            |
//+------------------------------------------------------------------+
#property strict

// --- 入力パラメータ ---
input int    FastEMA        = 12;          // 短期EMA期間
input int    SlowEMA        = 26;          // 長期EMA期間
input int    SignalPeriod    = 9;           // シグナル期間
input double LotSize        = 0.1;         // ロット数
input int    MagicNumber    = 20240101;    // マジックナンバー
input int    Slippage       = 3;           // スリッページ（ポイント）

//+------------------------------------------------------------------+
//| 新しいバーが形成されたか判定する関数                                |
//+------------------------------------------------------------------+
bool IsNewBar()
{
   static datetime lastBarTime = 0;
   datetime currentBarTime = iTime(NULL, 0, 0);
   
   if(lastBarTime != currentBarTime)
   {
      lastBarTime = currentBarTime;
      return true;
   }
   return false;
}

//+------------------------------------------------------------------+
//| 自分のEAが持つポジションの種類を返す関数                           |
//| 戻り値: 1=買いポジあり, -1=売りポジあり, 0=ポジなし                |
//+------------------------------------------------------------------+
int GetMyPosition()
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            if(OrderType() == OP_BUY)  return 1;
            if(OrderType() == OP_SELL) return -1;
         }
      }
   }
   return 0;
}

//+------------------------------------------------------------------+
//| 自分のEAが持つポジションを全決済する関数                           |
//+------------------------------------------------------------------+
void CloseMyPositions(int posType)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
         {
            if(posType == 1 && OrderType() == OP_BUY)
               OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clrNone);
            if(posType == -1 && OrderType() == OP_SELL)
               OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrNone);
         }
      }
   }
}

//+------------------------------------------------------------------+
//| メインのティック処理                                               |
//+------------------------------------------------------------------+
void OnTick()
{
   // 新しいバーが形成されたときだけ処理する
   if(!IsNewBar()) return;
   
   // --- MACDの値を取得 ---
   double macdMain1   = iMACD(NULL, 0, FastEMA, SlowEMA, SignalPeriod, PRICE_CLOSE, MODE_MAIN, 1);
   double macdSignal1 = iMACD(NULL, 0, FastEMA, SlowEMA, SignalPeriod, PRICE_CLOSE, MODE_SIGNAL, 1);
   double macdMain2   = iMACD(NULL, 0, FastEMA, SlowEMA, SignalPeriod, PRICE_CLOSE, MODE_MAIN, 2);
   double macdSignal2 = iMACD(NULL, 0, FastEMA, SlowEMA, SignalPeriod, PRICE_CLOSE, MODE_SIGNAL, 2);
   
   // --- クロス判定 ---
   bool goldenCross = (macdMain2 <= macdSignal2) &#038;&#038; (macdMain1 > macdSignal1);
   bool deadCross   = (macdMain2 >= macdSignal2) && (macdMain1 < macdSignal1);
   
   // --- 現在のポジション状態を取得 ---
   int myPos = GetMyPosition();
   
   // --- ゴールデンクロス → 買いエントリー ---
   if(goldenCross)
   {
      // 売りポジションがあれば先に決済
      if(myPos == -1) CloseMyPositions(-1);
      
      // 買いポジションがなければ新規注文
      if(GetMyPosition() != 1)
      {
         int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, 0, 0,
                                "MACD GC Buy", MagicNumber, 0, clrBlue);
         if(ticket < 0)
            Print("Buy OrderSend Error: ", GetLastError());
         else
            Print("Buy Order Success! Ticket: ", ticket);
      }
   }
   
   // --- デッドクロス → 売りエントリー ---
   if(deadCross)
   {
      // 買いポジションがあれば先に決済
      if(myPos == 1) CloseMyPositions(1);
      
      // 売りポジションがなければ新規注文
      if(GetMyPosition() != -1)
      {
         int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, 0, 0,
                                "MACD DC Sell", MagicNumber, 0, clrRed);
         if(ticket < 0)
            Print("Sell OrderSend Error: ", GetLastError());
         else
            Print("Sell Order Success! Ticket: ", ticket);
      }
   }
}</code></pre>
<h3><span id="toc11">サンプルEAのポイント解説</span></h3>
<ul>
<li><strong>IsNewBar関数</strong>：新しいバーが形成されたときだけ処理を実行します。これにより無駄な重複注文を防ぎます。</li>
<li><strong>MagicNumber</strong>：このEAが出した注文を識別するための番号です。他のEAや手動注文と区別できます。</li>
<li><strong>ドテン方式</strong>：ゴールデンクロスで買いに転換、デッドクロスで売りに転換する仕組みです。反対ポジションを先に決済してから新規注文を出します。</li>
<li><strong>GetMyPosition関数</strong>：自分のEAが持つポジションの状態を調べる関数です。ポジション管理はEA開発で必須のテクニックです。</li>
</ul>
<h2><span id="toc12">応用：ゼロラインフィルターでダマシを減らす</span></h2>
<p>MACDクロスだけだと「ダマシ」（偽のシグナル）が多くなりがちです。精度を上げるテクニックとして、<strong>ゼロラインフィルター</strong>があります。</p>
<p>考え方はシンプルです。</p>
<ul>
<li><strong>買いシグナル</strong>：ゴールデンクロス かつ MACDメインラインが<strong>ゼロより下</strong>で発生したとき（底からの反転を狙う）</li>
<li><strong>売りシグナル</strong>：デッドクロス かつ MACDメインラインが<strong>ゼロより上</strong>で発生したとき（天井からの反転を狙う）</li>
</ul>
<p>コードに組み込むなら、クロス判定の条件に1行追加するだけです。</p>
<pre><code class="language-mql4">// ゼロラインフィルター付きのゴールデンクロス判定
bool filteredGoldenCross = goldenCross && (macdMain1 < 0);

// ゼロラインフィルター付きのデッドクロス判定
bool filteredDeadCross = deadCross &#038;&#038; (macdMain1 > 0);</code></pre>
<p>たった1行の条件追加ですが、トレンドの初動を捉えやすくなり、レンジ相場でのダマシを軽減できます。バックテストで効果を確認してみてください。</p>
<h2><span id="toc13">注意点・よくあるつまずきポイント</span></h2>
<h3><span id="toc14">1. MT4とMT5でMACDの表示が異なる</span></h3>
<p>MT4のMACDインジケーターでは、<strong>メインラインがヒストグラム（バー）</strong>で表示され、シグナルラインが点線で表示されます。一方MT5では、メインラインもシグナルラインも<strong>ライン</strong>で表示され、別途ヒストグラムが描画されます。見た目は違いますが、iMACD関数で取得できる値の意味は同じです。</p>
<h3><span id="toc15">2. ヒストグラムは自分で計算する</span></h3>
<p>iMACD関数にはヒストグラムを直接取得するモードがありません。ヒストグラムが必要な場合は、以下のように計算してください。</p>
<pre><code class="language-mql4">double histogram = iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1)
                 - iMACD(NULL, 0, 12, 26, 9, PRICE_CLOSE, MODE_SIGNAL, 1);</code></pre>
<h3><span id="toc16">3. マルチタイムフレーム分析に使える</span></h3>
<p>iMACD関数の第2引数（timeframe）を変えれば、現在のチャートと違う時間足のMACDを取得できます。例えば、5分足チャート上で1時間足のMACDを確認してフィルターに使う、といった活用が可能です。</p>
<pre><code class="language-mql4">// 1時間足のMACDメインラインを取得
double macdH1 = iMACD(NULL, PERIOD_H1, 12, 26, 9, PRICE_CLOSE, MODE_MAIN, 1);</code></pre>
<h3><span id="toc17">4. 引数の順番に注意</span></h3>
<p>iMACD関数は引数が8つもあるため、順番を間違えやすいです。特に<strong>mode</strong>と<strong>shift</strong>を逆にするミスはよくあります。迷ったら公式リファレンスで確認する習慣をつけましょう。</p>
<h2><span id="toc18">まとめ</span></h2>
<p>この記事では、MQL4の<strong>iMACD関数</strong>について以下のポイントを解説しました。</p>
<ul>
<li>iMACD関数は<strong>8つの引数</strong>を持ち、MACDのメインラインとシグナルラインの値を取得できる</li>
<li>クロス判定は<strong>shift=1とshift=2</strong>の値を比較して行う</li>
<li>EA開発では<strong>新規バー判定</strong>・<strong>マジックナンバー管理</strong>・<strong>ポジション管理関数</strong>が重要</li>
<li><strong>ゼロラインフィルター</strong>を追加するだけでダマシを軽減できる</li>
<li>MT4とMT5でMACDの<strong>表示方法が異なる</strong>点に注意</li>
</ul>
<p>今回のサンプルEAはシンプルな構成ですが、ストップロスやテイクプロフィット、トレーリングストップなどを追加していくことで、より実践的なEAに育てていくことができます。まずはバックテストで動作を確認し、少しずつカスタマイズしてみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13019/%e3%80%90mql4%e3%80%91imacd%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%81macd%e3%81%ae%e5%80%a4%e3%82%92%e5%8f%96%e5%be%97%e3%81%97/">【MQL4】iMACD関数の使い方を徹底解説！MACDの値を取得してEAに組み込もう【サンプルコード付き】</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
