<?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>iMA関数 アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/ima%E9%96%A2%E6%95%B0/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/ima関数/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Tue, 31 Mar 2026 12:12:56 +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>iMA関数 アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/ima関数/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4関数】iMA関数（移動平均線）の使い方とサンプルプログラム</title>
		<link>https://mql-programing.com/archives/437/ima-method/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 07 Apr 2021 04:51:02 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[ロジック関係]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[移動平均線]]></category>
		<category><![CDATA[iMA関数]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=437</guid>

					<description><![CDATA[<p>iMA関数とは？ ゴールデンクロスやデッドクロスを手法にしている方は、ぜひiMA関数をマスターしましょう！ iMA関数は、移動平均線の値を取得する関数です。 移動平均線の値が取得できれば、if文やfor文と組みわせること [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/437/ima-method/">【MQL4関数】iMA関数（移動平均線）の使い方とサンプルプログラム</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>移動平均線を取得できるiMA関数について解説していくよ！</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc1">iMA関数とは？</span></h2>



<p>ゴールデンクロスやデッドクロスを手法にしている方は、ぜひiMA関数をマスターしましょう！</p>



<p>iMA関数は、<strong><span class="marker-under-red">移動平均線の値を取得する関数です。</span></strong></p>



<p>移動平均線の値が取得できれば、<a href="https://mql-programing.com/if-condition/">if文</a>や<a href="https://mql-programing.com/repeat-for-while/">for文</a>と組みわせることで、クロスの判定ができます。</p>



<p>しかし、iMA関数を使いこなすのは難しいため、挫折してしまうかたもいらっしゃいます。</p>



<p>なぜ難しいのかというと、<strong>返り値（戻り値）</strong>と<strong>引数</strong>を入力する必要があるからです。</p>



<p>特に<strong><span class="marker-under-red">引数はとても複雑</span></strong>なので、しっかり把握するようにしましょう！</p>



<p>　</p>



<p>またiMA関数は、<strong>MQLに標準で組み込まれている関数なので、自分でプログラミングしなくてOKです！</strong></p>



<p>いつでも使うことができます。</p>



<p>　</p>



<p>if文やfor文がわからない方は、以下の記事が参考になります。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-自動売買を作ろう！ wp-block-embed-自動売買を作ろう！"><div class="wp-block-embed__wrapper">

<a href="https://mql-programing.com/if-condition/" title="【MQLプログラミング基礎】条件分岐をif文で書いてみよう！プログラム例あり" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2020/10/条件分岐if文の書き方.jpg?fit=1120%2C630&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLプログラミング基礎】条件分岐をif文で書いてみよう！プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">目次 条件分岐とは？if文の書き方プログラム例if else文の書き方プログラム例条件式の種類と使い方プログラム例まとめ 条件分岐とは？ プログラムは自分で考えることができません。 そのため、プログラムを実行するかしない</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com/archives/125/if-condition/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<figure class="wp-block-embed is-type-wp-embed is-provider-自動売買を作ろう！ wp-block-embed-自動売買を作ろう！"><div class="wp-block-embed__wrapper">

<a href="https://mql-programing.com/repeat-for-while/" title="【MQLプログラミング基礎】繰り返し文を書いてみよう！プログラム例あり" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img decoding="async" src="https://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2020/10/繰り返し文の書き方.jpg?fit=1120%2C630&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLプログラミング基礎】繰り返し文を書いてみよう！プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">目次 繰り返しとは？for文の書き方変数の初期化条件式変数の更新for文のプログラム例while文の書き方while文のプログラム例サンプルプログラムまとめ 繰り返しとは？ MQLプログラミングでは、全く同じ処理を、何度</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com/archives/139/repeat-for-while/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc2">iMA関数の書き方</span></h2>



<p>iMA関数は難しいと言っても、基本的には<a href="https://mql-programing.com/function/">関数</a>の使い方と同じなので、まずは関数の基礎をマスターしましょう。</p>



<p>関数についてはこちらの記事にまとめておりますので、参考になると思います。</p>



<figure class="wp-block-embed is-type-wp-embed is-provider-自動売買を作ろう！ wp-block-embed-自動売買を作ろう！"><div class="wp-block-embed__wrapper">

<a href="https://mql-programing.com/function/" title="【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり" class="blogcard-wrap external-blogcard-wrap a-wrap cf" target="_blank"><div class="blogcard external-blogcard eb-left cf"><div class="blogcard-label external-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail external-blogcard-thumbnail"><img loading="lazy" decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/cocoon-resources/blog-card-cache/624de21c236a113367001dd95952af29.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">関数とは？ 「プログラムは、何度も同じことを書かないといけない」 と思っている方、ぜひ関数を使ってみてください。 関数とは、何度も繰り返すプログラムを、まとめた状態のものです。 事前に、まとまりを作っておくことで、同じプ</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com/archives/183/function/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc3">基本的な書き方</span></h3>



<p>iMA関数の基本的な書き方は、以下の通りです。</p>



<p>分かりやすいように、引数は省略しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(①, ②, ③, ④, ⑤, ⑥, ⑦);</code></pre></div>



<p>　</p>



<p><strong><span class="marker-under-red">このように返り値はdouble型です。</span></strong></p>



<p><strong><span class="marker-under-red">さらに７つの引数を入力します。</span></strong></p>



<p>引数の数を見るだけでも、うんざりしてしまいますね&#8230;</p>



<p>まずは返り値、次に引数について、詳しく見ていきましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc4">iMA関数の返り値（戻り値）</span></h3>



<p>iMA関数の返り値は<span class="marker-under-red"><strong>double型</strong></span>です。</p>



<p>値が１つだけ返ってきます。</p>



<p>つまり、<strong><span class="marker-under-red">移動平均「線」ではなく、移動平均「点」が返ってくるのです。</span></strong></p>



<p>例えばドル円で使ってみると、「107.000」のような値が返ってきます。</p>



<p>　</p>



<p>また、iMA関数は<strong>１つのロウソク足に対して、１つだけ値を返します。</strong></p>



<p>そして、返ってきた値を繋げることで、移動平均「線」として処理することができるようになります。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc5">iMA関数の引数</span></h3>



<p>ここからは、iMA関数の引数について詳しく見ていきます。</p>



<p>難しいので、ゆっくり理解していくと良いと思います。</p>



<p>下記の通り、iMA関数は７つの引数があります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(①, ②, ③, ④, ⑤, ⑥, ⑦);</code></pre></div>



<p>　</p>



<p>一覧で見ると、このようになります。</p>



<figure class="wp-block-table alignwide"><table><tbody><tr><td><strong>番号</strong></td><td><strong>データ型</strong></td><td><strong>引数名</strong></td><td><strong>内容</strong></td></tr><tr><td>①</td><td>string</td><td>symbol</td><td>通貨ペアを設定（NULLなど）</td></tr><tr><td>②</td><td>int</td><td>timeframe</td><td>時間足を設定（5分足など）</td></tr><tr><td>③</td><td>int</td><td>ma_period</td><td>計算期間を設定（14,25,50など）</td></tr><tr><td>④</td><td>int</td><td>ma_shift</td><td>表示移動の設定（普通は0）</td></tr><tr><td>⑤</td><td>int</td><td>ma_method</td><td>計算方法の設定（Simpleなど）</td></tr><tr><td>⑥</td><td>int</td><td>applied_price</td><td>適用価格の設定（始値や終値など）</td></tr><tr><td>⑦</td><td>int</td><td>shift</td><td>先行・遅行の設定（右から何本目なのか）</td></tr></tbody></table></figure>



<p>　</p>



<p>１つずつ見ていきましょう。</p>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc6">①symbol　（通貨ペアを設定）</span></h4>



<p>symbolは、移動平均を取得する通貨ペアを設定します。</p>



<p>例えばドル円の場合、<strong>「USDJPY」</strong>という値になります。</p>



<p><strong>ですが、具体的に通貨ペアを設定する必要はありません。</strong></p>



<p>というのもMQLには便利なものがあり、<strong><span class="marker-under-red">「Symbol」</span>または<span class="marker-under-red">「NULL」</span></strong>と書くだけで、現在の通貨ペアを設定できます。</p>



<p>そのため通常は、下記のように入力すれば大丈夫です。</p>



<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content"><span class="marker-under">①に「NULL」を入力</span></span></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(NULL, ②, ③, ④, ⑤, ⑥, ⑦);</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc7">②timeframe　（時間足を設定）</span></h4>



<p>timeframeは、移動平均を取得する時間足を設定します。</p>



<p>「0」を入力すると、表示されている時間足になりますので、通常は「0」を入力すれば問題ありません。</p>



<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content"><span class="marker-under">②に「０」を入力</span></span></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(NULL, 0, ③, ④, ⑤, ⑥, ⑦);</code></pre></div>



<p>　</p>



<h5 class="wp-block-heading"><span id="toc8">別の時間足を設定する方法</span></h5>



<p>もし、表示されている時間足ではない値を取得したい場合は、以下の値を入力することで、別の時間足を設定できます。</p>



<figure class="wp-block-table alignwide"><table><tbody><tr><td><strong>入力値</strong></td><td><strong>内容</strong></td></tr><tr><td>PERIOD_CURRENT</td><td>現在チャートの時間軸（0を入力した時と同じ）</td></tr><tr><td>PERIOD_M1</td><td>１分足</td></tr><tr><td>PERIOD_M5</td><td>５分足</td></tr><tr><td>PERIOD_M15</td><td>１５分足</td></tr><tr><td>PERIOD_M30</td><td>３０分足</td></tr><tr><td>PERIOD_H1</td><td>１時間足</td></tr><tr><td>PERIOD_H4</td><td>４時間足</td></tr><tr><td>PERIOD_D1</td><td>１日足</td></tr><tr><td>PERIOD_W1</td><td>１週足</td></tr><tr><td>PERIOD_MN1</td><td>１月足</td></tr></tbody></table></figure>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc9">③ma_period　（計算期間を設定）</span></h4>



<p>３つ目は、移動平均の計算期間を設定します。</p>



<p>計算期間とは、ロウソク足の本数のことです。</p>



<p>過去何本のロウソク足に対して、移動平均を計算するのかを設定します。</p>



<p>一般的には<strong>「７」</strong>、<strong>「１４」</strong>、<strong>「２５」</strong>という値がよく使われます。</p>



<p>「７」なら、過去７本のロウソク足に対して計算します。</p>



<p>ロジックに合わせた数値を入力すると良いでしょう。</p>



<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content"><span class="marker-under">③に「７」を入力</span></span></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(NULL, 0, 7, ④, ⑤, ⑥, ⑦);</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc10">④ma_shift　（表示移動の設定）</span></h4>



<p>移動平均線の表示を、左右に移動させることができます。</p>



<p>ですが、こちらも設定する必要はなく、「0」を入力します。</p>



<p>もし「3」を入力した場合、ロウソク足３本分だけ右に移動します。</p>



<p>マイナスなら左に移動します。</p>



<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content"><span class="marker-under">④に「０」を入力</span></span></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(NULL, 0, 7, 0, ⑤, ⑥, ⑦);</code></pre></div>



<p><span class="marker-under-red">移動するのは表示だけです。iMAの取得値が移動するのではないので、注意してください。</span></p>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc11">⑤ma_method　（計算方法の設定）</span></h4>



<p>計算方法の設定です。</p>



<p>移動平均線の計算方法は、主に４つあります。以下の通りです。</p>



<figure class="wp-block-table alignwide"><table><tbody><tr><td><strong>入力値</strong></td><td><strong>計算方法</strong></td></tr><tr><td>MODE_SMA</td><td>単純移動平均</td></tr><tr><td>MODE_EMA</td><td>指数移動平均</td></tr><tr><td>MODE_SMMA</td><td>平滑移動平均</td></tr><tr><td>MODE_LWMA</td><td>加重移動平均</td></tr></tbody></table></figure>



<p>　</p>



<p>「難しい！」という方は、<strong>単純移動平均（MODE_SMA）</strong>を入力してください。</p>



<p>なぜなら、移動平均線のインジケータは、単純移動平均になっているからです。</p>



<p>そうすれば、Moving Averageインジケータの表示通りに、値を取得できるはずです。</p>



<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content"><span class="marker-under">⑤に「MODE_SMA」を入力</span></span></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(NULL, 0, 7, 0, MODE_SMA, ⑥, ⑦);</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc12">⑥applied_price　（適用価格の設定）</span></h4>



<p>適用価格とは、ロウソク足の「終値」「始値」「高値」「底値」のことです。</p>



<p>移動平均の計算を、どの値で計算するのかを設定します。</p>



<p>以下の通り設定できるのですが、<strong>「終値」（PRICE_CLOSE）</strong>で設定して問題ありません。</p>



<figure class="wp-block-table alignwide"><table><tbody><tr><td><strong>入力値</strong></td><td><strong>内容</strong></td></tr><tr><td>PRICE_CLOSE</td><td>終値</td></tr><tr><td>PRICE_OPEN</td><td>始値</td></tr><tr><td>PRICE_HIGH</td><td>高値</td></tr><tr><td>PRICE_LOW</td><td>底値</td></tr><tr><td>PRICE_MEDIAN</td><td>中間（高値 + 安値)/2</td></tr><tr><td>PRICE_TYPICAL</td><td>中間（高値 + 安値 + 終値)/3</td></tr><tr><td>PRICE_WEIGHTED</td><td>中間（高値 + 安値 + 終値 + 終値)/4</td></tr></tbody></table></figure>



<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content"><span class="marker-under">⑥に「PRICE_CLOSE」を入力</span></span></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(NULL, 0, 7, 0, MODE_SMA, PRICE_CLOSE, ⑦);</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc13">⑦shift　（先行・遅行の設定）</span></h4>



<p>最後にshiftの設定です。</p>



<p>先行線や遅行線の設定をします。</p>



<p>簡単に言うと、どのくらい過去の移動平均線の値を取得するかです。</p>



<p>プラスの数値を入力した場合、その数値分だけ過去のロウソク足の、移動平均線の値を取得します。</p>



<p>移動平均線を１本だけ使う場合は、「0」で良いのですが、２本使う場合（ゴールデンクロスやデッドクロス）は、このshiftを使います。</p>



<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content"><span class="marker-under">⑦に「０」を入力</span></span></div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double ma = iMA(NULL, 0, 7, 0, MODE_SMA, PRICE_CLOSE, 0);</code></pre></div>



<p>　</p>



<p>ここまでで、iMAの書き方は完了です。</p>



<p>上記のように記述すれば、移動平均線の値を取得することができます。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc14">iMA関数の具体的な使い方（サンプルあり）</span></h2>



<p>もう少し具体的な使い方を見ていきましょう。</p>



<p>iMAを使う時、大体２通りの使い方があります。</p>



<ul class="wp-block-list"><li>③ma_period（計算期間の設定）を変える方法</li><li>⑦shift（先行・遅行の設定）を変える方法</li></ul>



<p>それぞれ見ていきましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc15">③ma_period（計算期間）を変える方法</span></h3>



<p>ゴールデンクロスやデッドクロスを判定する場合、短期移動平均線と長期移動平均線の２本が必要です。</p>



<p>この場合、<strong>③ma_period（計算期間）を変える</strong>ことで、短期と長期の移動平均線の値を取得できます。</p>



<p>例えば、短期を「7」、長期を「25」に設定する場合は以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// 短期移動平均線（期間7）
double ma_short = iMA(NULL, 0, 7, 0, MODE_SMA, PRICE_CLOSE, 0);

// 長期移動平均線（期間25）
double ma_long = iMA(NULL, 0, 25, 0, MODE_SMA, PRICE_CLOSE, 0);</code></pre></div>



<p>　</p>



<p>このように③の部分だけを変えることで、短期と長期の値を別々に取得できます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc16">⑦shift（先行・遅行）を変える方法</span></h3>



<p>ゴールデンクロスやデッドクロスの判定には、<strong>現在の値</strong>と<strong>１本前の値</strong>を比較する必要があります。</p>



<p>この場合、⑦shift（先行・遅行の設定）を変えることで、過去の移動平均線の値を取得できます。</p>



<p>例えば、現在のロウソク足と１本前のロウソク足の移動平均を取得する場合は以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// 現在のロウソク足の移動平均（shift=0）
double ma_current = iMA(NULL, 0, 7, 0, MODE_SMA, PRICE_CLOSE, 0);

// 1本前のロウソク足の移動平均（shift=1）
double ma_prev = iMA(NULL, 0, 7, 0, MODE_SMA, PRICE_CLOSE, 1);</code></pre></div>



<p>　</p>



<p>⑦の部分を「0」にすると現在のロウソク足、「1」にすると1本前のロウソク足の値を取得します。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc17">サンプルプログラム（ゴールデンクロス・デッドクロス判定）</span></h2>



<p>ここからは、iMA関数を使った実践的なサンプルプログラムを紹介します。</p>



<p><strong>ゴールデンクロスとデッドクロスを判定するEA（自動売買プログラム）</strong>のサンプルです。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc18">ゴールデンクロス・デッドクロスの判定ロジック</span></h3>



<p>ゴールデンクロスとデッドクロスの判定は、以下のように考えます。</p>



<p><strong>【ゴールデンクロス】</strong></p>



<ul class="wp-block-list"><li>1本前：短期MA ＜ 長期MA（短期が下にある）</li><li>現在　：短期MA ＞ 長期MA（短期が上に抜けた）</li></ul>



<p><strong>【デッドクロス】</strong></p>



<ul class="wp-block-list"><li>1本前：短期MA ＞ 長期MA（短期が上にある）</li><li>現在　：短期MA ＜ 長期MA（短期が下に抜けた）</li></ul>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc19">サンプルコード</span></h3>



<p>以下がゴールデンクロス・デッドクロスを判定し、アラートを表示するサンプルプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| iMA関数サンプル - ゴールデンクロス・デッドクロス判定             |
//+------------------------------------------------------------------+

// 入力パラメータ
input int ShortPeriod = 7;    // 短期移動平均の期間
input int LongPeriod  = 25;   // 長期移動平均の期間

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   // 現在のロウソク足の短期・長期移動平均を取得
   double ma_short_current = iMA(NULL, 0, ShortPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
   double ma_long_current  = iMA(NULL, 0, LongPeriod,  0, MODE_SMA, PRICE_CLOSE, 0);

   // 1本前のロウソク足の短期・長期移動平均を取得
   double ma_short_prev = iMA(NULL, 0, ShortPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
   double ma_long_prev  = iMA(NULL, 0, LongPeriod,  0, MODE_SMA, PRICE_CLOSE, 1);

   // ゴールデンクロス判定
   if(ma_short_prev < ma_long_prev &#038;&#038; ma_short_current > ma_long_current)
   {
      Alert("ゴールデンクロスが発生しました！");
   }

   // デッドクロス判定
   if(ma_short_prev > ma_long_prev && ma_short_current < ma_long_current)
   {
      Alert("デッドクロスが発生しました！");
   }
}</code></pre></div>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc20">サンプルコードの解説</span></h3>



<p>上記のサンプルコードを順番に解説します。</p>



<p>　</p>



<p><strong>①入力パラメータの設定</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>input int ShortPeriod = 7;    // 短期移動平均の期間
input int LongPeriod  = 25;   // 長期移動平均の期間</code></pre></div>



<p>inputをつけることで、EAの設定画面から期間を変更できるようになります。</p>



<p>　</p>



<p><strong>②現在と1本前の移動平均線の値を取得</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// 現在のロウソク足（shift=0）
double ma_short_current = iMA(NULL, 0, ShortPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
double ma_long_current  = iMA(NULL, 0, LongPeriod,  0, MODE_SMA, PRICE_CLOSE, 0);

// 1本前のロウソク足（shift=1）
double ma_short_prev = iMA(NULL, 0, ShortPeriod, 0, MODE_SMA, PRICE_CLOSE, 1);
double ma_long_prev  = iMA(NULL, 0, LongPeriod,  0, MODE_SMA, PRICE_CLOSE, 1);</code></pre></div>



<p>③ma_periodと⑦shiftの両方を変えて、合計4つの値を取得しています。</p>



<p>　</p>



<p><strong>③ゴールデンクロス・デッドクロスの判定</strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// ゴールデンクロス判定
if(ma_short_prev < ma_long_prev &#038;&#038; ma_short_current > ma_long_current)
{
   Alert("ゴールデンクロスが発生しました！");
}</code></pre></div>



<p>if文を使って、1本前では短期が長期より下にあり、現在は短期が長期より上にある場合を、ゴールデンクロスと判定しています。</p>



<p>デッドクロスは、この逆の条件で判定しています。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc21">iMA関数を使う時の注意点</span></h2>



<p>最後に、iMA関数を使う時の注意点をまとめておきます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc22">注意点①：返ってくるのは「点」であること</span></h3>



<p>先ほども説明しましたが、iMA関数は<strong>移動平均「線」ではなく、移動平均「点」</strong>を返します。</p>



<p>1回の呼び出しで、1つのロウソク足に対する1つの値しか取得できません。</p>



<p>複数の値が必要な場合は、⑦shiftの値を変えて複数回呼び出す必要があります。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc23">注意点②：④ma_shiftと⑦shiftの違い</span></h3>



<p>④ma_shiftと⑦shiftは混同しやすいので注意が必要です。</p>



<ul class="wp-block-list"><li><strong>④ma_shift</strong>：表示を移動させるだけ（取得する値は変わらない）</li><li><strong>⑦shift</strong>：取得するロウソク足の位置を変える（実際に取得する値が変わる）</li></ul>



<p>通常は④ma_shiftは「0」のままで、⑦shiftを使って過去の値を取得するようにしましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc24">注意点③：計算期間より少ないデータしかない場合</span></h3>



<p>例えばma_periodを「25」に設定した場合、最低でも25本のロウソク足のデータが必要です。</p>



<p>データが不足している場合、正しい値が返ってこない可能性があるので注意してください。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc25">まとめ</span></h2>



<p>iMA関数について解説しました。ポイントをまとめます。</p>



<ul class="wp-block-list"><li>iMA関数は<strong>移動平均線の値を取得する関数</strong></li><li>返り値は<strong>double型</strong>で、1つの値（移動平均「点」）が返ってくる</li><li>引数は<strong>7つ</strong>あるが、よく変更するのは③ma_periodと⑦shift</li><li>ゴールデンクロス・デッドクロスの判定には、<strong>③ma_periodと⑦shiftを組み合わせて</strong>使う</li><li>④ma_shiftと⑦shiftの違いに注意する</li></ul>



<p>　</p>



<p>iMA関数は引数が多く最初は難しく感じますが、慣れてしまえば簡単に使えるようになります。</p>



<p>ぜひサンプルコードを参考に、実際に動かしてみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/437/ima-method/">【MQL4関数】iMA関数（移動平均線）の使い方とサンプルプログラム</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
