<?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>iClose アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/iclose/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/iclose/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 03:57:57 +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>iClose アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/iclose/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4入門】iClose・iOpen・iHigh・iLow・iTimeで過去のローソク足データを取得しよう</title>
		<link>https://mql-programing.com/archives/13046/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91iclose%e3%83%bbiopen%e3%83%bbihigh%e3%83%bbilow%e3%83%bbitime%e3%81%a7%e9%81%8e%e5%8e%bb%e3%81%ae%e3%83%ad%e3%83%bc%e3%82%bd%e3%82%af%e8%b6%b3%e3%83%87%e3%83%bc/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Fri, 17 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[ローソク足]]></category>
		<category><![CDATA[iClose]]></category>
		<category><![CDATA[iOpen]]></category>
		<category><![CDATA[時系列アクセス関数]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13046</guid>

					<description><![CDATA[<p>EA（自動売買プログラム）やカスタムインジケーターを作るとき、「過去のローソク足の価格を取得したい」という場面は非常に多く出てきます。たとえば「1本前の足が陽線だったら買い」「直近5本の高値の中で最も高い価格を調べたい」 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13046/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91iclose%e3%83%bbiopen%e3%83%bbihigh%e3%83%bbilow%e3%83%bbitime%e3%81%a7%e9%81%8e%e5%8e%bb%e3%81%ae%e3%83%ad%e3%83%bc%e3%82%bd%e3%82%af%e8%b6%b3%e3%83%87%e3%83%bc/">【MQL4入門】iClose・iOpen・iHigh・iLow・iTimeで過去のローソク足データを取得しよう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>EA（自動売買プログラム）やカスタムインジケーターを作るとき、「過去のローソク足の価格を取得したい」という場面は非常に多く出てきます。たとえば「1本前の足が陽線だったら買い」「直近5本の高値の中で最も高い価格を調べたい」など、ローソク足データの取得はMQL4プログラミングの基本中の基本です。</p>
<p>この記事では、MQL4でローソク足の<strong>始値・終値・高値・安値・開始時刻</strong>を取得するための5つの関数――<code>iOpen()</code>、<code>iClose()</code>、<code>iHigh()</code>、<code>iLow()</code>、<code>iTime()</code>の使い方を、サンプルコード付きでわかりやすく解説します。</p>
<h2><span id="toc1">5つの時系列アクセス関数の概要</span></h2>
<p>MQL4には、ローソク足（バー）の価格情報を取得するための<strong>時系列アクセス関数</strong>が用意されています。iOpen関数は指定した通貨ペア・時間軸・バーシフトに対応するバーの始値を、iClose関数は終値を、iHigh関数は高値を、iLow関数は安値を返す関数です。それぞれの役割は以下のとおりです。</p>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>関数名</th>
<th>取得できる値</th>
<th>戻り値の型</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>iOpen()</code></td>
<td>指定バーの<strong>始値</strong>（Open）</td>
<td>double</td>
</tr>
<tr>
<td><code>iClose()</code></td>
<td>指定バーの<strong>終値</strong>（Close）</td>
<td>double</td>
</tr>
<tr>
<td><code>iHigh()</code></td>
<td>指定バーの<strong>高値</strong>（High）</td>
<td>double</td>
</tr>
<tr>
<td><code>iLow()</code></td>
<td>指定バーの<strong>安値</strong>（Low）</td>
<td>double</td>
</tr>
<tr>
<td><code>iTime()</code></td>
<td>指定バーの<strong>形成開始時刻</strong></td>
<td>datetime</td>
</tr>
</tbody>
</table>
<p>5つの関数はすべて<strong>同じ引数の構成</strong>を持っており、一度覚えればすべてすぐに使いこなせます。</p>
<h2><span id="toc2">関数の書式と引数の意味</span></h2>
<p>ここでは<code>iClose()</code>を例に解説しますが、他の4つの関数もまったく同じ形式です。</p>
<pre><code class="language-mql5">double iClose(
    string symbol,    // 通貨ペア名
    int    timeframe, // 時間軸
    int    shift      // バーの位置（シフト）
);
</code></pre>
<h3><span id="toc3">① symbol（通貨ペア名）</span></h3>
<p>通貨ペア名は「気配値表示ウィンドウ」に表示されているとおりに記述します。特定の通貨ペア名を指定せず、EA等を適用したチャートの通貨ペアの終値を取得したい場合は、「NULL」と記述します。</p>
<ul>
<li><code>NULL</code> または <code>Symbol()</code> → EAやインジケーターを適用中のチャートの通貨ペア</li>
<li><code>"USDJPY"</code> → ドル円を明示的に指定</li>
<li><code>"EURUSD"</code> → ユーロドルを明示的に指定</li>
</ul>
<p>通貨ペアを直接記述するとどの通貨ペアチャートにセットしてもその通貨ペアを強制的にトレードしてしまうため、Symbol()と記述しましょう。</p>
<h3><span id="toc4">② timeframe（時間軸）</span></h3>
<p>どの時間足のデータを取得するかを指定します。<code>0</code>またはPERIOD定数を使います。</p>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数</th>
<th>値</th>
<th>時間足</th>
</tr>
</thead>
<tbody>
<tr>
<td><code>PERIOD_CURRENT</code></td>
<td>0</td>
<td>現在のチャートの時間足</td>
</tr>
<tr>
<td><code>PERIOD_M1</code></td>
<td>1</td>
<td>1分足</td>
</tr>
<tr>
<td><code>PERIOD_M5</code></td>
<td>5</td>
<td>5分足</td>
</tr>
<tr>
<td><code>PERIOD_M15</code></td>
<td>15</td>
<td>15分足</td>
</tr>
<tr>
<td><code>PERIOD_M30</code></td>
<td>30</td>
<td>30分足</td>
</tr>
<tr>
<td><code>PERIOD_H1</code></td>
<td>60</td>
<td>1時間足</td>
</tr>
<tr>
<td><code>PERIOD_H4</code></td>
<td>240</td>
<td>4時間足</td>
</tr>
<tr>
<td><code>PERIOD_D1</code></td>
<td>1440</td>
<td>日足</td>
</tr>
<tr>
<td><code>PERIOD_W1</code></td>
<td>10080</td>
<td>週足</td>
</tr>
<tr>
<td><code>PERIOD_MN1</code></td>
<td>43200</td>
<td>月足</td>
</tr>
</tbody>
</table>
<p><code>0</code>を指定すると、EAやインジケーターを適用しているチャートの時間足が自動的に使われます。マルチタイムフレーム分析（MTF）を行いたい場合は、ここに上位足の定数を明示的に指定します。</p>
<h3><span id="toc5">③ shift（バーの位置）</span></h3>
<p>終値を取得したいバーが現在のバーであれば「０」、１本前のバーであれば「１」、２本前のバーであれば「２」……と記述します。</p>
<ul>
<li><code>0</code> → 現在（最新）のバー</li>
<li><code>1</code> → 1本前のバー</li>
<li><code>2</code> → 2本前のバー</li>
<li><code>n</code> → n本前のバー</li>
</ul>
<p>同じ記述でも時間が進むにつれて値が変化します。数字が大きくなるほど過去のバーを参照します。なお、<strong>shift=0の最新バーはまだ形成中</strong>なので、確定した値を使いたい場合はshift=1以降を使うのが一般的です。</p>
<h2><span id="toc6">基本的な使い方 ― 各関数のサンプルコード</span></h2>
<p>まずは5つの関数それぞれを使って、ログにローソク足情報を出力する基本例を見てみましょう。</p>
<pre><code class="language-mql5">//+------------------------------------------------------------------+
//| 各時系列アクセス関数の基本的な使い方                                 |
//+------------------------------------------------------------------+
#property strict

void OnInit()
{
    // 1本前（確定済み）のバーの各値を取得
    double openPrice  = iOpen(NULL, 0, 1);
    double closePrice = iClose(NULL, 0, 1);
    double highPrice  = iHigh(NULL, 0, 1);
    double lowPrice   = iLow(NULL, 0, 1);
    datetime barTime  = iTime(NULL, 0, 1);

    Print("=== 1本前のローソク足情報 ===");
    Print("開始時刻: ", TimeToString(barTime, TIME_DATE | TIME_MINUTES));
    Print("始値:     ", DoubleToString(openPrice, Digits));
    Print("高値:     ", DoubleToString(highPrice, Digits));
    Print("安値:     ", DoubleToString(lowPrice, Digits));
    Print("終値:     ", DoubleToString(closePrice, Digits));
}
</code></pre>
<p>このコードをEAとしてコンパイルし、チャートにセットすると、「エキスパート」タブに1本前のバーの情報が表示されます。<code>NULL</code>と<code>0</code>を指定しているので、適用したチャートの通貨ペアと時間足のデータが自動的に使われます。</p>
<h2><span id="toc7">実践サンプル① ― 陽線・陰線を判定する</span></h2>
<p>EA開発でよく使うのが「前のローソク足が陽線だったか陰線だったか」の判定です。始値と終値を比較するだけで簡単に実現できます。</p>
<pre><code class="language-mql5">//+------------------------------------------------------------------+
//| 1本前のローソク足が陽線か陰線かを判定                               |
//+------------------------------------------------------------------+
void OnTick()
{
    double prevOpen  = iOpen(Symbol(), 0, 1);
    double prevClose = iClose(Symbol(), 0, 1);

    if(prevClose > prevOpen)
    {
        // 陽線（終値 > 始値）
        Print("1本前は陽線です（上昇）");
    }
    else if(prevClose < prevOpen)
    {
        // 陰線（終値 < 始値）
        Print("1本前は陰線です（下降）");
    }
    else
    {
        // 同値（十字線など）
        Print("1本前は同値線です");
    }
}
</code></pre>
<p>「2本連続で陽線なら買いエントリー」といった条件も、shift=1とshift=2を使って簡単に書けます。</p>
<h2><span id="toc8">実践サンプル② ― 直近N本の最高値・最安値を求める</span></h2>
<p>forループとiHigh/iLowを組み合わせれば、直近N本のバーの中から最高値・最安値を見つけることができます。</p>
<pre><code class="language-mql5">//+------------------------------------------------------------------+
//| 直近N本のバーから最高値・最安値を算出                                |
//+------------------------------------------------------------------+
void OnTick()
{
    int lookback = 20;  // 過去20本分を調べる
    double highest = 0;
    double lowest  = 999999;

    for(int i = 1; i <= lookback; i++)
    {
        double h = iHigh(NULL, 0, i);
        double l = iLow(NULL, 0, i);

        if(h > highest) highest = h;
        if(l < lowest)  lowest  = l;
    }

    Print("直近", lookback, "本の最高値: ", DoubleToString(highest, Digits));
    Print("直近", lookback, "本の最安値: ", DoubleToString(lowest, Digits));
}
</code></pre>
<p>※ブレイクアウト戦略やレンジ判定のロジックに応用できます。</p>
<h2><span id="toc9">実践サンプル③ ― マルチタイムフレーム（MTF）で上位足の値を取得</span></h2>
<p>「チャートの時間足を切り替えても、常に4時間足のオープン時間を取得したい！」という場合にはiTime()関数を使用して引数に「PERIOD_H4」を渡してあげる必要があります。また、EAやインジケーターを適用したチャートの通貨ペアはUSD/JPYだが、取得したい情報がEUR/JPYのものである場合でもiTime()関数が活躍します。これは他のiClose()、iHigh()なども同様です。</p>
<pre><code class="language-mql5">//+------------------------------------------------------------------+
//| 5分足チャート上から日足・4時間足のデータを取得する例                   |
//+------------------------------------------------------------------+
void OnTick()
{
    // 日足の1本前の終値
    double dailyClose = iClose(NULL, PERIOD_D1, 1);
    // 4時間足の1本前の高値
    double h4High     = iHigh(NULL, PERIOD_H4, 1);
    // 4時間足の1本前の安値
    double h4Low      = iLow(NULL, PERIOD_H4, 1);
    // 日足の1本前の開始時刻
    datetime dailyTime = iTime(NULL, PERIOD_D1, 1);

    Print("前日の終値: ", DoubleToString(dailyClose, Digits));
    Print("前日の開始時刻: ", TimeToString(dailyTime, TIME_DATE));
    Print("4H前回バーの高値: ", DoubleToString(h4High, Digits));
    Print("4H前回バーの安値: ", DoubleToString(h4Low, Digits));
}
</code></pre>
<p>たとえば5分足チャート上で「前日の高値・安値」をラインとして引いたり、「4時間足が上昇トレンドなら5分足で押し目買いだけを行う」といったMTFロジックを組むときに活躍します。</p>
<h2><span id="toc10">定義済み配列 Open[] / Close[] / High[] / Low[] / Time[] との違い</span></h2>
<p>MQL4には、i〇〇()関数とは別に、<code>Open[]</code>、<code>Close[]</code>、<code>High[]</code>、<code>Low[]</code>、<code>Time[]</code>という<strong>定義済み配列</strong>も用意されています。EA等を適用したチャートにおける終値は定義済み配列であるClose[]に格納されており、EA等を適用したチャートにおける終値を取得したい場合はClose[]を使用し、EA等を適用したチャート以外の通貨ペアや時間軸における終値を取得したい場合はiClose()関数を使用します。使い分けのポイントは次のとおりです。</p>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0;">
<thead>
<tr style="background-color: #f0f0f0;">
<th></th>
<th>定義済み配列<br />（例: <code>Close[1]</code>）</th>
<th>i〇〇()関数<br />（例: <code>iClose(NULL,0,1)</code>）</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>通貨ペア</strong></td>
<td>チャートの通貨ペアのみ</td>
<td>任意の通貨ペアを指定可能</td>
</tr>
<tr>
<td><strong>時間足</strong></td>
<td>チャートの時間足のみ</td>
<td>任意の時間足を指定可能</td>
</tr>
<tr>
<td><strong>記述の簡潔さ</strong></td>
<td>短くシンプル</td>
<td>引数が3つ必要</td>
</tr>
<tr>
<td><strong>MTF対応</strong></td>
<td>×</td>
<td>○</td>
</tr>
</tbody>
</table>
<p>なお、<code>iClose(NULL, 0, 1)</code>と<code>Close[1]</code>は同じ値を返します。どちらを使っても結果は同じですが、後からMTF対応に拡張する可能性がある場合は、最初からi〇〇()関数で書いておくと修正が楽です。</p>
<h2><span id="toc11">よくある注意点・落とし穴</span></h2>
<h3><span id="toc12">shift=0 は未確定のバー</span></h3>
<p><code>iClose(NULL, 0, 0)</code> で取得できる終値は、<strong>現在形成中のバーの最新価格</strong>です。ティックが入るたびに値が変わるため、売買判断には確定済みのshift=1を使うのが安全です。</p>
<h3><span id="toc13">ローカル履歴がない場合は0が返る</span></h3>
<p>ローカル履歴がない（読み込まれていない）場合、関数は0を返します。特にマルチタイムフレームや他通貨ペアのデータを使う場合は、事前にヒストリーデータを取得しておきましょう。</p>
<h3><span id="toc14">Symbol()を使おう</span></h3>
<p>通貨ペア名は<code>"USDJPY"</code>のように直接書くこともできますが、<code>Symbol()</code>や<code>NULL</code>を使えば、どのチャートにセットしても自動的にそのチャートの通貨ペアが適用されるので、汎用性の高いEAが作れます。</p>
<h2><span id="toc15">まとめ</span></h2>
<p>今回学んだ5つの時系列アクセス関数をおさらいしましょう。</p>
<ul>
<li><code>iOpen(symbol, timeframe, shift)</code> → 始値を取得</li>
<li><code>iClose(symbol, timeframe, shift)</code> → 終値を取得</li>
<li><code>iHigh(symbol, timeframe, shift)</code> → 高値を取得</li>
<li><code>iLow(symbol, timeframe, shift)</code> → 安値を取得</li>
<li><code>iTime(symbol, timeframe, shift)</code> → バーの形成開始時刻を取得</li>
</ul>
<p>すべて<strong>同じ3つの引数（通貨ペア・時間軸・バー位置）</strong>で統一されているため、1つ覚えれば残りもすぐに使えます。</p>
<p>これらの関数は、陽線・陰線の判定、ブレイクアウト戦略、マルチタイムフレーム分析など、EA開発のあらゆる場面で必要になります。ぜひサンプルコードを実際にMT4のMetaEditorに入力して動かし、手を動かしながら身につけていきましょう！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13046/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91iclose%e3%83%bbiopen%e3%83%bbihigh%e3%83%bbilow%e3%83%bbitime%e3%81%a7%e9%81%8e%e5%8e%bb%e3%81%ae%e3%83%ad%e3%83%bc%e3%82%bd%e3%82%af%e8%b6%b3%e3%83%87%e3%83%bc/">【MQL4入門】iClose・iOpen・iHigh・iLow・iTimeで過去のローソク足データを取得しよう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
