<?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>【初級編】MQLプログラミング基礎 アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/category/mql-programing-basic/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/category/mql-programing-basic/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Wed, 01 Apr 2026 04:18:52 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0.1</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>【初級編】MQLプログラミング基礎 アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/category/mql-programing-basic/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4入門】チャートオブジェクト関数を完全攻略！ObjectCreate・ObjectDelete・ObjectSetの使い方</title>
		<link>https://mql-programing.com/archives/13059/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91%e3%83%81%e3%83%a3%e3%83%bc%e3%83%88%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e9%96%a2%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e6%94%bb%e7%95%a5/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Tue, 21 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[ObjectCreate]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[チャートオブジェクト]]></category>
		<category><![CDATA[ObjectDelete]]></category>
		<category><![CDATA[オブジェクト関数]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13059</guid>

					<description><![CDATA[<p>MQL4でEAやインジケーターを開発していると、「チャート上に水平線を引きたい」「テキストラベルで情報を表示したい」という場面が必ず出てきます。こうしたチャート上の描画を担うのがチャートオブジェクト関数です。 この記事で [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13059/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91%e3%83%81%e3%83%a3%e3%83%bc%e3%83%88%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e9%96%a2%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e6%94%bb%e7%95%a5/">【MQL4入門】チャートオブジェクト関数を完全攻略！ObjectCreate・ObjectDelete・ObjectSetの使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>MQL4でEAやインジケーターを開発していると、「チャート上に水平線を引きたい」「テキストラベルで情報を表示したい」という場面が必ず出てきます。こうしたチャート上の描画を担うのが<strong>チャートオブジェクト関数</strong>です。</p>
<p>この記事では、<strong>ObjectCreate</strong>・<strong>ObjectDelete</strong>・<strong>ObjectSetInteger</strong>・<strong>ObjectSetDouble</strong>・<strong>ObjectSetString</strong>といった主要関数の使い方を、実践的なコードサンプルとともに徹底解説します。最後には情報パネルを表示するインジケーターの完全コードも用意していますので、ぜひ最後までお読みください。</p>
<h2><span id="toc1">チャートオブジェクト関数とは？</span></h2>
<p>チャートオブジェクト関数とは、MetaTrader 4のチャート上にライン・図形・テキストなどの「オブジェクト」をプログラムから作成・変更・削除するための関数群です。</p>
<p>手動でチャートに水平線やトレンドラインを描くのと同じことを、MQL4のコードから自動的に行えるようになります。EAでエントリーポイントにマークを付けたり、インジケーターで情報パネルを表示したりと、用途は非常に幅広いです。</p>
<h2><span id="toc2">ObjectCreate — オブジェクトを作成する</span></h2>
<p><code>ObjectCreate</code>関数は、チャート上に新しいオブジェクトを作成するための関数です。基本的な書式は以下のとおりです。</p>
<pre><code class="language-mql4">bool ObjectCreate(
    string name,       // オブジェクト名（一意な名前を付ける）
    int    type,       // オブジェクトの種類（ENUM_OBJECT）
    int    sub_window, // サブウィンドウ番号（0=メインチャート）
    datetime time1,    // 第1アンカーポイントの時刻
    double   price1,   // 第1アンカーポイントの価格
    ...                // 必要に応じて第2、第3アンカーポイント
);
</code></pre>
<h3><span id="toc3">主なオブジェクト種類（ENUM_OBJECT）一覧</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>アンカーポイント数</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_HLINE</td>
<td>水平線</td>
<td>1（価格のみ）</td>
</tr>
<tr>
<td>OBJ_VLINE</td>
<td>垂直線</td>
<td>1（時刻のみ）</td>
</tr>
<tr>
<td>OBJ_TREND</td>
<td>トレンドライン</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_RECTANGLE</td>
<td>四角形</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_LABEL</td>
<td>テキストラベル（座標指定）</td>
<td>0（ピクセル座標）</td>
</tr>
<tr>
<td>OBJ_TEXT</td>
<td>テキスト（チャート上）</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW</td>
<td>矢印マーク</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_RECTANGLE_LABEL</td>
<td>四角形ラベル（背景パネル用）</td>
<td>0（ピクセル座標）</td>
</tr>
</tbody>
</table>
<h3><span id="toc4">水平線を作成するサンプル</span></h3>
<p>最もシンプルな例として、現在の価格に水平線を引いてみましょう。</p>
<pre><code class="language-mql4">void CreateHLine()
{
    string name = "MyHLine";
    double price = Ask;

    // 既に同名のオブジェクトがあれば削除
    if(ObjectFind(name) >= 0)
        ObjectDelete(name);

    // 水平線を作成
    ObjectCreate(name, OBJ_HLINE, 0, 0, price);

    // 色を赤に設定
    ObjectSetInteger(0, name, OBJPROP_COLOR, clrRed);

    // チャートを再描画して反映
    ChartRedraw();
}
</code></pre>
<p><code>ObjectCreate</code>は成功すると<code>true</code>、失敗すると<code>false</code>を返します。同じ名前のオブジェクトが既に存在する場合は失敗するため、事前に<code>ObjectFind</code>で確認するか、先に削除しておくのがポイントです。</p>
<h2><span id="toc5">ObjectDelete — オブジェクトを削除する</span></h2>
<p><code>ObjectDelete</code>関数でチャート上のオブジェクトを削除できます。</p>
<pre><code class="language-mql4">// 名前を指定して削除
bool ObjectDelete(string name);

// チャートIDを指定して削除（MQL4でも使用可能）
bool ObjectDelete(long chart_id, string name);
</code></pre>
<h3><span id="toc6">使用例：オブジェクトの削除</span></h3>
<pre><code class="language-mql4">void RemoveMyObjects()
{
    ObjectDelete("MyHLine");
    ObjectDelete("MyLabel");
    ChartRedraw();
}
</code></pre>
<h3><span id="toc7">&#x26a0;&#xfe0f; OnDeinitでの注意点</span></h3>
<p><strong>ObjectDelete関数は非同期で実行されます。</strong>つまり、関数を呼び出した瞬間に削除が完了するとは限りません。特に<code>OnDeinit</code>関数内で呼び出す場合、処理が即座に反映されないことがあります。</p>
<p>確実にオブジェクトを削除したい場合は、<code>ObjectsDeleteAll</code>関数を使うか、<code>ObjectDelete</code>の後に<code>ChartRedraw</code>を呼ぶようにしましょう。</p>
<pre><code class="language-mql4">void OnDeinit(const int reason)
{
    // プレフィックスが一致するオブジェクトを一括削除
    ObjectsDeleteAll(0, "MyPrefix_");
    ChartRedraw();
}
</code></pre>
<p><code>ObjectsDeleteAll</code>の第2引数にプレフィックス（接頭辞）を指定すると、その文字列で始まる名前のオブジェクトだけを一括削除できます。自作オブジェクトに統一のプレフィックスを付ける習慣を身につけると、管理がとても楽になります。</p>
<h2><span id="toc8">ObjectSetInteger — 整数プロパティを設定する</span></h2>
<p><code>ObjectSetInteger</code>関数は、オブジェクトの色・線種・太さなどの整数型プロパティを変更します。</p>
<h3><span id="toc9">よく使うプロパティ一覧</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>プロパティ定数</th>
<th>説明</th>
<th>設定値の例</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJPROP_COLOR</td>
<td>オブジェクトの色</td>
<td>clrRed, clrBlue</td>
</tr>
<tr>
<td>OBJPROP_STYLE</td>
<td>線のスタイル</td>
<td>STYLE_SOLID, STYLE_DASH, STYLE_DOT</td>
</tr>
<tr>
<td>OBJPROP_WIDTH</td>
<td>線の太さ</td>
<td>1, 2, 3&#8230;</td>
</tr>
<tr>
<td>OBJPROP_SELECTABLE</td>
<td>ユーザーが選択可能か</td>
<td>true / false</td>
</tr>
<tr>
<td>OBJPROP_HIDDEN</td>
<td>オブジェクトリストに非表示</td>
<td>true / false</td>
</tr>
<tr>
<td>OBJPROP_XDISTANCE</td>
<td>X座標（ピクセル）</td>
<td>10, 20&#8230;</td>
</tr>
<tr>
<td>OBJPROP_YDISTANCE</td>
<td>Y座標（ピクセル）</td>
<td>10, 20&#8230;</td>
</tr>
<tr>
<td>OBJPROP_CORNER</td>
<td>基準コーナー</td>
<td>CORNER_LEFT_UPPER など</td>
</tr>
</tbody>
</table>
<h3><span id="toc10">プロパティ設定のサンプル</span></h3>
<pre><code class="language-mql4">void StyleHLine(string name)
{
    // 色を青に変更
    ObjectSetInteger(0, name, OBJPROP_COLOR, clrDodgerBlue);

    // 破線スタイルに変更
    ObjectSetInteger(0, name, OBJPROP_STYLE, STYLE_DASH);

    // 線の太さを2に変更
    ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);

    // ユーザーが選択できないようにする
    ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);

    // オブジェクトリストに表示しない
    ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);

    ChartRedraw();
}
</code></pre>
<p><code>OBJPROP_SELECTABLE</code>と<code>OBJPROP_HIDDEN</code>を設定しておくと、ユーザーが誤ってオブジェクトを移動・削除してしまうのを防げます。EA・インジケーターで自動生成するオブジェクトには、これらを設定しておくのがおすすめです。</p>
<h2><span id="toc11">ObjectSetDouble / ObjectGetDouble — 実数プロパティの設定と取得</span></h2>
<p><code>ObjectSetDouble</code>で価格などのdouble型プロパティを設定し、<code>ObjectGetDouble</code>で取得できます。</p>
<pre><code class="language-mql4">// 水平線の価格を変更する
void MoveHLine(string name, double newPrice)
{
    ObjectSetDouble(0, name, OBJPROP_PRICE, newPrice);
    ChartRedraw();
}

// 水平線の現在の価格を取得する
double GetHLinePrice(string name)
{
    return ObjectGetDouble(0, name, OBJPROP_PRICE);
}
</code></pre>
<p>例えば、ユーザーが手動でドラッグした水平線の位置を<code>ObjectGetDouble</code>で読み取り、EAのストップロスやテイクプロフィットに利用するといった活用ができます。</p>
<pre><code class="language-mql4">void OnTick()
{
    // ユーザーが配置した "SL_Line" の価格を取得
    if(ObjectFind("SL_Line") >= 0)
    {
        double slPrice = ObjectGetDouble(0, "SL_Line", OBJPROP_PRICE);
        Print("ストップロス価格: ", slPrice);
    }
}
</code></pre>
<h2><span id="toc12">ObjectSetString — 文字列プロパティを設定する</span></h2>
<p><code>ObjectSetString</code>は、テキスト内容やフォント名などの文字列型プロパティを変更します。<code>OBJ_LABEL</code>や<code>OBJ_TEXT</code>オブジェクトで特によく使います。</p>
<pre><code class="language-mql4">void CreateTextLabel(string name, string text, int x, int y)
{
    if(ObjectFind(name) >= 0)
        ObjectDelete(name);

    // ラベルオブジェクトを作成
    ObjectCreate(name, OBJ_LABEL, 0, 0, 0);

    // 表示位置を設定（ピクセル座標）
    ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
    ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
    ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_UPPER);

    // テキスト内容を設定
    ObjectSetString(0, name, OBJPROP_TEXT, text);

    // フォントを設定
    ObjectSetString(0, name, OBJPROP_FONT, "Arial Bold");

    // フォントサイズと色
    ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 12);
    ObjectSetInteger(0, name, OBJPROP_COLOR, clrWhite);

    // 選択不可・リスト非表示
    ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
    ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);

    ChartRedraw();
}
</code></pre>
<p><code>OBJ_LABEL</code>はチャートの価格・時刻座標ではなく、<strong>ピクセル座標</strong>で位置を指定するオブジェクトです。<code>OBJPROP_CORNER</code>でどの角を基準にするかを決め、<code>OBJPROP_XDISTANCE</code>と<code>OBJPROP_YDISTANCE</code>でその角からの距離を指定します。チャートをスクロールしても位置が固定されるため、情報表示パネルに最適です。</p>
<h2><span id="toc13">実践サンプル：情報パネルを表示するインジケーター</span></h2>
<p>ここまで学んだ関数を組み合わせて、チャート左上に通貨ペア情報・スプレッド・サーバー時刻を表示する情報パネルインジケーターを作ってみましょう。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| InfoPanel.mq4 - 情報パネル表示インジケーター                      |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property strict

// オブジェクト名のプレフィックス
#define PREFIX "InfoPanel_"

//+------------------------------------------------------------------+
//| ラベル作成ヘルパー関数                                            |
//+------------------------------------------------------------------+
void CreateLabel(string name, int x, int y, string text,
                 color clr=clrWhite, int fontSize=11)
{
    string fullName = PREFIX + name;

    if(ObjectFind(fullName) < 0)
        ObjectCreate(fullName, OBJ_LABEL, 0, 0, 0);

    ObjectSetInteger(0, fullName, OBJPROP_CORNER, CORNER_LEFT_UPPER);
    ObjectSetInteger(0, fullName, OBJPROP_XDISTANCE, x);
    ObjectSetInteger(0, fullName, OBJPROP_YDISTANCE, y);
    ObjectSetString(0, fullName, OBJPROP_TEXT, text);
    ObjectSetString(0, fullName, OBJPROP_FONT, "Consolas");
    ObjectSetInteger(0, fullName, OBJPROP_FONTSIZE, fontSize);
    ObjectSetInteger(0, fullName, OBJPROP_COLOR, clr);
    ObjectSetInteger(0, fullName, OBJPROP_SELECTABLE, false);
    ObjectSetInteger(0, fullName, OBJPROP_HIDDEN, true);
}

//+------------------------------------------------------------------+
//| 背景パネル作成関数                                                |
//+------------------------------------------------------------------+
void CreateBackground()
{
    string name = PREFIX + "BG";

    if(ObjectFind(name) < 0)
        ObjectCreate(name, OBJ_RECTANGLE_LABEL, 0, 0, 0);

    ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_UPPER);
    ObjectSetInteger(0, name, OBJPROP_XDISTANCE, 10);
    ObjectSetInteger(0, name, OBJPROP_YDISTANCE, 20);
    ObjectSetInteger(0, name, OBJPROP_XSIZE, 260);
    ObjectSetInteger(0, name, OBJPROP_YSIZE, 100);
    ObjectSetInteger(0, name, OBJPROP_BGCOLOR, C'30,30,50');
    ObjectSetInteger(0, name, OBJPROP_BORDER_TYPE, BORDER_FLAT);
    ObjectSetInteger(0, name, OBJPROP_COLOR, clrDodgerBlue);
    ObjectSetInteger(0, name, OBJPROP_WIDTH, 1);
    ObjectSetInteger(0, name, OBJPROP_BACK, false);
    ObjectSetInteger(0, name, OBJPROP_SELECTABLE, false);
    ObjectSetInteger(0, name, OBJPROP_HIDDEN, true);
}

//+------------------------------------------------------------------+
//| 初期化                                                            |
//+------------------------------------------------------------------+
int OnInit()
{
    CreateBackground();
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| メイン処理                                                        |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &#038;time[],
                const double &#038;open[],
                const double &#038;high[],
                const double &#038;low[],
                const double &#038;close[],
                const long &#038;tick_volume[],
                const long &#038;volume[],
                const int &#038;spread[])
{
    // 通貨ペアと時間足
    string tfStr = "";
    switch(Period())
    {
        case PERIOD_M1:  tfStr = "M1";  break;
        case PERIOD_M5:  tfStr = "M5";  break;
        case PERIOD_M15: tfStr = "M15"; break;
        case PERIOD_M30: tfStr = "M30"; break;
        case PERIOD_H1:  tfStr = "H1";  break;
        case PERIOD_H4:  tfStr = "H4";  break;
        case PERIOD_D1:  tfStr = "D1";  break;
        case PERIOD_W1:  tfStr = "W1";  break;
        case PERIOD_MN1: tfStr = "MN";  break;
        default:         tfStr = "??";  break;
    }
    CreateLabel("Symbol", 20, 28,
                Symbol() + " / " + tfStr,
                clrDodgerBlue, 13);

    // スプレッド
    double spreadPips = MarketInfo(Symbol(), MODE_SPREAD) / 10.0;
    color spreadClr = (spreadPips < 2.0) ? clrLimeGreen : clrOrangeRed;
    CreateLabel("Spread", 20, 52,
                "Spread: " + DoubleToString(spreadPips, 1) + " pips",
                spreadClr, 11);

    // サーバー時刻
    CreateLabel("Time", 20, 75,
                "Server: " + TimeToString(TimeCurrent(), TIME_DATE|TIME_SECONDS),
                clrSilver, 10);

    ChartRedraw();
    return(rates_total);
}

//+------------------------------------------------------------------+
//| 終了処理                                                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    ObjectsDeleteAll(0, PREFIX);
    ChartRedraw();
}
</code></pre>
<p>このインジケーターをチャートに適用すると、左上にダークブルーの背景パネルが表示され、通貨ペア・時間足・スプレッド・サーバー時刻がリアルタイムで更新されます。スプレッドが2.0pips未満なら緑色、それ以上ならオレンジ色で表示される仕組みです。</p>
<h2><span id="toc14">よくあるミスと対策</span></h2>
<h3><span id="toc15">1. オブジェクト名の重複</span></h3>
<p><code>ObjectCreate</code>は、既に同名のオブジェクトが存在すると<code>false</code>を返して失敗します。オブジェクトを更新したい場合は、先に<code>ObjectFind</code>で存在チェックをするか、<code>ObjectDelete</code>で削除してから再作成しましょう。</p>
<p>上記の実践サンプルのように、既に存在する場合は<code>ObjectCreate</code>をスキップしてプロパティだけ更新するパターンも効率的です。</p>
<h3><span id="toc16">2. ChartRedraw()の呼び忘れ</span></h3>
<p>オブジェクトの作成や変更後に<code>ChartRedraw()</code>を呼ばないと、画面に変更が反映されません。特に<code>OnCalculate</code>や<code>OnTick</code>の中でオブジェクトを操作した場合、最後に必ず<code>ChartRedraw()</code>を呼ぶ習慣をつけましょう。</p>
<pre><code class="language-mql4">// NG: 表示が更新されないことがある
ObjectSetString(0, "label1", OBJPROP_TEXT, "新しいテキスト");

// OK: 確実に画面に反映される
ObjectSetString(0, "label1", OBJPROP_TEXT, "新しいテキスト");
ChartRedraw();
</code></pre>
<h3><span id="toc17">3. OnDeinitでの削除漏れ</span></h3>
<p>インジケーターやEAを削除したとき、作成したオブジェクトがチャートに残ってしまうのはよくあるミスです。<code>OnDeinit</code>関数内で必ずオブジェクトを削除しましょう。</p>
<p>おすすめは、すべてのオブジェクト名に<strong>共通のプレフィックス</strong>を付けて、<code>ObjectsDeleteAll(0, PREFIX)</code>で一括削除する方法です。この方法なら、オブジェクトを追加した際に削除コードの更新を忘れる心配がありません。</p>
<h2><span id="toc18">まとめ</span></h2>
<p>今回はMQL4のチャートオブジェクト関数について解説しました。ポイントを整理します。</p>
<ul>
<li><strong>ObjectCreate</strong>でオブジェクトを作成。同名オブジェクトの存在チェックを忘れずに</li>
<li><strong>ObjectDelete / ObjectsDeleteAll</strong>で削除。プレフィックスを活用した一括削除が便利</li>
<li><strong>ObjectSetInteger</strong>で色・線種・太さ・座標などを設定</li>
<li><strong>ObjectSetDouble / ObjectGetDouble</strong>で価格値の設定・取得</li>
<li><strong>ObjectSetString</strong>でテキスト内容やフォントを変更</li>
<li>操作後は<strong>ChartRedraw()</strong>で画面を再描画</li>
<li><strong>OnDeinit</strong>では必ずオブジェクトを削除して後片付け</li>
</ul>
<p>チャートオブジェクト関数を使いこなせるようになると、EAやインジケーターの視覚的な表現力が大幅にアップします。まずは水平線やテキストラベルなど、シンプルなオブジェクトから試してみてください。慣れてきたら、今回の情報パネルサンプルをベースに、自分だけのカスタムパネルを作ってみましょう！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13059/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91%e3%83%81%e3%83%a3%e3%83%bc%e3%83%88%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e9%96%a2%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e6%94%bb%e7%95%a5/">【MQL4入門】チャートオブジェクト関数を完全攻略！ObjectCreate・ObjectDelete・ObjectSetの使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<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[時系列アクセス関数]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[ローソク足]]></category>
		<category><![CDATA[iClose]]></category>
		<category><![CDATA[iOpen]]></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>
		<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>
		<item>
		<title>【MQL4入門】iRSI関数の使い方を徹底解説！RSIを使ったEA開発の基本とサンプルコード</title>
		<link>https://mql-programing.com/archives/12999/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91irsi%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%81rsi%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fea/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sat, 04 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[iRSI]]></category>
		<category><![CDATA[RSI]]></category>
		<category><![CDATA[テクニカル指標]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=12999</guid>

					<description><![CDATA[<p>RSI（Relative Strength Index）は、FXトレーダーなら一度は使ったことがあるほど人気のテクニカル指標です。「買われすぎ」「売られすぎ」を数値で判断できるため、逆張りトレードの根拠として非常に重宝し [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/12999/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91irsi%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%81rsi%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fea/">【MQL4入門】iRSI関数の使い方を徹底解説！RSIを使ったEA開発の基本とサンプルコード</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>RSI（Relative Strength Index）は、FXトレーダーなら一度は使ったことがあるほど人気のテクニカル指標です。「買われすぎ」「売られすぎ」を数値で判断できるため、逆張りトレードの根拠として非常に重宝します。</p>
<p>MQL4では、<strong>iRSI関数</strong>を使うことで、たった1行のコードでRSIの値を取得できます。この記事では、iRSI関数のパラメータの意味から、実際に動作する逆張りEAのサンプルコードまで、初心者にもわかりやすく徹底解説します！</p>
<h2><span id="toc1">RSIとは？基本をおさらい</span></h2>
<p>RSI（相対力指数）は、一定期間の値動きにおける「上昇幅」と「下降幅」の比率から、相場の過熱感を0〜100の数値で表すオシレーター系指標です。</p>
<h3><span id="toc2">RSIの一般的な判断基準</span></h3>
<ul>
<li><strong>RSI ≧ 70</strong>：買われすぎ → 売りシグナルの候補</li>
<li><strong>RSI ≦ 30</strong>：売られすぎ → 買いシグナルの候補</li>
<li><strong>RSI = 50</strong>付近：方向感なし（中立）</li>
</ul>
<p>計算に使う期間は<strong>14</strong>が最も一般的で、MetaTraderのデフォルト設定でも14が使われています。期間を短くすると感度が高くなりダマシも増え、長くすると滑らかになりますがシグナルが遅れる傾向があります。</p>
<h2><span id="toc3">iRSI関数の書式とパラメータ</span></h2>
<p>MQL4でRSIの値を取得するには、<strong>iRSI関数</strong>を使います。書式は以下のとおりです。</p>
<pre><code class="language-mql4">double iRSI(
    string symbol,        // 通貨ペア名
    int    timeframe,     // 時間足
    int    period,        // RSIの計算期間
    int    applied_price, // 適用価格
    int    shift          // シフト（何本前の足か）
);
</code></pre>
<h3><span id="toc4">各パラメータの詳細</span></h3>
<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, Symbol()</td>
</tr>
<tr>
<td>timeframe</td>
<td>int</td>
<td>時間足を指定する定数</td>
<td>0（現在の時間足）</td>
</tr>
<tr>
<td>period</td>
<td>int</td>
<td>RSIの計算期間</td>
<td>14</td>
</tr>
<tr>
<td>applied_price</td>
<td>int</td>
<td>計算に使う価格の種類</td>
<td>PRICE_CLOSE</td>
</tr>
<tr>
<td>shift</td>
<td>int</td>
<td>何本前の足のRSI値を取得するか</td>
<td>0, 1</td>
</tr>
</tbody>
</table>
<h3><span id="toc5">時間足定数の一覧</span></h3>
<table>
<thead>
<tr>
<th>定数名</th>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>PERIOD_CURRENT</td>
<td>0</td>
<td>現在のチャートの時間足</td>
</tr>
<tr>
<td>PERIOD_M1</td>
<td>1</td>
<td>1分足</td>
</tr>
<tr>
<td>PERIOD_M5</td>
<td>5</td>
<td>5分足</td>
</tr>
<tr>
<td>PERIOD_M15</td>
<td>15</td>
<td>15分足</td>
</tr>
<tr>
<td>PERIOD_M30</td>
<td>30</td>
<td>30分足</td>
</tr>
<tr>
<td>PERIOD_H1</td>
<td>60</td>
<td>1時間足</td>
</tr>
<tr>
<td>PERIOD_H4</td>
<td>240</td>
<td>4時間足</td>
</tr>
<tr>
<td>PERIOD_D1</td>
<td>1440</td>
<td>日足</td>
</tr>
<tr>
<td>PERIOD_W1</td>
<td>10080</td>
<td>週足</td>
</tr>
<tr>
<td>PERIOD_MN1</td>
<td>43200</td>
<td>月足</td>
</tr>
</tbody>
</table>
<h3><span id="toc6">適用価格定数の一覧</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>中央値（(高値+安値)/2）</td>
</tr>
<tr>
<td>PRICE_TYPICAL</td>
<td>5</td>
<td>典型価格（(高値+安値+終値)/3）</td>
</tr>
<tr>
<td>PRICE_WEIGHTED</td>
<td>6</td>
<td>加重終値（(高値+安値+終値+終値)/4）</td>
</tr>
</tbody>
</table>
<h2><span id="toc7">基本的な使い方</span></h2>
<p>まずは最もシンプルなiRSI関数の呼び出し方を見てみましょう。</p>
<pre><code class="language-mql4">void OnTick()
{
    // 現在の足（確定前）のRSI値を取得
    double rsi_current = iRSI(NULL, 0, 14, PRICE_CLOSE, 0);

    // 1本前の足（確定済み）のRSI値を取得
    double rsi_prev = iRSI(NULL, 0, 14, PRICE_CLOSE, 1);

    // ログに出力して確認
    Print("RSI(現在): ", rsi_current, " / RSI(1本前): ", rsi_prev);
}
</code></pre>
<p>ここで重要なのが<strong>shiftパラメータ</strong>の使い分けです。</p>
<ul>
<li><strong>shift=0</strong>：現在形成中のローソク足のRSI値。ティックごとに値が変わる（<strong>未確定値</strong>）</li>
<li><strong>shift=1</strong>：1本前の確定済みローソク足のRSI値。その足が閉じた後は変化しない（<strong>確定値</strong>）</li>
</ul>
<p>EAのエントリー判断では、<strong>shift=1（確定値）を基準に使う</strong>のが一般的です。未確定の値で判断すると、ローソク足が確定する前にシグナルが出たり消えたりして、誤ったエントリーにつながる可能性があります。</p>
<h2><span id="toc8">実践！RSI逆張りEAのサンプルコード</span></h2>
<p>ここからは、RSIの「売られすぎ→反転上昇」で買い、「買われすぎ→反転下降」で売るという逆張りロジックのEAを作ってみましょう。単にRSIが閾値を超えているかどうかだけでなく、<strong>「閾値を下から上に（または上から下に）抜けた瞬間」</strong>を検知するテクニックを使います。</p>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//|                                              RSI_Reversal_EA.mq4 |
//|                        RSI逆張りEAサンプル                         |
//+------------------------------------------------------------------+
#property strict

// === 入力パラメータ ===
input int    RSI_Period      = 14;           // RSI計算期間
input double RSI_UpperLevel  = 70.0;         // 買われすぎライン
input double RSI_LowerLevel  = 30.0;         // 売られすぎライン
input double LotSize         = 0.01;         // ロットサイズ
input int    StopLoss_Pips   = 50;           // ストップロス（pips）
input int    TakeProfit_Pips = 100;          // テイクプロフィット（pips）
input int    MagicNumber     = 12345;        // マジックナンバー

// === グローバル変数 ===
datetime lastBarTime = 0; // 新しい足の検出用

//+------------------------------------------------------------------+
//| Expert initialization function                                     |
//+------------------------------------------------------------------+
int OnInit()
{
    Print("RSI逆張りEA 起動 - Period:", RSI_Period,
          " Upper:", RSI_UpperLevel, " Lower:", RSI_LowerLevel);
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert tick function                                               |
//+------------------------------------------------------------------+
void OnTick()
{
    // --- 新しい足が確定したときだけ処理を行う ---
    if(Time[0] == lastBarTime)
        return;
    lastBarTime = Time[0];

    // --- 既にポジションを持っていたらエントリーしない ---
    if(CountMyOrders() > 0)
        return;

    // --- RSI値を取得 ---
    double rsi1 = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 1); // 1本前（確定）
    double rsi2 = iRSI(NULL, 0, RSI_Period, PRICE_CLOSE, 2); // 2本前（確定）

    // --- pipsをポイントに変換（5桁/3桁ブローカー対応）---
    double point = Point;
    if(Digits == 3 || Digits == 5)
        point = Point * 10;

    double sl, tp;

    // === 買いエントリー条件 ===
    // RSIが「売られすぎライン」を下から上に抜けた瞬間
    if(rsi2 < RSI_LowerLevel &#038;&#038; rsi1 >= RSI_LowerLevel)
    {
        sl = Ask - StopLoss_Pips * point;
        tp = Ask + TakeProfit_Pips * point;

        int ticket = OrderSend(Symbol(), OP_BUY, LotSize, Ask, 3, sl, tp,
                               "RSI Buy", MagicNumber, 0, clrBlue);
        if(ticket > 0)
            Print("買いエントリー成功 RSI(2本前):", rsi2, " RSI(1本前):", rsi1);
        else
            Print("買いエントリー失敗 Error:", GetLastError());
    }

    // === 売りエントリー条件 ===
    // RSIが「買われすぎライン」を上から下に抜けた瞬間
    if(rsi2 > RSI_UpperLevel && rsi1 <= RSI_UpperLevel)
    {
        sl = Bid + StopLoss_Pips * point;
        tp = Bid - TakeProfit_Pips * point;

        int ticket = OrderSend(Symbol(), OP_SELL, LotSize, Bid, 3, sl, tp,
                               "RSI Sell", MagicNumber, 0, clrRed);
        if(ticket > 0)
            Print("売りエントリー成功 RSI(2本前):", rsi2, " RSI(1本前):", rsi1);
        else
            Print("売りエントリー失敗 Error:", GetLastError());
    }
}

//+------------------------------------------------------------------+
//| 自分のEAのポジション数をカウント                                     |
//+------------------------------------------------------------------+
int CountMyOrders()
{
    int count = 0;
    for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
        if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
            if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber)
                count++;
        }
    }
    return count;
}
</code></pre>
<h3><span id="toc9">サンプルコードの4つのポイント</span></h3>
<h3><span id="toc10">① 新しい足の検出で無駄な処理を防止</span></h3>
<p><code>Time[0] == lastBarTime</code> のチェックにより、新しいローソク足が確定したタイミングでのみエントリー判断を行います。ティックごとに何度もオーダーを送るのを防ぎ、安定した動作を実現します。</p>
<h3><span id="toc11">② RSIの「クロス」で瞬間を捉える</span></h3>
<p>単に「RSIが30以下」だけでエントリーすると、RSIが30以下にいる間ずっとシグナルが出続けてしまいます。そこで、<strong>2本前のRSI（rsi2）と1本前のRSI（rsi1）を比較</strong>し、閾値を「抜けた瞬間」だけを検知しています。</p>
<pre><code class="language-mql4">// 例：売られすぎラインを下から上に抜けた瞬間
if(rsi2 < RSI_LowerLevel &#038;&#038; rsi1 >= RSI_LowerLevel)
</code></pre>
<p>この条件は「2本前はまだ30未満だったが、1本前で30以上に回復した」ことを意味します。つまり、売られすぎの状態から反転し始めた瞬間にエントリーできるわけです。</p>
<h3><span id="toc12">③ MagicNumberでEAを識別</span></h3>
<p>MagicNumberを設定することで、複数のEAを同時に稼働させてもポジションの管理が混乱しません。<code>CountMyOrders()</code>関数では、通貨ペアとMagicNumberの両方が一致するポジションだけをカウントしています。</p>
<h3><span id="toc13">④ 5桁ブローカー対応のpips変換</span></h3>
<p>近年のFXブローカーの多くは5桁（3桁）の価格表示を採用しています。<code>Digits == 5</code>の場合は<code>Point * 10</code>として、pips単位の指定が正しく反映されるようにしています。</p>
<h2><span id="toc14">iRSI関数を使うときの注意点</span></h2>
<h3><span id="toc15">shift=0の値は未確定</span></h3>
<p>先ほども触れましたが、shift=0で取得できるRSIの値はティックごとに変化します。エントリー判断に使う場合は、基本的に<strong>shift=1以上の確定値</strong>を使いましょう。</p>
<h3><span id="toc16">マルチタイムフレーム分析への応用</span></h3>
<p>iRSI関数の第2引数（timeframe）を変えることで、現在のチャートとは異なる時間足のRSI値も取得できます。</p>
<pre><code class="language-mql4">// 現在のチャートが5分足でも、日足のRSIを取得できる
double rsi_daily = iRSI(NULL, PERIOD_D1, 14, PRICE_CLOSE, 1);

// 4時間足のRSI
double rsi_h4 = iRSI(NULL, PERIOD_H4, 14, PRICE_CLOSE, 1);
</code></pre>
<p>例えば「日足のRSIが50以上のときだけ、短期足で買いエントリーする」といったフィルターとして活用できます。</p>
<h3><span id="toc17">チャート上のRSIインジケーターとの値一致</span></h3>
<p>iRSI関数で取得した値は、MetaTrader上でRSIインジケーターを表示したときの値と<strong>同じパラメータを指定すれば一致</strong>します。値がずれる場合は、計算期間や適用価格の設定が異なっていないか確認してみてください。</p>
<h2><span id="toc18">まとめ</span></h2>
<p>この記事では、MQL4の<strong>iRSI関数</strong>について、基本から実践まで解説しました。ポイントを振り返りましょう。</p>
<ul>
<li><strong>iRSI関数</strong>は5つの引数（通貨ペア、時間足、期間、適用価格、シフト）を指定してRSI値を取得する</li>
<li>エントリー判断には<strong>shift=1（確定値）</strong>を使うのが基本</li>
<li>RSIの閾値を<strong>「抜けた瞬間」</strong>を検知するには、2本分のRSI値を比較する</li>
<li>timeframeパラメータを活用すれば<strong>マルチタイムフレーム分析</strong>も簡単</li>
<li>MagicNumber管理や5桁ブローカー対応など、<strong>実運用を意識した実装</strong>が大切</li>
</ul>
<p>RSIは非常にシンプルな指標ですが、移動平均線やボリンジャーバンドなど他のインジケーターと組み合わせることで、より精度の高いEAに発展させることができます。まずは今回のサンプルコードをベースに、ストラテジーテスターで動作を確認するところから始めてみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/12999/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91irsi%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%81rsi%e3%82%92%e4%bd%bf%e3%81%a3%e3%81%9fea/">【MQL4入門】iRSI関数の使い方を徹底解説！RSIを使ったEA開発の基本とサンプルコード</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4入門】iBands関数でボリンジャーバンドを使いこなそう！引数・使い方・サンプルコード徹底解説</title>
		<link>https://mql-programing.com/archives/12997/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91ibands%e9%96%a2%e6%95%b0%e3%81%a7%e3%83%9c%e3%83%aa%e3%83%b3%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%90%e3%83%b3%e3%83%89%e3%82%92%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Fri, 03 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[iBands]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[ボリンジャーバンド]]></category>
		<category><![CDATA[インジケーター関数]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=12997</guid>

					<description><![CDATA[<p>ボリンジャーバンドは、移動平均線を中心に「価格の散らばり具合（標準偏差）」を帯（バンド）として表示するテクニカル指標です。MQL4には、このボリンジャーバンドの値をプログラムから簡単に取得できるiBands関数が用意され [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/12997/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91ibands%e9%96%a2%e6%95%b0%e3%81%a7%e3%83%9c%e3%83%aa%e3%83%b3%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%90%e3%83%b3%e3%83%89%e3%82%92%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa/">【MQL4入門】iBands関数でボリンジャーバンドを使いこなそう！引数・使い方・サンプルコード徹底解説</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>ボリンジャーバンドは、移動平均線を中心に「価格の散らばり具合（標準偏差）」を帯（バンド）として表示するテクニカル指標です。MQL4には、このボリンジャーバンドの値をプログラムから簡単に取得できる<strong>iBands関数</strong>が用意されています。</p>
<p>この記事では、iBands関数の引数の意味をひとつずつ丁寧に解説し、基本的な使い方から逆張りEAのサンプルコード、さらに応用テクニックやよくある間違いまで、徹底的にまとめました。ボリンジャーバンドをEAやインジケーターで活用したい方は、ぜひ最後まで読んでみてください。</p>
<h2><span id="toc1">ボリンジャーバンドとは？</span></h2>
<p>ボリンジャーバンドは、アメリカの投資家ジョン・ボリンジャー氏が考案したテクニカル指標で、以下の<strong>3本のライン</strong>で構成されます。</p>
<ul>
<li><strong>ミドルバンド（中間線）</strong>：単純移動平均線（SMA）そのもの</li>
<li><strong>アッパーバンド（上方バンド）</strong>：ミドルバンド ＋ 標準偏差 × n</li>
<li><strong>ロワーバンド（下方バンド）</strong>：ミドルバンド − 標準偏差 × n</li>
</ul>
<p>ここで「n」は標準偏差の倍率で、一般的には<strong>2σ（シグマ）</strong>がよく使われます。統計的には、価格が±2σの範囲に収まる確率は約95.4%とされています。この性質を利用して、バンドの上端・下端にタッチしたら逆張りする戦略や、バンドをブレイクした方向に順張りする戦略などに活用されます。</p>
<h2><span id="toc2">iBands関数の基本構文</span></h2>
<p>MQL4でボリンジャーバンドの値を取得するには、組み込み関数<code>iBands</code>を使います。基本構文は以下のとおりです。</p>
<pre><code class="language-mql4">double iBands(
   string       symbol,           // ① 通貨ペア名
   int          timeframe,        // ② 時間足
   int          period,           // ③ 計算期間
   double       deviation,        // ④ 標準偏差の倍率
   int          bands_shift,      // ⑤ インジケーターのシフト数
   int          applied_price,    // ⑥ 適用価格
   int          mode,             // ⑦ ライン種類
   int          shift             // ⑧ シフト数（何本前のバーか）
);</code></pre>
<p>戻り値は<strong>double型</strong>で、指定した条件のボリンジャーバンドの値（価格）が返されます。引数が8つあるため少し多く感じますが、ひとつずつ見ていけば難しくありません。</p>
<h2><span id="toc3">各引数の詳細解説</span></h2>
<h3><span id="toc4">① symbol（通貨ペア名）</span></h3>
<p>計算対象の通貨ペアを文字列で指定します。現在のチャートの通貨ペアを使いたい場合は<code>NULL</code>または<code>Symbol()</code>を指定します。</p>
<pre><code class="language-mql4">// 現在のチャートの通貨ペアを使う場合
iBands(NULL, ...)
iBands(Symbol(), ...)

// 別の通貨ペアを指定する場合
iBands("USDJPY", ...)</code></pre>
<h3><span id="toc5">② timeframe（時間足）</span></h3>
<p>計算に使う時間足を指定します。現在のチャートの時間足を使う場合は<code>0</code>または<code>PERIOD_CURRENT</code>を指定します。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>PERIOD_CURRENT</td>
<td>0</td>
<td>現在のチャートの時間足</td>
</tr>
<tr>
<td>PERIOD_M1</td>
<td>1</td>
<td>1分足</td>
</tr>
<tr>
<td>PERIOD_M5</td>
<td>5</td>
<td>5分足</td>
</tr>
<tr>
<td>PERIOD_M15</td>
<td>15</td>
<td>15分足</td>
</tr>
<tr>
<td>PERIOD_M30</td>
<td>30</td>
<td>30分足</td>
</tr>
<tr>
<td>PERIOD_H1</td>
<td>60</td>
<td>1時間足</td>
</tr>
<tr>
<td>PERIOD_H4</td>
<td>240</td>
<td>4時間足</td>
</tr>
<tr>
<td>PERIOD_D1</td>
<td>1440</td>
<td>日足</td>
</tr>
<tr>
<td>PERIOD_W1</td>
<td>10080</td>
<td>週足</td>
</tr>
<tr>
<td>PERIOD_MN1</td>
<td>43200</td>
<td>月足</td>
</tr>
</tbody>
</table>
<h3><span id="toc6">③ period（計算期間）</span></h3>
<p>移動平均線の計算に使うバーの本数を指定します。一般的には<strong>20</strong>がよく使われます。期間を短くするとバンドが価格に敏感に反応し、長くすると滑らかになります。</p>
<h3><span id="toc7">④ deviation（標準偏差の倍率）</span></h3>
<p>バンドの幅を決める標準偏差の倍率です。一般的には<strong>2.0</strong>が使われます。1.0を指定すれば±1σ、3.0なら±3σのバンドが取得できます。</p>
<h3><span id="toc8">⑤ bands_shift（インジケーターのシフト数）</span></h3>
<p>ボリンジャーバンド全体を左右にずらす本数です。通常は<strong>0</strong>を指定します。正の値を指定するとバンドが右（未来方向）にずれます。特殊な用途でない限り0で問題ありません。</p>
<h3><span id="toc9">⑥ applied_price（適用価格）</span></h3>
<p>計算に使う価格の種類を指定します。通常は<strong>PRICE_CLOSE（終値）</strong>を使います。</p>
<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>
<h3><span id="toc10">⑦ mode（ライン種類）</span></h3>
<p>取得したいラインを指定します。<strong>iBands関数は1回の呼び出しで1本のラインの値しか返さない</strong>ため、3本すべてを取得するには3回呼び出す必要があります。</p>
<table>
<thead>
<tr>
<th>定数</th>
<th>値</th>
<th>意味</th>
</tr>
</thead>
<tbody>
<tr>
<td>MODE_MAIN</td>
<td>0</td>
<td>ミドルバンド（中間線・移動平均線）</td>
</tr>
<tr>
<td>MODE_UPPER</td>
<td>1</td>
<td>アッパーバンド（上方バンド）</td>
</tr>
<tr>
<td>MODE_LOWER</td>
<td>2</td>
<td>ロワーバンド（下方バンド）</td>
</tr>
</tbody>
</table>
<h3><span id="toc11">⑧ shift（シフト数）</span></h3>
<p>何本前のバーの値を取得するかを指定します。<strong>0が現在のバー</strong>（まだ確定していないバー）、1が1本前の確定済みバー、2が2本前…という意味です。</p>
<p>EA（自動売買）で売買判断に使う場合は、確定済みの値である<strong>shift=1</strong>を使うのが一般的です。shift=0は現在足の値なのでティックごとに変動し、判断がブレやすくなるためです。</p>
<h2><span id="toc12">基本的な使用例</span></h2>
<p>まずは最もシンプルな例として、現在のチャートで期間20・偏差2.0のボリンジャーバンド3本の値を取得してみましょう。</p>
<pre><code class="language-mql4">void OnTick()
{
   // 1本前の確定足でボリンジャーバンドの値を取得
   double upper = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
   double middle = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_MAIN,  1);
   double lower = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, 1);

   // ログに出力して確認
   Print("Upper: ", upper, " | Middle: ", middle, " | Lower: ", lower);
}</code></pre>
<p>このコードでは、3つのiBands呼び出しで<code>mode</code>引数だけを変えて、上方バンド・中間線・下方バンドの3つの値をそれぞれ取得しています。それ以外の引数はすべて同じ値を指定します。</p>
<h2><span id="toc13">実践サンプル：ボリンジャーバンド逆張りEA</span></h2>
<p>ここでは、ボリンジャーバンドの±2σを使ったシンプルな逆張りEAを作ってみましょう。ロジックは以下のとおりです。</p>
<ul>
<li><strong>買いエントリー</strong>：1本前の終値がロワーバンド（-2σ）を下回ったら買い</li>
<li><strong>売りエントリー</strong>：1本前の終値がアッパーバンド（+2σ）を上回ったら売り</li>
<li><strong>決済</strong>：ミドルバンドに到達したら決済</li>
</ul>
<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| ボリンジャーバンド逆張りEA                                         |
//+------------------------------------------------------------------+
#property strict

// 入力パラメーター
input int    BB_Period    = 20;     // ボリンジャーバンドの期間
input double BB_Deviation = 2.0;    // 標準偏差の倍率
input double Lots         = 0.1;    // ロット数
input int    Slippage     = 3;      // スリッページ
input int    MagicNumber  = 12345;  // マジックナンバー

//+------------------------------------------------------------------+
//| OnTick関数                                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // ボリンジャーバンドの各ラインを取得（1本前の確定足）
   double upper  = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_UPPER, 1);
   double middle = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_MAIN,  1);
   double lower  = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_LOWER, 1);

   // 1本前の終値
   double prevClose = Close[1];

   // 現在のポジション数を確認
   int buyCount  = CountOrders(OP_BUY);
   int sellCount = CountOrders(OP_SELL);

   // --- エントリーロジック ---
   // 買いエントリー：終値がロワーバンドを下回った
   if(buyCount == 0 && prevClose < lower)
   {
      int ticket = OrderSend(Symbol(), OP_BUY, Lots, Ask, Slippage, 0, 0,
                             "BB Buy", MagicNumber, 0, clrBlue);
      if(ticket < 0)
         Print("Buy OrderSend Error: ", GetLastError());
   }

   // 売りエントリー：終値がアッパーバンドを上回った
   if(sellCount == 0 &#038;&#038; prevClose > upper)
   {
      int ticket = OrderSend(Symbol(), OP_SELL, Lots, Bid, Slippage, 0, 0,
                             "BB Sell", MagicNumber, 0, clrRed);
      if(ticket < 0)
         Print("Sell OrderSend Error: ", GetLastError());
   }

   // --- 決済ロジック：ミドルバンドに到達したら決済 ---
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MagicNumber) continue;

      // 現在のバーのミドルバンドを取得（決済判断用）
      double currentMiddle = iBands(NULL, 0, BB_Period, BB_Deviation, 0, PRICE_CLOSE, MODE_MAIN, 0);

      if(OrderType() == OP_BUY && Bid >= currentMiddle)
      {
         if(!OrderClose(OrderTicket(), OrderLots(), Bid, Slippage, clrBlue))
            Print("Buy OrderClose Error: ", GetLastError());
      }
      else if(OrderType() == OP_SELL && Ask <= currentMiddle)
      {
         if(!OrderClose(OrderTicket(), OrderLots(), Ask, Slippage, clrRed))
            Print("Sell OrderClose Error: ", GetLastError());
      }
   }
}

//+------------------------------------------------------------------+
//| 指定タイプのポジション数をカウントする関数                          |
//+------------------------------------------------------------------+
int CountOrders(int orderType)
{
   int count = 0;
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;
      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MagicNumber && OrderType() == orderType)
         count++;
   }
   return count;
}</code></pre>
<p>このEAのポイントをまとめます。</p>
<ul>
<li><strong>エントリー判断はshift=1</strong>（確定足）を使い、値がブレないようにしています</li>
<li><strong>決済判断はshift=0</strong>（現在足）を使い、リアルタイムの価格とミドルバンドを比較しています</li>
<li><strong>CountOrders関数</strong>でポジション数を確認し、同方向に重複エントリーしないようにしています</li>
<li><strong>MagicNumber</strong>を使うことで、他のEAのポジションと区別しています</li>
</ul>
<h2><span id="toc14">応用テクニック</span></h2>
<h3><span id="toc15">複数のσを同時に使う</span></h3>
<p>ボリンジャーバンドの±1σ、±2σ、±3σを同時に取得すれば、より細かい分析が可能です。deviation引数を変えるだけで実現できます。</p>
<pre><code class="language-mql4">// ±1σ
double upper1 = iBands(NULL, 0, 20, 1.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower1 = iBands(NULL, 0, 20, 1.0, 0, PRICE_CLOSE, MODE_LOWER, 1);

// ±2σ
double upper2 = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower2 = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, 1);

// ±3σ
double upper3 = iBands(NULL, 0, 20, 3.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower3 = iBands(NULL, 0, 20, 3.0, 0, PRICE_CLOSE, MODE_LOWER, 1);</code></pre>
<p>たとえば「±1σの範囲内ならレンジ相場と判断し取引を控える」「±3σにタッチしたら強い逆張りシグナル」といった使い方ができます。</p>
<h3><span id="toc16">バンド幅でボラティリティを判定する</span></h3>
<p>アッパーバンドとロワーバンドの差を計算すれば、バンド幅（ボラティリティの目安）が分かります。</p>
<pre><code class="language-mql4">double upper  = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);
double lower  = iBands(NULL, 0, 20, 2.0, 0, PRICE_CLOSE, MODE_LOWER, 1);

// バンド幅を計算
double bandWidth = upper - lower;

// バンド幅をポイント単位に変換（通貨ペアの桁数に応じて調整）
double bandWidthPoints = bandWidth / Point;

// ボラティリティ判定の例
if(bandWidthPoints < 200)
{
   Print("スクイーズ状態（低ボラティリティ）：バンド幅 = ", bandWidthPoints, " points");
   // → この後のブレイクアウトに備える
}
else if(bandWidthPoints > 500)
{
   Print("エクスパンション状態（高ボラティリティ）：バンド幅 = ", bandWidthPoints, " points");
   // → トレンドフォロー戦略を検討
}</code></pre>
<p>バンドが極端に狭くなった状態（<strong>スクイーズ</strong>）は、その後大きなトレンドが発生する前兆とされています。バンドが急激に広がった状態（<strong>エクスパンション</strong>）はトレンドが発生中であることを示します。</p>
<h2><span id="toc17">よくある間違いと注意点</span></h2>
<h3><span id="toc18">shift=0は未確定の値</span></h3>
<p>最も多い間違いのひとつが、<code>shift=0</code>の値でエントリー判断をしてしまうことです。shift=0は現在のバー（まだローソク足が確定していない状態）の値なので、ティックが来るたびに値が変わります。</p>
<p>エントリー条件にはshift=1（確定済みのバー）を使うようにしましょう。バックテストとリアルトレードの結果が大きくずれる原因にもなります。</p>
<h3><span id="toc19">MODE定数の取り違え</span></h3>
<p>iBands関数のmode引数で使う定数と、iMACD関数などの他のインジケーター関数のmode定数は名前が似ていても意味が異なる場合があります。iBandsでは<code>MODE_MAIN</code>（0）、<code>MODE_UPPER</code>（1）、<code>MODE_LOWER</code>（2）の3つを使います。</p>
<p>特に<code>MODE_MAIN</code>はiMACD関数でも使われる定数ですが、iBandsではミドルバンド（移動平均線）を意味します。関数ごとにどの定数がどのラインを表すか確認しましょう。</p>
<h3><span id="toc20">マルチタイムフレームでの注意</span></h3>
<p>timeframe引数に現在のチャートと異なる時間足を指定すると、上位足のボリンジャーバンドを取得できます。しかし、いくつか注意点があります。</p>
<pre><code class="language-mql4">// 1時間足チャートで日足のボリンジャーバンドを取得
double dailyUpper = iBands(NULL, PERIOD_D1, 20, 2.0, 0, PRICE_CLOSE, MODE_UPPER, 1);</code></pre>
<ul>
<li>上位足のデータが十分にダウンロードされていないとエラーや不正確な値が返されることがあります</li>
<li>上位足のshift=0は上位足の現在のバーを指すため、確定タイミングがチャート時間足とは異なります</li>
<li>バックテストでは「全ティック」モデルを使わないとマルチタイムフレームの値が正しく取得できない場合があります</li>
</ul>
<h2><span id="toc21">まとめ</span></h2>
<p>この記事では、MQL4の<strong>iBands関数</strong>について、基本構文から各引数の詳細、実践的なEAサンプル、応用テクニックまで解説しました。最後にポイントを整理します。</p>
<ul>
<li>iBands関数は<strong>8つの引数</strong>を持ち、ボリンジャーバンドの値をdouble型で返す</li>
<li><strong>mode引数</strong>でMODE_MAIN（中間線）、MODE_UPPER（上方バンド）、MODE_LOWER（下方バンド）を切り替える</li>
<li>3本のラインを取得するには<strong>iBandsを3回呼び出す</strong>必要がある</li>
<li>エントリー判断には<strong>shift=1</strong>（確定足）を使うのが基本</li>
<li>deviation引数を変えることで、±1σ/±2σ/±3σなど複数のバンドを簡単に取得できる</li>
<li>バンド幅の計算で<strong>ボラティリティの判定</strong>（スクイーズ・エクスパンション）にも活用できる</li>
</ul>
<p>iBands関数はシンプルながらも応用範囲が広い関数です。まずは基本的な使い方をマスターし、他のテクニカル指標と組み合わせたり、エントリー条件を工夫したりして、自分だけのEA開発に挑戦してみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/12997/%e3%80%90mql4%e5%85%a5%e9%96%80%e3%80%91ibands%e9%96%a2%e6%95%b0%e3%81%a7%e3%83%9c%e3%83%aa%e3%83%b3%e3%82%b8%e3%83%a3%e3%83%bc%e3%83%90%e3%83%b3%e3%83%89%e3%82%92%e4%bd%bf%e3%81%84%e3%81%93%e3%81%aa/">【MQL4入門】iBands関数でボリンジャーバンドを使いこなそう！引数・使い方・サンプルコード徹底解説</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQLプログラミング基礎】列挙型とは？配列との違いを理解して使いこなそう！</title>
		<link>https://mql-programing.com/archives/1399/enum/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Fri, 24 Sep 2021 07:11:24 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[列挙型]]></category>
		<category><![CDATA[enum]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1399</guid>

					<description><![CDATA[<p>列挙型とは？ 「文字を数値に変換できたら便利なのになぁ」 という方は、列挙型を使ってみましょう！ 列挙型は、「文字列と数値」の組み合わせを設定できる型です。 例えば、列挙型に「December」と入力すると「12」が返っ [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1399/enum/">【MQLプログラミング基礎】列挙型とは？配列との違いを理解して使いこなそう！</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 class="wp-block-paragraph">列挙型は必須知識ではないけれど、いろんなところで使われているから、この機会に知っておこう！</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc1">列挙型とは？</span></h2>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">「文字を数値に変換できたら便利なのになぁ」</span></strong></p>



<p class="wp-block-paragraph">という方は、列挙型を使ってみましょう！</p>



<p class="wp-block-paragraph">列挙型は、「<strong>文字列と数値」の組み合わせを設定できる型</strong>です。</p>



<p class="wp-block-paragraph">例えば、列挙型に「December」と入力すると「12」が返ってくるというイメージです。</p>



<p class="wp-block-paragraph">また列挙型は、自分で作らなくても事前に準備されているものが多いです。</p>



<p class="wp-block-paragraph">なぜなら、<a href="https://mql-programing.com/function/" title="【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり">関数</a>の引数で使う場合が多いからです。</p>



<p class="wp-block-paragraph">関数の引数は、ある程度固定されたパラメータになっているので、列挙型と相性が良いのですね。</p>



<p class="wp-block-paragraph">そのため、列挙型を理解するだけでも、スムーズに関数を使えるようになります。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">ちなみに列挙型は、<a href="https://mql-programing.com/array/">配列</a>ととてもよく似ています。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">配列は変数の集合体で、列挙型は定数の集合体です。</span></strong></p>



<p class="wp-block-paragraph">定数の集合体のため、列挙型はすでに決まっている数値や文字列を、取り扱うことに優れています。</p>



<p class="wp-block-paragraph">というわけで、今回は列挙型の使い方についてマスターしていきましょう！</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">配列が未履修の方はこちらから</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/array/" 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 fetchpriority="high" decoding="async" src="https://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2021/02/配列の使い方をマスターしよう.jpg?fit=1120%2C630&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></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文と組み合わせる配列を使うと何が便利なのか複雑なプログラムがスッキリする大量のデータを処理できる順番</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/314/array/" 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 class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc2">列挙型と配列の違い</span></h2>



<p class="wp-block-paragraph">列挙型の構造は少し特殊なので、初めは理解しづらいかもしれません。</p>



<p class="wp-block-paragraph">ですが、<strong>配列の要素を取り出すときと同じように考える</strong>と、理解が早いと思います。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">まずは配列と列挙型の違いについてみていきましょう。</p>



<p class="wp-block-paragraph">以下のサンプルプログラムを見てください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>   //配列
   string month_array[4] = { &quot;January&quot;, &quot;February&quot;, &quot;March&quot;, &quot;April&quot; };

   //列挙型を定義する
   enum   month_enum { January, February, March, April };</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">列挙型を見て、「ん？」と思うはずです。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">列挙型には、配列と違って文字列という概念が存在しません。</span></strong></p>



<p class="wp-block-paragraph">その理由を少しずつ見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc3">列挙型と配列のデータの取り出し方法の違い</span></h3>



<p class="wp-block-paragraph">まずは配列のデータの取り出し方法を見ていきましょう。</p>



<p class="wp-block-paragraph">配列のデータを取り出す場合、<strong><span class="marker-under-red">配列のデータの番号を入力する</span>ことで、データを取り出すことができます。</strong></p>



<p class="wp-block-paragraph">例えば以下のようなプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>   //配列
   string month_array[4]  ={ &quot;January&quot;, &quot;February&quot;, &quot;March&quot;, &quot;April&quot; };

   //配列のデータを取り出す
   Print(month_array[0]);     //January
   Print(month_array[1]);     //February
   Print(month_array[2]);     //March
   Print(month_array[3]);     //April</code></pre></div>



<p class="wp-block-paragraph">このように「0,1,2,3」という番号を入力して、データを取り出します。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">次に列挙型のデータの取り出し方法を見ていきましょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>   //列挙型を定義する
   enum month_enum{January,February,March,April};
   
   //列挙型のデータを取り出す
   Print(January);         //0
   Print(February);        //1
   Print(March);           //2
   Print(April);           //3</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように列挙型は、番号の代わりに文字を使用して、データを取り出します。</p>



<p class="wp-block-paragraph">ここで取り出されるのは「January」という文字列ではなく、「0」であることに注意しましょう。</p>



<p class="wp-block-paragraph">列挙型は番号を取り出すことができるのです。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc4">列挙型と配列のデータの取り出し方法のまとめ</span></h3>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">書き方の違いはありますが、列挙型と配列のデータの取り出し方法は、全く逆と言って良いと思います。</span></strong></p>



<p class="wp-block-paragraph">こちらにまとめました。</p>



<figure class="wp-block-table alignfull is-style-stripes"><table><tbody><tr><td><strong>データ型</strong></td><td><strong>データへのアクセス方法</strong></td><td><strong>取り出されるデータ</strong></td></tr><tr><td>配列</td><td>番号（0）</td><td>文字（January）</td></tr><tr><td>列挙型</td><td>文字（January）</td><td>番号（0）</td></tr></tbody></table></figure>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように全く逆になるため、列挙型がイメージしにくい原因にもなっています。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">しかしMQLプログラムは、知らず知らずのうちに列挙型を使っています。</span></strong></p>



<p class="wp-block-paragraph">もし自動売買やインジケータを作った方は、確実に列挙型を使っています。</p>



<p class="wp-block-paragraph">なので、マスターすれば<strong>「なぜこのプログラムで実行できるのだろうか」</strong>が分かってくるようになり、プログラミングが楽しくなると思います。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc5">列挙型の構造と使い方</span></h2>



<p class="wp-block-paragraph">さて列挙型と配列の違いについて見てきましたが、ここからは列挙型について深く見ていきます。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc6">列挙型の構造</span></h3>



<p class="wp-block-paragraph">列挙型は「列挙」というだけあって、<strong><span class="marker-under-red">データに対して番号が順番に設定されます。</span></strong></p>



<p class="wp-block-paragraph">上記の例だと、何も設定していないはずなのに、「January → 0」という番号が設定されています。</p>



<p class="wp-block-paragraph">少しプログラムを見ていきましょう。</p>



<p class="wp-block-paragraph">先程のプログラム（列挙型の定義）を改行して見ます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>   //列挙型を定義する
   enum month_enum{
       January,       //0
       February,      //1
       March,         //2
       April          //3
   };</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように何も設定していない場合は、<strong>上から「０、１、２、３」と順番に番号が設定されます。</strong></p>



<p class="wp-block-paragraph">それでは番号を設定するとどうなるのでしょうか。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>   //列挙型を定義する
   enum month_enum{
       January = 1,       
       February = 2,      
       March = 3,         
       April = 4          
   };</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように番号は「=」で設定できます。</p>



<p class="wp-block-paragraph">これで、「January → 1」という番号が設定できました。</p>



<p class="wp-block-paragraph">ちなみに番号は順番じゃなくてもOKです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>   //列挙型を定義する
   enum month_enum{
       January = -1,       
       February = 400,      
       March = 9,         
       April = 16          
   };</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">マイナスでも昇順でなくても問題ありません。</p>



<p class="wp-block-paragraph">この例だと「January = -1」になっています。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc7">列挙型の使い方</span></h3>



<p class="wp-block-paragraph">ここからは列挙型を具体的に使って見ましょう。</p>



<p class="wp-block-paragraph">まずは先程のプログラムを確認します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>   //列挙型を定義する
   enum month_enum{
       January = 1,
       February = 2,
       March = 3,
       April = 4
   };
   
   //列挙型のデータを取り出す
   Print(January);         //1
   Print(February);        //2
   Print(March);           //3
   Print(April);           //4</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">それではここに、<a href="https://mql-programing.com/if-condition/" title="【MQLプログラミング基礎】条件分岐をif文で書いてみよう！プログラム例あり">if文</a>を使って「今1月なら、&#8221;正月&#8221;と表示する」というプログラムを追加してみます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>   if(Month() == January){
       Print(&quot;正月&quot;);
   }</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように書くことができます。</p>



<p class="wp-block-paragraph">一気にプログラムが読みやすくなったかと思います。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">列挙型を使うことで、プログラムの可読性を高めることができます。</span></strong></p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc8">列挙型はどこで使われているのか</span></h3>



<p class="wp-block-paragraph">先程、<strong>列挙型は知らず知らずのうちに使っている</strong>と言いました。</p>



<p class="wp-block-paragraph">プログラムで<a href="https://mql-programing.com/mql-reference/#constant_number">定数</a>と呼ばれるものは、ほとんどが列挙型で作られています。</p>



<p class="wp-block-paragraph">例えば、<a href="https://mql-programing.com/timeframes_period/">PERIOD_CURRENT</a>です。</p>



<p class="wp-block-paragraph">PERIOD_CURRENTという定数は、「ENUM_TIMEFRAMES」という列挙型で作られています。</p>



<p class="wp-block-paragraph">以下のようにプログラムされています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>enum ENUM_TIMEFRAMES{
   PERIOD_CURRENT = 0,
   PERIOD_M1 = 1,
   PERIOD_M5 = 5,
   PERIOD_M15 = 15,
   PERIOD_M30 = 30,
   PERIOD_H1 = 60,
   PERIOD_H4 = 240,
   PERIOD_D1 = 1440,
   PERIOD_W1 = 10080,
   PERIOD_MN1 = 43200
};</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように列挙型は知らず知らずのうちに使っていることが多いので、マスターすることで、プログラムの意味が見えてくるようになります。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc9">列挙型のプログラム例</span></h2>



<p class="wp-block-paragraph">先程のプログラムの全体を載せておきます。</p>



<p class="wp-block-paragraph">ファイルとしてもダウンロードできますので、よろしければどうぞ。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//|                                               SampleMQL_Enum.mq4 |
//|                                   Copyright 2021, Risa FX Vtuber |
//|                                      https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright &quot;Copyright 2021, Risa FX Vtuber&quot;
#property link      &quot;https://mql-programing.com/&quot;
#property version   &quot;1.00&quot;
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   
   //配列
   string month_array[4]={&quot;January&quot;,&quot;February&quot;,&quot;March&quot;,&quot;April&quot;};
   
   //列挙型
   enum month_enum{January=-1,February=200,March=3,April=4};
   
   //配列のデータを取り出す
   Print(month_array[0]);     //January
   Print(month_array[1]);     //February
   Print(month_array[2]);     //March
   Print(month_array[3]);     //April
   
   //列挙型のデータを取り出す
   Print(January);         //0
   Print(February);        //1
   Print(March);           //2
   Print(April);           //3

   if(Month() == January){
       Print(&quot;正月&quot;);
   }
         
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   
  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   
  }
//+------------------------------------------------------------------+
</code></pre></div>



<p class="wp-block-paragraph">　</p>



<div class="wp-block-cocoon-blocks-button-1 button-block"><a href="https://mql-programing.com/download/1411/" class="btn btn-l btn-circle" target="_self">サンプルプログラムはこちら</a></div>



<p class="wp-block-paragraph">　</p>



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



<p class="wp-block-paragraph">列挙型について、配列と比較しながら確認しました。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">列挙型は「文字」→「番号」に変換するツールです。</span></strong></p>



<p class="wp-block-paragraph">これをプログラムに取り入れるだけで、プログラムの可読性が格段に上がります。</p>



<p class="wp-block-paragraph"><strong>また、プログラムを作っていると、知らず知らずのうちに列挙型を使っているので、この機会にしっかり理解すると良いでしょう。</strong></p>



<p class="wp-block-paragraph">MQLプログラムの書き方がだんだん分かってくるはずです。</p>



<p class="wp-block-paragraph">列挙型をマスターして、可読性の高いプログラムを作成していきましょう！</p>



<p class="wp-block-paragraph">　</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/make_autotrade_by_myself/" title="【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり" 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://mql-programing.com/main29/wp-content/uploads/cocoon-resources/blog-card-cache/a4e701a9f8569faadbe992111b709637.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり</div><div class="blogcard-snippet external-blogcard-snippet">はじめに この記事は、MQLプログラミング基礎を理解している方向けに作成しております。 もしMQLプログラミングがわからないという方は、先に以下の記事を読んでおくことをオススメします。 カテゴリー：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/1605/make_autotrade_by_myself/" 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/mql-reference/" title="MQL4リファレンス【全データ一覧】" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://mql-programing.com/main29/wp-content/uploads/2021/02/MQLリファレンス-160x90.jpg" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://mql-programing.com/main29/wp-content/uploads/2021/02/MQLリファレンス-160x90.jpg 160w, https://mql-programing.com/main29/wp-content/uploads/2021/02/MQLリファレンス-300x169.jpg 300w, https://mql-programing.com/main29/wp-content/uploads/2021/02/MQLリファレンス-1024x576.jpg 1024w, https://mql-programing.com/main29/wp-content/uploads/2021/02/MQLリファレンス-768x432.jpg 768w, https://mql-programing.com/main29/wp-content/uploads/2021/02/MQLリファレンス-120x68.jpg 120w, https://mql-programing.com/main29/wp-content/uploads/2021/02/MQLリファレンス-320x180.jpg 320w, https://mql-programing.com/main29/wp-content/uploads/2021/02/MQLリファレンス.jpg 1120w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">MQL4リファレンス【全データ一覧】</div><div class="blogcard-snippet internal-blogcard-snippet">/*! elementor - v3.6.5 - 27-04-2022 */.e-container.e-container--row .elementor-spacer-inner{width:var(--spacer-size)}.e-</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph">　</p>
<p>投稿 <a href="https://mql-programing.com/archives/1399/enum/">【MQLプログラミング基礎】列挙型とは？配列との違いを理解して使いこなそう！</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQLプログラミング基礎】配列の使い方をマスターしよう！プログラム例あり</title>
		<link>https://mql-programing.com/archives/314/array/</link>
					<comments>https://mql-programing.com/archives/314/array/#respond</comments>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sat, 27 Feb 2021 04:39:11 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[プログラミング]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[配列]]></category>
		<category><![CDATA[MQL]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=314</guid>

					<description><![CDATA[<p>配列とは？ 「プログラミングって、変数をたくさん作らないといけないから大変だなぁ」と思っている方は、ぜひ配列を学習しましょう！ 配列とは、同じ型の変数を１列に並べたものです。 イメージとしては、電車をイメージすると分かり [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/314/array/">【MQLプログラミング基礎】配列の使い方をマスターしよう！プログラム例あり</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-1 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/2020/10/アイコン20190112-150x150.jpg" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p class="wp-block-paragraph">配列は、変数の集合体！電車の連結をイメージしよう！</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc1">配列とは？</span></h2>



<p class="wp-block-paragraph"><strong>「プログラミングって、変数をたくさん作らないといけないから大変だなぁ」</strong>と思っている方は、ぜひ配列を学習しましょう！</p>



<p class="wp-block-paragraph">配列とは、<strong>同じ型の変数を１列に並べたもの</strong>です。</p>



<p class="wp-block-paragraph">イメージとしては、<strong><span class="marker-under-red">電車をイメージする</span></strong>と分かりやすいと思います。</p>



<p class="wp-block-paragraph">電車の車両のように、変数同士を繋げたり、切り離したりできます。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">また、変数は１つの値しか代入できませんが、<strong><span class="marker-under-red">配列にはたくさんの値を代入することができます。</span></strong></p>



<p class="wp-block-paragraph">そのため配列は、複雑なプログラムをスッキリさせたり、大量のデータを一度に処理させたりできます。</p>



<p class="wp-block-paragraph"><strong>「変数がわからないよ！」</strong>という方は、先に下の記事を読んでみると、分かりやすいです。</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/variable/" 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://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2020/10/変数とは.png?fit=2240%2C1260&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLプログラミング基礎】変数とは？使い方を詳しく解説！プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">目次 変数とは？変数の使い方変数に保存されているデータの変更方法MQLプログラミングでの変数の使い方MQLプログラム例（MT4で動作可能）まとめ 変数とは？ 変数は、数字や文字などの、データを保存するための入れ物です。</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/47/variable/" 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 class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc2">配列の書き方</span></h2>



<p class="wp-block-paragraph">配列の書き方は以下のパターンが多いです。</p>



<p class="wp-block-paragraph"><strong>・配列のデータ型の宣言<br>・配列の初期化</strong><br><strong>・配列に値を代入</strong></p>



<p class="wp-block-paragraph">１つずつ見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc3">配列のデータ型の宣言する方法</span></h3>



<p class="wp-block-paragraph">まず初めに、<strong><span class="marker-under-red">配列のデータ型の宣言をします。</span></strong></p>



<p class="wp-block-paragraph">これは変数の時と同じですね。</p>



<p class="wp-block-paragraph">よく使うのは「int型」「double型」「string型」です。</p>



<p class="wp-block-paragraph">宣言するやり方は、パターンが決まっているので、覚えてしまいましょう。</p>



<p class="wp-block-paragraph"><strong>「データ型をよく知らない」という方は、こちらが参考になります。</strong></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/all-data-type/" 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://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2020/10/MQLプログラミング.jpg?fit=1120%2C630&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLリファレンス】データ型一覧　プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">目次 データ型とは整数型(char, short, int, long, uchar, ushort, uint, ulong)使用例注意点とサンプルプログラム論理型(bool)使用例注意点とサンプルプログラムリテラル型</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/76/all-data-type/" 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 class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">配列の宣言は以下のように書きます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列の宣言
   int array[3];</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">これは３つの変数が入る、arrayという名前の配列を宣言しています。</p>



<p class="wp-block-paragraph">ここでは「int型」です。</p>



<p class="wp-block-paragraph">「array[]」のカギ括弧の数値を変えることで、<strong>任意の個数が入る配列を宣言することができます。</strong></p>



<p class="wp-block-paragraph">例えば、「array[1000]」のように宣言すると、1000つの変数が入る配列を作成できます。</p>



<p class="wp-block-paragraph">このように配列は、カギ括弧に数値を入れる必要がありますが、<strong><span class="marker-under-red">基本的には変数と同じように宣言することが分かると思います。</span></strong></p>



<p class="wp-block-paragraph">　</p>


<div class="blank-box bb-tab bb-tips bb-yellow"><span style="font-size: 24px;"><span style="font-size: 24px;"><span style="font-size: 24px;"><strong>【中級者編】静的配列と動的配列</strong></span></span></span><p></p>
<hr>静的配列は上記の例のように、<span style="background-color: #ffcc99;">数値を入れた配列</span>です。<br>int array[3]のように宣言します。<p></p>
<p>動的配列は、<span style="background-color: #ffcc99;">数値を入れない配列</span>です。<br>int array[]のように宣言します。</p>
<p>違いは、データの量を制限するかしないかです。<br>動的配列は、何個でもデータを入れることができます。<br>しかし、特殊な関数を使うため、静的配列で慣れてから使うことをオススメします。</p>
</div>


<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc4">配列を初期化する方法</span></h3>



<p class="wp-block-paragraph">配列は宣言したら、次に初期化を行いましょう。</p>



<p class="wp-block-paragraph">実は初期化しなくても大丈夫なのですが、配列に何もデータが入っていない状態だと、エラーが出てしまうため、初期化はやっておいた方が無難です。</p>



<p class="wp-block-paragraph">int型の場合、<strong><span class="marker-under-red">初期化とは配列の全てに「0」を入れることです。</span></strong></p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">今回は、以下の書き方を紹介します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列の初期化
   ArrayInitialize(array,0);</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">「ArrayInitialize」という関数を使っています。</span></strong></p>



<p class="wp-block-paragraph">この関数は、MQLに組み込まれている関数なので、自分で作成する必要はありません。</p>



<p class="wp-block-paragraph">いつでも使うことができます。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">ArrayInitializeは引数が２つあります。</p>



<p class="wp-block-paragraph"><strong>・１つ目には「array」が入っています。先程宣言した配列です。<br>・２つ目には「0」が入っています。この数値を配列全てに代入します。</strong></p>



<p class="wp-block-paragraph">つまり、「ArrayInitialize(array,0)」と書くだけで、以下のプログラムを実行したことになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列全てに「0」を代入
array[0] = 0;
array[1] = 0;
array[2] = 0;</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように配列の初期化は「ArrayInitialize」だけ覚えていれば、問題ないため、覚えておくと良いでしょう。</p>



<p class="wp-block-paragraph">ちなみに、今回は「int型」の初期化を行いましたが、<strong><span class="marker-under-red">どのデータ型でも「ArrayInitialize」で初期化できます。</span></strong></p>



<p class="wp-block-paragraph">その場合は「0」ではなく、データ型に合った値を書いてください。</p>



<p class="wp-block-paragraph">例えば、string型なら「ArrayInitialize(array, &#8220;&#8221;);」といった感じです。</p>


<div class="blank-box bb-tab bb-point bb-red bb-memo">
<p><strong>配列の番号は0からスタートします。</strong><br />なぜ0から始まるのかは、難しすぎるので割愛します。</p>
</div>


<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc5">配列に値を代入する方法</span></h3>



<p class="wp-block-paragraph">初期化の後は、値を代入していきます。</p>



<p class="wp-block-paragraph">具体的には、以下の２つの方法があります。</p>



<p class="wp-block-paragraph"><strong>・１つ１つ代入する<br>・for文と組み合わせる</strong></p>



<p class="wp-block-paragraph">それぞれ見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc6">１つ１つ代入する</span></h4>



<p class="wp-block-paragraph">このやり方が一番簡単ですが、<strong><span class="marker-under-red">どうしても書く量が多くなってしまう</span></strong>ため、ミスに注意しましょう。</p>



<p class="wp-block-paragraph"><strong>メリットは、自由な値を代入できることです。</strong></p>



<p class="wp-block-paragraph">そのため、文字列を配列として使いたい時などに、この方法でやると良いでしょう。</p>



<p class="wp-block-paragraph">書き方は、以下のように１つ１つ代入します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列に値を代入
array[0] = &quot;りんご&quot;;
array[1] = &quot;ゴリラ&quot;;
array[2] = &quot;ラッパ&quot;;</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">このように、配列の要素に１つ１つ代入します。</p>



<p class="wp-block-paragraph">今回は３つしか書いていませんが、配列の量が多くなると、そのぶん書く量が増えます。</p>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc7">for文と組み合わせる</span></h4>



<p class="wp-block-paragraph">こちらがオススメの方法です。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">配列を使う場合、計算結果を代入することが多いです。</span></strong></p>



<p class="wp-block-paragraph">具体的には以下のようなプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列に値を代入
   for(int i = 0; i &lt; 3; i++)
     {
      array[i] = i+1;
     }</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">今回は、「i+1の計算結果を、配列に代入する」というプログラムを作成しました。</p>



<p class="wp-block-paragraph">このように、一定の計算の結果を代入する場合は、for文と組み合わせると良いでしょう。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">ちなみに、ほとんどのプログラムは、この方法で書かれています。</span></strong></p>



<p class="wp-block-paragraph"><strong>for文をマスターしていないかたは、こちらの記事を参考にしてください。</strong></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/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 loading="lazy" 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="320" height="180" /></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 class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc8">配列を使うと何が便利なのか</span></h2>



<p class="wp-block-paragraph">配列が便利なのは以下３点ができるからです。</p>



<p class="wp-block-paragraph"><strong>・複雑なプログラムがスッキリする<br>・大量のデータを処理できる<br>・順番が重要なデータを扱いやすい</strong></p>



<p class="wp-block-paragraph">それぞれ解説します。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc9">複雑なプログラムがスッキリする</span></h3>



<p class="wp-block-paragraph">たくさんの変数を使う場合を考えます。</p>



<p class="wp-block-paragraph">そのときプログラムは、以下のように複雑なものになるでしょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//変数を宣言し、代入する
int hensu1 = 1;
int hensu2 = 2;
int hensu3 = 3;
int hensu4 = 4;
int hensu5 = 5;
int hensu6 = 6;
int hensu7 = 7;
int hensu8 = 8;
int hensu9 = 9;
int hensu10 = 10;

//変数の値を表示する
Print(hensu1);
Print(hensu2);
Print(hensu3);
Print(hensu4);
Print(hensu5);
Print(hensu6);
Print(hensu7);
Print(hensu8);
Print(hensu9);
Print(hensu10);</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">10個の変数を宣言し、値を代入した後に、表示するプログラムです。</p>



<p class="wp-block-paragraph">この例だと、複雑に見えないかもしれません。</p>



<p class="wp-block-paragraph"><strong>しかしプログラミングのレベルが上がってくると、ものすごく複雑で、読み辛いプログラムになってきます。</strong></p>



<p class="wp-block-paragraph"><strong>「<span class="marker-under-red">配列を使わないと、何をプログラムしているのか分からなくなる</span>」</strong>というレベルです。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">これを配列を使って書くと、以下のようになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列の宣言
   int array[10];

//配列に値を代入
   array[0] = 1;
   array[1] = 2;
   array[2] = 3;
   array[3] = 4;
   array[4] = 5;
   array[5] = 6;
   array[6] = 7;
   array[7] = 8;
   array[8] = 9;
   array[9] = 10;

//配列の値を表示
   Print(array[0]);
   Print(array[1]);
   Print(array[2]);
   Print(array[3]);
   Print(array[4]);
   Print(array[5]);
   Print(array[6]);
   Print(array[7]);
   Print(array[8]);
   Print(array[9]);</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong>先程とほとんど変わってないように見えます。</strong></p>



<p class="wp-block-paragraph">むしろ配列を使ったために、分かりにくくなっているように思えます。</p>



<p class="wp-block-paragraph">ちなみにarray[]が配列です。<strong>今回は10個の変数の集合体です。</strong></p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong>このような配列は、<span class="marker-under-red"><a href="https://mql-programing.com/repeat-for-while/">for文</a>と組み合わせることで、下のようなスッキリとしたプログラムになります。</span></strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列の宣言
   int array[10];

//配列の初期化
   ArrayInitialize(array,0);

//配列に値を代入
   for(int i = 0; i &lt; 10; i++)
     {
      array[i] = i+1;
     }

//配列の値を表示
   for(int i = 0; i &lt; 10; i++)
     {
      Print(array[i]);
     }</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong>行数が減り、少しスッキリしたように見えませんか？</strong></p>



<p class="wp-block-paragraph">プログラムを書く量が減り、疲れも溜まりにくいでしょう。</p>



<p class="wp-block-paragraph">ちなみに、このプログラムを書いていて気づきましたが、<strong><span class="marker-under-red">配列を使った方が書くスピードが圧倒的に早いです。</span></strong></p>



<p class="wp-block-paragraph">というのも、<strong>「代入」と「表示」の部分はコピペで済んだ</strong>からです。</p>



<p class="wp-block-paragraph"><strong>このようにプログラムの見た目がスッキリするだけでなく、書くスピードも格段にアップさせることができるのが配列です。</strong></p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc10">大量のデータを処理できる</span></h3>



<p class="wp-block-paragraph">先程のプログラム例では、10個の変数を使っていましたが、<strong><span class="marker-under-red">今回は1,000,000個の変数を使う場合</span></strong>を考えます。</p>



<p class="wp-block-paragraph">当然ながら、手動で1,000,000個の変数を宣言することは不可能だと思います。</p>



<p class="wp-block-paragraph">宣言できたとしても、取り扱うことは難しいでしょう。</p>



<p class="wp-block-paragraph"><strong>この場合でも配列を利用すると、とても便利です。</strong></p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">以下のプログラム例を見てください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列の宣言
   int array[1000000];

//配列の初期化
   ArrayInitialize(array,0);

//配列に値を代入
   for(int i = 0; i &lt; 1000000; i++)
     {
      array[i] = i+1;
     }

//配列の値を表示
   for(int i = 0; i &lt; 1000000; i++)
     {
      Print(array[i]);
     }</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">先程のプログラム例とほとんど同じです。</p>



<p class="wp-block-paragraph">しかし、<strong>今回のプログラムは1,000,000個の変数の集合体です。</strong></p>



<p class="wp-block-paragraph">2行目を見てください。以下のプログラムが書かれています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>int array[1000000];</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">1,000,000個の値を代入できる配列を宣言しています。</p>



<p class="wp-block-paragraph">この1行だけで、<strong>「<span class="marker-under-red">1,000,000個の変数を宣言した</span>」</strong>ことと同じなのです。</p>



<p class="wp-block-paragraph">このように配列を使うと、<strong>手動では到底できないプログラミングを、とても簡単に書くことができます。</strong></p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc11">順番が重要なデータを扱いやすい</span></h3>



<p class="wp-block-paragraph">順番が重要なデータを扱いやすいことも、配列の特徴です。</p>



<p class="wp-block-paragraph">例えば<strong>「時間」</strong>です。</p>



<p class="wp-block-paragraph"><strong>1時　→　2時　→　3時　→　・・・　→　12時　と、<span class="marker-under-red">順番がとても重要です。</span></strong></p>



<p class="wp-block-paragraph">2時　→　1時　は絶対にあり得ません。</p>



<p class="wp-block-paragraph">この場合でも配列が役に立ちます。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">下のプログラム例を見てください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//配列の宣言
   int times[12];

//配列の初期化
   ArrayInitialize(times,0);

//配列に値を代入
   for(int i = 0; i &lt; 12; i++)
     {
      times[i] = i+1;
     }

//配列の値を表示
   for(int i = 0; i &lt; 12; i++)
     {
      Print(times[i+1]);
     }</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">またまたプログラムの使い回しです（汗）</p>



<p class="wp-block-paragraph">今回は、意味のない1,000,000個の配列ではなく、<strong><span class="marker-under-red">「時間」という順番に意味のある配列です。</span></strong></p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">少し詳しく見ていきましょう。</p>



<p class="wp-block-paragraph"><strong>times[]という配列は、12個の変数の集合体です。</strong></p>



<p class="wp-block-paragraph">times[0]~times[11]　までの配列です。</p>



<p class="wp-block-paragraph">times[0]、times[1]、・・・times[11]　がそれぞれ変数と同じ機能です。</p>



<p class="wp-block-paragraph">そのため、それぞれに値を代入することができます。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong>次に配列の意味を見ていきましょう。</strong></p>



<p class="wp-block-paragraph">・times[0]　は１時を表現している<br>・times[1]　は２時を表現している<br>・times[2]　は３時を表現している</p>



<p class="wp-block-paragraph">というように、<strong><span class="marker-under-red">今回は</span><span class="marker-under-red">配列に意味があります。</span></strong></p>



<p class="wp-block-paragraph">プログラミングする時には、何を表現しているのかを常に考えましょう。</p>



<p class="wp-block-paragraph">ちなみに代入するものは、適切なものを代入してください。</p>



<p class="wp-block-paragraph">例えば、<strong>「times[2]は３時を表現しているため、&#8221;おやつの時間&#8221;という値を代入」</strong>という感じです。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc12">配列のプログラム例</span></h2>



<p class="wp-block-paragraph">配列のプログラム例は、こちらになります。</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link" href="https://mql-programing.com/product/file_array/">サンプルプログラムはこちらから</a></div>
</div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-csharp" data-lang="C#"><code>//+------------------------------------------------------------------+
//|                                              SampleMQL_Array.mq4 |
//|                                    Copyright 2021, 朝日奈りさFXchannel |
//|                                      https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright &quot;Copyright 2021, 朝日奈りさFXchannel&quot;
#property link      &quot;https://mql-programing.com/&quot;
#property version   &quot;1.00&quot;
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//配列の宣言
   int array[10];

//配列の初期化
   ArrayInitialize(array,0);

//配列に値を代入
   for(int i = 0; i &lt; 10; i++)
     {
      array[i] = i+1;
     }

//配列の値を表示
   for(int i = 0; i &lt; 10; i++)
     {
      Print(array[i]);
     }

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---


  }
//+------------------------------------------------------------------+
</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">プログラム例を、OnInit関数に書きました。</p>



<p class="wp-block-paragraph">このプログラムを動かすと、<strong><span class="marker-under-red">コンソールに1~10までの数字が出力されます。</span></strong></p>



<p class="wp-block-paragraph">コンソールは<strong>　MT4　＞　ターミナル　＞　エキスパートタブ　</strong>から確認することができます。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">実行結果は以下のようになります。</p>



<div class="wp-block-image"><figure class="aligncenter size-large"><img loading="lazy" decoding="async" width="832" height="434" src="https://mql-programing.com/main29/wp-content/uploads/2021/02/プログラム例の実行結果.png" alt="" class="wp-image-378" srcset="https://mql-programing.com/main29/wp-content/uploads/2021/02/プログラム例の実行結果.png 832w, https://mql-programing.com/main29/wp-content/uploads/2021/02/プログラム例の実行結果-300x156.png 300w, https://mql-programing.com/main29/wp-content/uploads/2021/02/プログラム例の実行結果-768x401.png 768w" sizes="(max-width: 832px) 100vw, 832px" /></figure></div>



<p class="wp-block-paragraph">ちゃんと1~10までの値が出力されていることが分かります。</p>



<p class="wp-block-paragraph">　</p>



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



<p class="wp-block-paragraph">配列はパッと見、難しそうですが、変数を順番に繋いでいるだけと考えましょう。</p>



<p class="wp-block-paragraph">また、配列の使い方は３ステップあり、これを完了することで、配列を使えるようになります。</p>



<p class="wp-block-paragraph"><strong>・配列のデータ型の宣言<br>・配列の初期化<br>・配列に値を代入</strong></p>



<p class="wp-block-paragraph">特にfor文と組み合わせることができるようになると、プログラミングが楽になって来ますので、マスターすることをオススメします。</p>



<p class="wp-block-paragraph">まずは１つ１つ代入してみて、配列のコツを掴んでください！</p>



<p class="wp-block-paragraph">　</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/make_autotrade_by_myself/" title="【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり" 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/a4e701a9f8569faadbe992111b709637.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり</div><div class="blogcard-snippet external-blogcard-snippet">はじめに この記事は、MQLプログラミング基礎を理解している方向けに作成しております。 もしMQLプログラミングがわからないという方は、先に以下の記事を読んでおくことをオススメします。 カテゴリー：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/1605/make_autotrade_by_myself/" 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/sample_program/" title="MQL4サンプルプログラム" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-160x90.png 160w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-300x169.png 300w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-1024x576.png 1024w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-768x432.png 768w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-1536x864.png 1536w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-2048x1152.png 2048w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-120x68.png 120w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-320x180.png 320w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧.png 1200w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">MQL4サンプルプログラム</div><div class="blogcard-snippet internal-blogcard-snippet">朝日奈りさ作成したMQL4サンプルプログラムの一覧です。当サイトは、MQL4のサンプルプログラムを公開しています。プログラムの内容を見たり、変更したりできます。　当サイトはMQLプログラミングを学習するサイトです。ご利用の際には、プライバシ</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph"></p>
<p>投稿 <a href="https://mql-programing.com/archives/314/array/">【MQLプログラミング基礎】配列の使い方をマスターしよう！プログラム例あり</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mql-programing.com/archives/314/array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり</title>
		<link>https://mql-programing.com/archives/183/function/</link>
					<comments>https://mql-programing.com/archives/183/function/#respond</comments>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Tue, 16 Feb 2021 07:02:09 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[関数]]></category>
		<category><![CDATA[メソッド]]></category>
		<category><![CDATA[プログラミング基礎]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=183</guid>

					<description><![CDATA[<p>関数とは？ 「プログラムは、何度も同じことを書かないといけない」 と思っている方、ぜひ関数を使ってみてください。 関数とは、何度も繰り返すプログラムを、まとめた状態のものです。 事前に、まとまりを作っておくことで、同じプ [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/183/function/">【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり</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 class="wp-block-paragraph">関数をマスターすると、プログラムを書くスピードがアップするよ！</p>
</div></div>



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



<p class="wp-block-paragraph"><span class="marker-under-red"><strong>「プログラムは、何度も同じことを書かないといけない」</strong></span></p>



<p class="wp-block-paragraph">と思っている方、ぜひ関数を使ってみてください。</p>



<p class="wp-block-paragraph">関数とは、何度も繰り返すプログラムを、まとめた状態のものです。</p>



<p class="wp-block-paragraph">事前に、まとまりを作っておくことで、<strong>同じプログラムを何度も書く必要がなくなります。</strong></p>



<p class="wp-block-paragraph">　　</p>


<div class="danger-box">※「変数」と「関数」は全くの別物です。<br>　名前が似ていますが、注意してください。</div>


<div class="wp-block-cocoon-blocks-micro-balloon-2 micro-balloon micro-top micro-copy"><span class="micro-balloon-content micro-content">関連記事</span></div>



<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/variable/" 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://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2020/10/変数とは.png?fit=2240%2C1260&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLプログラミング基礎】変数とは？使い方を詳しく解説！プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">目次 変数とは？変数の使い方変数に保存されているデータの変更方法MQLプログラミングでの変数の使い方MQLプログラム例（MT4で動作可能）まとめ 変数とは？ 変数は、数字や文字などの、データを保存するための入れ物です。</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/47/variable/" 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 class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">たとえば、以下のようなプログラムのまとまりを<strong><span class="marker-under-red">関数</span></strong>と呼びます。</p>



<p class="wp-block-paragraph">足し算をする関数です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//MyFunctionという関数を作成します。
int MyFunction(int number)
  {

　　//numberという変数を読み込んで、suujiと足し算します。
   int suuji = 100;
   suuji = suuji + number;

　　//足し算の結果を返却します。
   return  suuji
  }</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">上記の例では、MyFunctionという関数を作成しました。</p>



<p class="wp-block-paragraph">ちなみに、「MyFunction」じゃなくても、<strong><span class="marker-under-red">関数の名前はなんでもOK</span></strong>です。</p>



<p class="wp-block-paragraph">「朝日奈りさSpecial」とかでOKです。（ダサい）</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">さて、ここからは上記の例を参考にしながら、関数の使い方について詳しく見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc2">関数のプログラム例</span></h2>



<p class="wp-block-paragraph">関数は、プログラム全体で見ると以下のように書きます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//|                                           SampleMQL_function.mq4 |
//|                                    Copyright 2021, 朝日奈りさFXchannel |
//|                                      https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright &quot;Copyright 2021, 朝日奈りさFXchannel&quot;
#property link      &quot;https://mql-programing.com/&quot;
#property version   &quot;1.00&quot;
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   int suuji = MyFunction(10);
   Comment(&quot;\n&quot;,&quot;OnInit()という関数を実行します。&quot;,
   &quot;suujiの結果は&quot;,suuji,&quot;です。&quot;);

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---
   Comment(&quot;\n&quot;,&quot;OnDeinit()という関数を実行します。&quot;);
   

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   int suuji = MyFunction(20);
   Comment(&quot;\n&quot;,&quot;OnTick()という関数を実行します。&quot;,
   &quot;suujiの結果は&quot;,suuji,&quot;です。&quot;);

  }
//+------------------------------------------------------------------+

//MyFunctionという関数を作成します。
int MyFunction(int number)
  {

   //numberという変数を読み込んで、suujiと足し算します。
   int suuji = 100;
   suuji = suuji + number;

   //足し算の結果を返却します。
   return  suuji;
  }
//+------------------------------------------------------------------+
</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">かなり分かりにくいと思いますが、一番下に関数を書いています。46~56行目です。</p>



<p class="wp-block-paragraph">このようにOnInit,OnDeinit,OnTickとは、別の関数として、新しい関数を作ることができます。</p>



<p class="wp-block-paragraph">OnInit,OnDeinit,OnTickについては以下の記事を参考にしてください。</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/mql-basic-structure/" title="【MQLプログラミング】自動売買（EA）の実行タイミングとは？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://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2020/10/MQLプログラミング-1.jpg?fit=1120%2C630&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLプログラミング】自動売買（EA）の実行タイミングとは？MQLプログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">目次 自動売買プログラム（EA）の構造パターンとは大域・大域変数初期化関数（OnInit）プログラム例終了関数（OnDeinit）プログラム例メイン関数（OnTick）プログラム例まとめ 自動売買プログラム（EA）の構造</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/106/mql-basic-structure/" 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 class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc3">関数の基本的な使い方</span></h2>



<p class="wp-block-paragraph">上記のプログラムの16行目を見てください。以下のプログラムが書かれています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>int suuji = MyFunction(10);</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">MyFunctionを使っています。</p>



<p class="wp-block-paragraph">細かく見ていくと、<strong>「suuji」というint型の変数を宣言</strong>しています。</p>



<p class="wp-block-paragraph">その<strong>「suuji」にMyFunctionの計算結果を代入している</strong>といったプログラムです。</p>



<p class="wp-block-paragraph">関数はこのように使うことが多いので、このパターンを覚えておくと良いでしょう。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">「あれ？MyFunction(int number)じゃないの？」</span></strong>と疑問に思った方は、プログラミングのセンスがあります。</p>



<p class="wp-block-paragraph">なぜMyFunction(int number)ではなく、MyFunction(10)と書いているのかを、関数の構造を見ながら解説します。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc4">関数の構造と書き方</span></h2>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="1024" height="576" src="https://mql-programing.com/main29/wp-content/uploads/2021/02/関数3-1024x576.jpg" alt="" class="wp-image-227" srcset="https://mql-programing.com/main29/wp-content/uploads/2021/02/関数3-1024x576.jpg 1024w, https://mql-programing.com/main29/wp-content/uploads/2021/02/関数3-300x169.jpg 300w, https://mql-programing.com/main29/wp-content/uploads/2021/02/関数3-768x432.jpg 768w, https://mql-programing.com/main29/wp-content/uploads/2021/02/関数3-120x68.jpg 120w, https://mql-programing.com/main29/wp-content/uploads/2021/02/関数3-160x90.jpg 160w, https://mql-programing.com/main29/wp-content/uploads/2021/02/関数3-320x180.jpg 320w, https://mql-programing.com/main29/wp-content/uploads/2021/02/関数3.jpg 1120w" sizes="(max-width: 1024px) 100vw, 1024px" /></figure>



<p class="wp-block-paragraph">関数の構造のポイントは以下の３点です。</p>



<ul class="wp-block-list"><li>引数</li><li>関数の内容</li><li>戻り値（返り値）</li></ul>



<p class="wp-block-paragraph">それぞれ見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc5">引数とメリット</span></h3>



<p class="wp-block-paragraph">引数とは、関数の内容で使用する値を、外部から持ってくるために存在します。</p>



<p class="wp-block-paragraph">どういうことかというと、関数の中で変数を宣言しなくて良くなります。</p>



<p class="wp-block-paragraph">メリットは、その関数を使って同じ計算をしたいとき、値を変えてもう一度計算させることができることです。</p>



<p class="wp-block-paragraph">例えば、100+10を計算させたい時、「100+10」とそのまま書いてしまうと、結果は110にしかなりません。</p>



<p class="wp-block-paragraph">しかし関数を使うことで、100+10の「10」の部分を「20」に変えて、「100+20」も計算させることができます。</p>



<p class="wp-block-paragraph">つまり<strong>同じMyFunctionという関数を使って、「100+10」も「100+20」も計算できるのです。</strong></p>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc6">引数の書き方</span></h4>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">引数は、関数名の右横に宣言します。</span></strong></p>



<p class="wp-block-paragraph">上記の例を抜粋すると、以下の部分です。47行目です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>int MyFunction(int number)</code></pre></div>



<p class="wp-block-paragraph">「MyFunction」という関数名の右横に(int number)を書いています。</p>



<p class="wp-block-paragraph">このnumberを<strong><span class="marker-under">引数</span></strong>と言います。</p>



<p class="wp-block-paragraph">ちなみにint numberという書き方は、変数の書き方と同じなので、わかりやすいと思います。</p>



<p class="wp-block-paragraph">引数は、関数の内容で使用される変数です。別の値を代入することもできます。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc7">関数の内容</span></h3>



<p class="wp-block-paragraph">関数の内容は、計算させるルールを書きます。</p>



<p class="wp-block-paragraph">上記の例だと、<strong><span class="marker-under-red">「100+引数」というルールを書いています。</span></strong></p>



<p class="wp-block-paragraph">何度も計算させたいことを書くと良いでしょう。</p>


<div class="info-box"><span class="fz-24px"><strong>関数の内容を書くコツ</strong></span><br />プログラムを書く順番として、関数を書くのは、完成の一歩手前です。<br />最初は上からプログラムを書いていって、何度も同じ計算をしている場合、関数にまとめるとスッキリします。<br />また、関数にしておくことで、次に作るプログラムに応用できるので、プログラムの作成がどんどん楽になっていきます。</div>


<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc8">戻り値（返り値）</span></h3>



<p class="wp-block-paragraph">最後に戻り値です。返り値とも呼ばれます。</p>



<p class="wp-block-paragraph">戻り値は、<strong><span class="marker-under"><span class="marker-under-red">関数の計算結果を出力する時に使います。</span></span></strong></p>



<p class="wp-block-paragraph">これによって、<strong>関数で計算させるだけでなく、計算結果を引き継ぐことができます。</strong></p>



<p class="wp-block-paragraph">少しずつ見ていきましょう。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">まずは書き方です。</p>



<p class="wp-block-paragraph">戻り値の書き方は以下のようなパターンが多いです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//関数を作成
int MyFunction(int number)
  {

   //関数の内容を書く

   //戻り値を出力
   return  suuji;
  }</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">ポイントは2つあります。</p>



<ul class="wp-block-list"><li><strong><span class="marker-under-red">戻り値の型の宣言</span></strong></li><li><strong><span class="marker-under-red">戻り値の値を出力</span></strong></li></ul>



<p class="wp-block-paragraph">それぞれ解説します。</p>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc9">戻り値の型の宣言</span></h4>



<p class="wp-block-paragraph">まず2行目の「int MyFunction(int number)」ですが、一番左に「int」が宣言されています。</p>



<p class="wp-block-paragraph">これはMyFunctionという関数が計算した結果、int型の変数を出力することを表しています。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">つまり、戻り値の型は「int型」になるのです。</span></strong></p>



<p class="wp-block-paragraph">ちなみに変数の型であれば、なんでも設定することができます。</p>



<p class="wp-block-paragraph">変数の一覧は以下が参考になります。</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/all-data-type/" 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://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2020/10/MQLプログラミング.jpg?fit=1120%2C630&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLリファレンス】データ型一覧　プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">目次 データ型とは整数型(char, short, int, long, uchar, ushort, uint, ulong)使用例注意点とサンプルプログラム論理型(bool)使用例注意点とサンプルプログラムリテラル型</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/76/all-data-type/" 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 class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc10">戻り値の値を出力</span></h4>



<p class="wp-block-paragraph">上記のプログラムの8行目をご覧ください。</p>



<p class="wp-block-paragraph">suujiという変数を「return」しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>return  suuji;</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">returnとは、変数や値を戻す（返す or 出力する）ために使うものです。</p>



<p class="wp-block-paragraph">ほとんどの場合、プログラムの最後に書かれています。</p>



<p class="wp-block-paragraph">このように書くことで、MyFunction関数は、int型のsuujiを戻すことができます。</p>



<p class="wp-block-paragraph">　</p>



<h4 class="wp-block-heading"><span id="toc11">「戻す」とは？</span></h4>



<p class="wp-block-paragraph">先ほどから何度も「戻す」という言葉を使っていますが、プログラミング界では一般的な言葉です。</p>



<p class="wp-block-paragraph">関数を使うときに、「処理が戻ってくる」という意味から使われています。</p>



<p class="wp-block-paragraph">どういうことかというと、関数を使うと、処理が関数に飛びます。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">関数を使う時、以下のように使います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>int suuji = MyFunction(10);</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">MyFunctionに「10」を入力し、計算した結果をsuujiに代入します。</p>



<p class="wp-block-paragraph">「MyFunctionに「10」を入力する」段階で、処理が一時的にMyFunctionに飛びます。</p>



<p class="wp-block-paragraph">そしてMyFunctionの処理が終わった後（suujiが出力された後）、処理が戻ってきます。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">この辺りは言葉で解説するのは難しいので、プログラム例を載せておきます。</p>



<p class="wp-block-paragraph">この2つのプログラムの違いは、関数を使っているか使っていないかですが、全く同じ処理をします。</p>



<p class="wp-block-paragraph">ぜひ見比べてみてください。</p>



<p class="wp-block-paragraph">16~17行目あたりが違っています。</p>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">関数を使っていない場合</span></strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//|                                           SampleMQL_function.mq4 |
//|                                    Copyright 2021, 朝日奈りさFXchannel |
//|                                      https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright &quot;Copyright 2021, 朝日奈りさFXchannel&quot;
#property link      &quot;https://mql-programing.com/&quot;
#property version   &quot;1.00&quot;
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   int suuji = 100;
   suuji = suuji + 10;

   Comment(&quot;\n&quot;,&quot;OnInit()という関数を実行します。&quot;,
   &quot;suujiの結果は&quot;,suuji,&quot;です。&quot;);

//---
   return(INIT_SUCCEEDED);
  }</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">関数を使った場合</span></strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//|                                           SampleMQL_function.mq4 |
//|                                    Copyright 2021, 朝日奈りさFXchannel |
//|                                      https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright &quot;Copyright 2021, 朝日奈りさFXchannel&quot;
#property link      &quot;https://mql-programing.com/&quot;
#property version   &quot;1.00&quot;
#property strict
//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---
   int suuji = MyFunction(10);

   Comment(&quot;\n&quot;,&quot;OnInit()という関数を実行します。&quot;,
   &quot;suujiの結果は&quot;,suuji,&quot;です。&quot;);

//---
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+

//MyFunctionという関数を作成します。
int MyFunction(int number)
  {

   //numberという変数を読み込んで、suujiと足し算します。
   int suuji = 100;
   suuji = suuji + number;

   //足し算の結果を返却します。
   return  suuji;
  }
//+------------------------------------------------------------------+
</code></pre></div>



<p class="wp-block-paragraph">　</p>



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



<p class="wp-block-paragraph"><strong><span class="marker-under-red">関数は計算のルールをまとめたプログラムです。</span></strong></p>



<p class="wp-block-paragraph">今回は足し算のルールを作ってみました。</p>



<p class="wp-block-paragraph">関数には3つのポイントがあり、これをマスターすれば関数を使いこなすことができるでしょう。</p>



<ul class="wp-block-list"><li><strong>引数</strong></li><li><strong>関数の内容</strong></li><li><strong>戻り値（返り値）</strong></li></ul>



<p class="wp-block-paragraph">関数は正直難しいです。</p>



<p class="wp-block-paragraph">初心者のかたは、関数を使うことは意識せず、まずはプログラムを作ってみましょう。</p>



<p class="wp-block-paragraph">　</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/make_autotrade_by_myself/" title="【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり" 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/a4e701a9f8569faadbe992111b709637.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり</div><div class="blogcard-snippet external-blogcard-snippet">はじめに この記事は、MQLプログラミング基礎を理解している方向けに作成しております。 もしMQLプログラミングがわからないという方は、先に以下の記事を読んでおくことをオススメします。 カテゴリー：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/1605/make_autotrade_by_myself/" 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/sample_program/" title="MQL4サンプルプログラム" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-160x90.png 160w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-300x169.png 300w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-1024x576.png 1024w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-768x432.png 768w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-1536x864.png 1536w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-2048x1152.png 2048w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-120x68.png 120w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-320x180.png 320w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧.png 1200w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">MQL4サンプルプログラム</div><div class="blogcard-snippet internal-blogcard-snippet">朝日奈りさ作成したMQL4サンプルプログラムの一覧です。当サイトは、MQL4のサンプルプログラムを公開しています。プログラムの内容を見たり、変更したりできます。　当サイトはMQLプログラミングを学習するサイトです。ご利用の際には、プライバシ</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>
<p>投稿 <a href="https://mql-programing.com/archives/183/function/">【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mql-programing.com/archives/183/function/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
		<item>
		<title>【MQLプログラミング基礎】繰り返し文を書いてみよう！プログラム例あり</title>
		<link>https://mql-programing.com/archives/139/repeat-for-while/</link>
					<comments>https://mql-programing.com/archives/139/repeat-for-while/#respond</comments>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Mon, 12 Oct 2020 02:59:27 +0000</pubDate>
				<category><![CDATA[【初級編】MQLプログラミング基礎]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[繰り返し]]></category>
		<category><![CDATA[for]]></category>
		<category><![CDATA[while]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=139</guid>

					<description><![CDATA[<p>繰り返しとは？ MQLプログラミングでは、全く同じ処理を、何度も繰り返し実行できると、とても便利です。 たとえば、「100個のポジションを決済する」という処理を考えると、100回同じ処理をしなければなりません。 そのよう [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/139/repeat-for-while/">【MQLプログラミング基礎】繰り返し文を書いてみよう！プログラム例あり</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 class="wp-block-paragraph">繰り返しはプログラミングの基礎中の基礎です。しっかり理解しましょう！</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc1">繰り返しとは？</span></h2>



<p class="wp-block-paragraph">MQLプログラミングでは、全く同じ処理を、何度も繰り返し実行できると、とても便利です。</p>



<p class="wp-block-paragraph">たとえば、<strong>「100個のポジションを決済する」という処理を考えると、100回同じ処理をしなければなりません。</strong></p>



<p class="wp-block-paragraph">そのような、全く同じ処理を繰り返し行うことができる機能があります。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">それが、「for文」と「while文」です。</span></strong></p>



<p class="wp-block-paragraph">そこで今回は、for文とwhile文の書き方を解説します。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc2">for文の書き方</span></h2>



<p class="wp-block-paragraph">for文は<strong>「〇〇という条件に当てはまる限り、××を実行し続ける」</strong>というイメージで書きます。</p>



<p class="wp-block-paragraph">〇〇は条件式と呼ばれ、<a href="https://mql-programing.com/if-condition/">if文</a>にも同様の条件式が使われます。</p>



<p class="wp-block-paragraph">一般的には以下のようにプログラミングします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>for(変数の初期化; 条件式; 変数の更新)
  {
    繰り返し行いたい処理内容
  }</code></pre></div>



<p class="wp-block-paragraph">for文の（）内は、3つに分割されます。</p>



<p class="wp-block-paragraph"><strong>・変数の初期化<br>・条件式<br>・変数の更新</strong></p>



<p class="wp-block-paragraph">それぞれ解説します。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc3">変数の初期化</span></h3>



<p class="wp-block-paragraph">その名の通り、変数を初期化します。</p>



<p class="wp-block-paragraph">たとえば、「int i = 0;」と書き、iという変数を0に初期化します。</p>



<p class="wp-block-paragraph">もし、iという変数を、for文より上で宣言しているなら、「i = 0;」だけでOKです。</p>



<p class="wp-block-paragraph">変数を初期化する理由は、<strong>次の条件式で、この変数を使うからです。</strong></p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc4">条件式</span></h3>



<p class="wp-block-paragraph">条件式を記述するのですが、<strong><span class="marker-under-red">ポイントとしては、上記の変数を条件式に含めること</span></strong>です。</p>



<p class="wp-block-paragraph">たとえば、「i &lt; 100;」と書き、この条件式が正しい（true）の場合、｛｝内のプログラムを実行します。</p>



<p class="wp-block-paragraph">ここだけみると、<a href="https://mql-programing.com/if-condition/">if文の考え方</a>と同じですね。</p>



<p class="wp-block-paragraph">iを条件式に含める理由は、条件式が正しい（ture）のままだと、無限に繰り返しが起こり、for文が終了しなくなるため、条件式を誤り（false）になるようにさせたいからです。</p>



<p class="wp-block-paragraph"><strong>iを更新することによって、条件式を誤りにさせるようにできます。</strong></p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc5">変数の更新</span></h3>



<p class="wp-block-paragraph">変数を更新します。</p>



<p class="wp-block-paragraph">for文は繰り返し実行されますので、<strong><span class="marker-under-red">変数の更新も繰り返し行われます。</span></strong></p>



<p class="wp-block-paragraph">ここで変数を更新することによって、条件式が誤り（false）となり、for文を終了することができるようになります。</p>



<p class="wp-block-paragraph">たとえば、「i++」と書きます。</p>



<p class="wp-block-paragraph">これは、iの値を1増やすという処理です。「i = i + 1」と書いても同様の処理になります。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc6">for文のプログラム例</span></h3>



<p class="wp-block-paragraph">上記の例をまとめると、以下のようにプログラムできます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>for(int i = 0; i &lt; 100; i++)
  {
    i が 0~100 まで増え続け、合計で100回実行される
  }</code></pre></div>



<p class="wp-block-paragraph">「変数の初期化」「条件式」「変数の更新」を適切に設計することで、自由自在に繰り返しをさせることができます。</p>



<p class="wp-block-paragraph">慣れるまでは、プログラム例をコピペして、使ってみると良いでしょう。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc7">while文の書き方</span></h2>



<p class="wp-block-paragraph">繰り返しは、for文以外にも「while文」があります。</p>



<p class="wp-block-paragraph"><strong>while文の考え方は、for文と似た感じですが、書き方が大きく異なります。</strong></p>



<p class="wp-block-paragraph">「変数の初期化」「変数の更新」は（）内ではなく、｛｝に書きます。</p>



<p class="wp-block-paragraph">一般的には以下のようにプログラムします。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>変数の初期化

while(条件式)
  {
    繰り返し行いたい処理内容
    変数の更新
  }</code></pre></div>



<p class="wp-block-paragraph">for文と違い、（）内には条件式だけ書きます。</p>



<p class="wp-block-paragraph">注意点としては、変数の更新を書き忘れることがあります。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">書き忘れると、無限ループが発生するので、処理が思うように進まない可能性があります。</span></strong></p>



<p class="wp-block-paragraph">また、エラーも出ないので、無限ループが発生している箇所を探すのが大変です。</p>



<p class="wp-block-paragraph">そのため、私はfor文を使うことをオススメします。</p>



<p class="wp-block-paragraph">　</p>



<h3 class="wp-block-heading"><span id="toc8">while文のプログラム例</span></h3>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>int i = 0; //変数の初期化

while(i &lt; 100)    //条件式
  {
    i++;    //変数の更新
  }</code></pre></div>



<p class="wp-block-paragraph">「変数の更新」を書き忘れると無限ループが発生します。</p>



<p class="wp-block-paragraph">while文を書くときには注意しましょう。</p>



<p class="wp-block-paragraph">　</p>



<h2 class="wp-block-heading"><span id="toc9">サンプルプログラム</span></h2>



<p class="wp-block-paragraph">for文とwhile文のサンプルプログラムです。</p>



<p class="wp-block-paragraph">for文の繰り返しは、チャート上に表示されます。</p>



<p class="wp-block-paragraph">while文の繰り返しは、ログに表示されます。</p>



<p class="wp-block-paragraph">下記のプログラムをコピペすることで利用可能ですが、ダウンロードもできます。</p>



<div class="wp-block-buttons is-content-justification-center is-layout-flex wp-block-buttons-is-layout-flex">
<div class="wp-block-button"><a class="wp-block-button__link" href="https://mql-programing.com/product/file_for_while/">サンプルプログラムはこちらから</a></div>
</div>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//|                                          SampleMQL_for&while.mq4 |
//|                                    Copyright 2020, 朝日奈りさFXchannel |
//|                                      https://mql-programing.com/ |
//+------------------------------------------------------------------+
#property copyright &quot;Copyright 2020, 朝日奈りさFXchannel&quot;
#property link      &quot;https://mql-programing.com/&quot;
#property version   &quot;1.00&quot;
#property strict

//大域変数を宣言
int j = 0; //while文用の変数

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//for文の例
   for(int i = 0; i &lt; 100; i++)
     {
      Comment(&quot;これはfor文の &quot;,i+1,&quot; 回目の繰り返しです。&quot;);
     }

//while文の例
   while(j &lt; 100)
     {
      Print(&quot;これはwhile文の &quot;,j+1,&quot; 回目の繰り返しです。&quot;);
      j++;
     }
     
//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

  }
//+------------------------------------------------------------------+
</code></pre></div>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph">実行結果は以下のようになります。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">〇for文の実行結果</span></strong></p>



<figure class="wp-block-image size-large is-resized"><img loading="lazy" decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2020/10/for文の結果.png" alt="" class="wp-image-147" width="826" height="426"/></figure>



<p class="wp-block-paragraph">　</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">〇while文の結果</span></strong></p>



<figure class="wp-block-image size-large"><img loading="lazy" decoding="async" width="825" height="461" src="https://mql-programing.com/main29/wp-content/uploads/2020/10/while文の結果.png" alt="" class="wp-image-148" srcset="https://mql-programing.com/main29/wp-content/uploads/2020/10/while文の結果.png 825w, https://mql-programing.com/main29/wp-content/uploads/2020/10/while文の結果-300x168.png 300w, https://mql-programing.com/main29/wp-content/uploads/2020/10/while文の結果-768x429.png 768w, https://mql-programing.com/main29/wp-content/uploads/2020/10/while文の結果-120x68.png 120w, https://mql-programing.com/main29/wp-content/uploads/2020/10/while文の結果-160x90.png 160w, https://mql-programing.com/main29/wp-content/uploads/2020/10/while文の結果-320x180.png 320w" sizes="(max-width: 825px) 100vw, 825px" /></figure>



<p class="wp-block-paragraph">　</p>



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



<p class="wp-block-paragraph">MQLプログラミング基礎として、繰り返し文（for文、while文）を解説しました。</p>



<p class="wp-block-paragraph">ポイントは以下の3点です。</p>



<p class="wp-block-paragraph"><strong>・変数の初期化<br>・条件式<br>・変数の更新</strong></p>



<p class="wp-block-paragraph">これらをうまく設計することで、繰り返しを自由自在に使うことができるようになります。</p>



<p class="wp-block-paragraph">サンプルプログラムのパラメータを変更して、繰り返しの便利さを体験してみてください！</p>



<p class="wp-block-paragraph">　</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/make_autotrade_by_myself/" title="【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり" 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/a4e701a9f8569faadbe992111b709637.jpg" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり</div><div class="blogcard-snippet external-blogcard-snippet">はじめに この記事は、MQLプログラミング基礎を理解している方向けに作成しております。 もしMQLプログラミングがわからないという方は、先に以下の記事を読んでおくことをオススメします。 カテゴリー：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/1605/make_autotrade_by_myself/" 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/sample_program/" title="MQL4サンプルプログラム" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-160x90.png 160w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-300x169.png 300w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-1024x576.png 1024w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-768x432.png 768w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-1536x864.png 1536w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-2048x1152.png 2048w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-120x68.png 120w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧-320x180.png 320w, https://mql-programing.com/main29/wp-content/uploads/2021/04/サンプルプログラム一覧.png 1200w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">MQL4サンプルプログラム</div><div class="blogcard-snippet internal-blogcard-snippet">朝日奈りさ作成したMQL4サンプルプログラムの一覧です。当サイトは、MQL4のサンプルプログラムを公開しています。プログラムの内容を見たり、変更したりできます。　当サイトはMQLプログラミングを学習するサイトです。ご利用の際には、プライバシ</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p class="wp-block-paragraph"></p>
<p>投稿 <a href="https://mql-programing.com/archives/139/repeat-for-while/">【MQLプログラミング基礎】繰り返し文を書いてみよう！プログラム例あり</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
					<wfw:commentRss>https://mql-programing.com/archives/139/repeat-for-while/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
			</item>
	</channel>
</rss>
