<?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>iMomentum アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/imomentum/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/imomentum/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 03:28:01 +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>iMomentum アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/imomentum/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4入門】iMomentum関数の使い方を徹底解説！モメンタムで相場の勢いを判定するEAを作ろう</title>
		<link>https://mql-programing.com/archives/13037/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91imomentum%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%81%e3%83%a2%e3%83%a1%e3%83%b3%e3%82%bf/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Tue, 14 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[テクニカル指標]]></category>
		<category><![CDATA[EA自動売買]]></category>
		<category><![CDATA[iMomentum]]></category>
		<category><![CDATA[モメンタム]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13037</guid>

					<description><![CDATA[<p>「相場の勢いが強いのか弱いのか、数値で判断できたらいいのに…」と思ったことはありませんか？そんなときに役立つのがモメンタム（Momentum）というテクニカル指標です。 MQL4には、モメンタムの値を簡単に取得できるiM [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13037/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91imomentum%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%81%e3%83%a2%e3%83%a1%e3%83%b3%e3%82%bf/">【MQL4入門】iMomentum関数の使い方を徹底解説！モメンタムで相場の勢いを判定するEAを作ろう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>「相場の勢いが強いのか弱いのか、数値で判断できたらいいのに…」と思ったことはありませんか？そんなときに役立つのが<strong>モメンタム（Momentum）</strong>というテクニカル指標です。</p>
<p>MQL4には、モメンタムの値を簡単に取得できる<strong>iMomentum関数</strong>が用意されています。この記事では、iMomentum関数の基本的な使い方から、実際にコピペで動くEAサンプルまで、初心者の方にもわかりやすく徹底解説します。</p>
<h2><span id="toc1">モメンタムとは？相場の「勢い」を測る指標</span></h2>
<p>モメンタム（Momentum）は、現在の価格と過去の価格の差を見ることで、<strong>相場の勢い（速度）</strong>を測るテクニカル指標です。MetaTraderのモメンタムは、差ではなく比率（パーセンテージ）で表現されます。</p>
<h3><span id="toc2">計算式</span></h3>
<p>MetaTraderにおけるモメンタムの計算式は以下のとおりです。</p>
<pre><code class="language-mql5">Momentum = (現在の終値 ÷ N期間前の終値) × 100
</code></pre>
<p>たとえば期間を14に設定した場合、現在の終値と14本前の終値を比較します。</p>
<h3><span id="toc3">100ラインの見方</span></h3>
<p>モメンタムの基準値は<strong>100</strong>です。以下のように判断します。</p>
<ul>
<li><strong>100より上</strong>：現在の価格がN期間前より高い → 上昇の勢いがある</li>
<li><strong>100より下</strong>：現在の価格がN期間前より低い → 下降の勢いがある</li>
<li><strong>100ちょうど</strong>：N期間前と同じ価格 → 勢いがない</li>
</ul>
<p>つまり、モメンタムが100ラインを上抜けたら「上昇の勢いが出てきた」、下抜けたら「下降の勢いが出てきた」と判断できるわけです。</p>
<h2><span id="toc4">iMomentum関数の構文と引数</span></h2>
<p>MQL4でモメンタムの値を取得するには、<strong>iMomentum関数</strong>を使います。構文は以下のとおりです。</p>
<pre><code class="language-mql4">double iMomentum(
   string       symbol,          // 通貨ペア名
   int          timeframe,       // 時間軸
   int          mom_period,      // モメンタムの期間
   int          applied_price,   // 適用価格
   int          shift            // シフト（何本前のバーか）
);
</code></pre>
<p>それぞれの引数を詳しく見ていきましょう。</p>
<h3><span id="toc5">第1引数：symbol（通貨ペア名）</span></h3>
<p>モメンタムを計算する通貨ペアを文字列で指定します。現在のチャートの通貨ペアを使う場合は、<code>NULL</code> または <code>Symbol()</code> を指定します。</p>
<h3><span id="toc6">第2引数：timeframe（時間軸）</span></h3>
<p>どの時間軸のデータを使うかを指定します。現在のチャートの時間軸を使う場合は <code>0</code> または <code>PERIOD_CURRENT</code> を指定します。主な定数は以下のとおりです。</p>
<ul>
<li><code>PERIOD_M1</code>：1分足</li>
<li><code>PERIOD_M5</code>：5分足</li>
<li><code>PERIOD_M15</code>：15分足</li>
<li><code>PERIOD_M30</code>：30分足</li>
<li><code>PERIOD_H1</code>：1時間足</li>
<li><code>PERIOD_H4</code>：4時間足</li>
<li><code>PERIOD_D1</code>：日足</li>
<li><code>PERIOD_W1</code>：週足</li>
</ul>
<h3><span id="toc7">第3引数：mom_period（期間）</span></h3>
<p>モメンタムの計算期間です。一般的には<strong>14</strong>がよく使われます。値を小さくすると敏感に反応し、大きくすると滑らかになります。</p>
<h3><span id="toc8">第4引数：applied_price（適用価格）</span></h3>
<p>計算に使う価格の種類を指定します。通常は終値（<code>PRICE_CLOSE</code>）を使います。</p>
<ul>
<li><code>PRICE_CLOSE</code>（0）：終値</li>
<li><code>PRICE_OPEN</code>（1）：始値</li>
<li><code>PRICE_HIGH</code>（2）：高値</li>
<li><code>PRICE_LOW</code>（3）：安値</li>
<li><code>PRICE_MEDIAN</code>（4）：中央値（(高値+安値)÷2）</li>
<li><code>PRICE_TYPICAL</code>（5）：典型価格（(高値+安値+終値)÷3）</li>
<li><code>PRICE_WEIGHTED</code>（6）：加重終値（(高値+安値+終値+終値)÷4）</li>
</ul>
<h3><span id="toc9">第5引数：shift（シフト）</span></h3>
<p>何本前のバーの値を取得するかを指定します。<code>0</code>で現在のバー、<code>1</code>で1本前のバーです。<strong>確定した値を使いたい場合は1以上を指定</strong>するのが基本です。</p>
<h2><span id="toc10">基本的な使い方 ― 値を取得してログに出力する</span></h2>
<p>まずは最もシンプルな例として、モメンタムの値を取得してエキスパートログに出力するコードを見てみましょう。</p>
<pre><code class="language-mql4">void OnTick()
{
   // 現在のバーのモメンタム値を取得（期間14、終値ベース）
   double mom_current = iMomentum(NULL, 0, 14, PRICE_CLOSE, 0);

   // 1本前のバーのモメンタム値を取得
   double mom_prev = iMomentum(NULL, 0, 14, PRICE_CLOSE, 1);

   // ログに出力
   Print("現在のモメンタム: ", mom_current, " | 1本前: ", mom_prev);

   // 100ラインとの比較
   if(mom_current > 100.0)
   {
      Print("上昇の勢いあり");
   }
   else if(mom_current < 100.0)
   {
      Print("下降の勢いあり");
   }
   else
   {
      Print("勢いなし（ニュートラル）");
   }
}
</code></pre>
<p>このコードをEAとしてコンパイルしてチャートにセットすれば、ティックごとにモメンタムの値がログに表示されます。まずはこの基本形を理解しておきましょう。</p>
<h2><span id="toc11">実践サンプル①：100ラインクロスでエントリーするEA</span></h2>
<p>ここからが本番です。モメンタムが100ラインを上抜けたら買い、下抜けたら売りという、シンプルなEAを作ってみましょう。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| Momentum Cross EA                                                 |
//+------------------------------------------------------------------+
#property strict

// 入力パラメータ
input int    MomPeriod   = 14;       // モメンタム期間
input double LotSize     = 0.01;     // ロットサイズ
input int    Slippage    = 3;        // スリッページ
input int    StopLoss    = 100;      // ストップロス（ポイント）
input int    TakeProfit  = 200;      // テイクプロフィット（ポイント）
input int    MagicNumber = 12345;    // マジックナンバー

//+------------------------------------------------------------------+
//| Expert tick function                                              |
//+------------------------------------------------------------------+
void OnTick()
{
   // 新しいバーが確定したときだけ処理する
   static datetime lastBarTime = 0;
   if(Time[0] == lastBarTime) return;
   lastBarTime = Time[0];

   // モメンタム値を取得（確定バーを使うためshift=1と2）
   double mom1 = iMomentum(NULL, 0, MomPeriod, PRICE_CLOSE, 1);
   double mom2 = iMomentum(NULL, 0, MomPeriod, PRICE_CLOSE, 2);

   // 現在のポジション数を確認
   int buyCount  = 0;
   int sellCount = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderSymbol() != Symbol()) continue;
      if(OrderMagicNumber() != MagicNumber) continue;

      if(OrderType() == OP_BUY)  buyCount++;
      if(OrderType() == OP_SELL) sellCount++;
   }

   // SLとTPの価格を計算するための変数
   double sl = 0, tp = 0;

   // 買いシグナル：モメンタムが100を下から上にクロス
   if(mom2 <= 100.0 &#038;&#038; mom1 > 100.0)
   {
      // 売りポジションがあれば決済
      ClosePositions(OP_SELL);

      // 買いポジションがなければエントリー
      if(buyCount == 0)
      {
         sl = (StopLoss  > 0) ? Ask - StopLoss  * Point : 0;
         tp = (TakeProfit > 0) ? Ask + TakeProfit * Point : 0;
         int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, Slippage, sl, tp, "Mom Buy", MagicNumber, 0, clrBlue);
         if(ticket < 0)
            Print("Buy OrderSend error: ", GetLastError());
      }
   }

   // 売りシグナル：モメンタムが100を上から下にクロス
   if(mom2 >= 100.0 && mom1 < 100.0)
   {
      // 買いポジションがあれば決済
      ClosePositions(OP_BUY);

      // 売りポジションがなければエントリー
      if(sellCount == 0)
      {
         sl = (StopLoss  > 0) ? Bid + StopLoss  * Point : 0;
         tp = (TakeProfit > 0) ? Bid - TakeProfit * Point : 0;
         int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, Slippage, sl, tp, "Mom Sell", MagicNumber, 0, clrRed);
         if(ticket < 0)
            Print("Sell OrderSend error: ", GetLastError());
      }
   }
}

//+------------------------------------------------------------------+
//| 指定タイプのポジションを全決済する関数                            |
//+------------------------------------------------------------------+
void ClosePositions(int type)
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderSymbol() != Symbol()) continue;
      if(OrderMagicNumber() != MagicNumber) continue;
      if(OrderType() != type) continue;

      double closePrice = (type == OP_BUY) ? Bid : Ask;
      if(!OrderClose(OrderTicket(), OrderLots(), closePrice, Slippage, clrWhite))
         Print("OrderClose error: ", GetLastError());
   }
}
</code></pre>
<h3><span id="toc12">コードのポイント解説</span></h3>
<ul>
<li><strong>新しいバー判定</strong>：<code>Time[0]</code>を使って、バーが確定したタイミングだけ処理を実行します。これにより無駄な注文の重複を防ぎます。</li>
<li><strong>shift=1と2を使用</strong>：確定済みのバーを使ってクロス判定を行います。shift=0は未確定バーなので、シグナルがチラつく原因になります。</li>
<li><strong>マジックナンバー</strong>：このEAのポジションだけを管理するための識別番号です。他のEAとの干渉を防ぎます。</li>
<li><strong>決済処理</strong>：反対シグナルが出たら既存ポジションを決済してからエントリーする、ドテン売買のロジックです。</li>
</ul>
<h2><span id="toc13">実践サンプル②：移動平均線と組み合わせたフィルター関数</span></h2>
<p>モメンタム単体だとダマシが多くなりがちです。そこで、<strong>移動平均線（MA）をトレンドフィルター</strong>として組み合わせる方法を紹介します。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| モメンタム＋移動平均線のシグナル判定関数                          |
//+------------------------------------------------------------------+
int GetFilteredSignal(int momPeriod, int maPeriod)
{
   // モメンタム値（確定バー）
   double mom1 = iMomentum(NULL, 0, momPeriod, PRICE_CLOSE, 1);
   double mom2 = iMomentum(NULL, 0, momPeriod, PRICE_CLOSE, 2);

   // 移動平均線の値（確定バー）
   double ma = iMA(NULL, 0, maPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);

   // 現在の終値（確定バー）
   double closePrice = Close[1];

   // 買いシグナル：MA より上 かつ モメンタム100上抜け
   if(closePrice > ma && mom2 <= 100.0 &#038;&#038; mom1 > 100.0)
   {
      return 1;  // 買い
   }

   // 売りシグナル：MA より下 かつ モメンタム100下抜け
   if(closePrice < ma &#038;&#038; mom2 >= 100.0 && mom1 < 100.0)
   {
      return -1;  // 売り
   }

   return 0;  // シグナルなし
}
</code></pre>
<p>この関数の使い方はシンプルです。OnTick内で以下のように呼び出します。</p>
<pre><code class="language-mql4">void OnTick()
{
   int signal = GetFilteredSignal(14, 50);

   if(signal == 1)
   {
      // 買い処理
      Print("フィルター通過：買いシグナル発生！");
   }
   else if(signal == -1)
   {
      // 売り処理
      Print("フィルター通過：売りシグナル発生！");
   }
}
</code></pre>
<p>ポイントは、<strong>価格がMAより上のときだけ買いシグナルを採用し、MAより下のときだけ売りシグナルを採用する</strong>という点です。これにより、トレンドに逆らったエントリーを減らすことができます。</p>
<h2><span id="toc14">iMomentum関数を使う際の注意点</span></h2>
<h3><span id="toc15">1. shift値は1以上を使おう</span></h3>
<p>shift=0は現在形成中のバーの値です。ティックごとに値が変わるため、<strong>シグナル判定には確定済みのshift=1以降を使う</strong>のが鉄則です。shift=0は参考表示用として使いましょう。</p>
<h3><span id="toc16">2. マルチタイムフレーム使用時の注意</span></h3>
<p>第2引数で現在のチャートと異なる時間軸を指定すると、マルチタイムフレーム分析ができます。ただし、上位足のデータが読み込まれていない場合は正しい値が返りません。必要に応じて事前にチャートを開くか、<code>iMomentum</code>の戻り値が<code>0</code>でないかチェックしましょう。</p>
<pre><code class="language-mql4">// 日足のモメンタムを取得
double momDaily = iMomentum(NULL, PERIOD_D1, 14, PRICE_CLOSE, 1);
if(momDaily == 0)
{
   Print("日足データが取得できません");
   return;
}
</code></pre>
<h3><span id="toc17">3. ブローカーによる桁数の違いに注意</span></h3>
<p>StopLossやTakeProfitをポイント単位で指定する場合、3桁/5桁ブローカーでは値の調整が必要です。モメンタム自体の値は比率（パーセンテージ）なので桁数の影響は受けませんが、EA全体のロジックでは注意しましょう。</p>
<h2><span id="toc18">まとめ</span></h2>
<p>今回は、MQL4の<strong>iMomentum関数</strong>について基礎から実践まで解説しました。最後に要点を整理しておきます。</p>
<ul>
<li><strong>モメンタム</strong>は相場の勢いを数値化する指標で、基準値は<strong>100</strong></li>
<li><strong>iMomentum関数</strong>は5つの引数（symbol, timeframe, period, applied_price, shift）で値を取得できる</li>
<li>シグナル判定には<strong>確定バー（shift=1以降）</strong>を使うのが基本</li>
<li><strong>100ラインのクロス</strong>でエントリータイミングを判断するEAが作れる</li>
<li><strong>移動平均線などと組み合わせる</strong>ことで、ダマシを減らしてシグナルの精度を高められる</li>
</ul>
<p>モメンタムはシンプルながら奥が深い指標です。まずは今回のサンプルEAをストラテジーテスターで動かして、パラメータを変えながら挙動を確認してみてください。実際に手を動かすことで、理解が一気に深まりますよ！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13037/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91imomentum%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%81%e3%83%a2%e3%83%a1%e3%83%b3%e3%82%bf/">【MQL4入門】iMomentum関数の使い方を徹底解説！モメンタムで相場の勢いを判定するEAを作ろう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
