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

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>定数 アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/category/mql-reference/constant/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4】通貨ペア情報を取得する定数と関数を完全解説！ENUM_SYMBOL_INFO_INTEGER / ENUM_SYMBOL_INFO_DOUBLEの使い方</title>
		<link>https://mql-programing.com/archives/13086/%e3%80%90mql4%e3%80%91%e9%80%9a%e8%b2%a8%e3%83%9a%e3%82%a2%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e5%ae%9a%e6%95%b0%e3%81%a8%e9%96%a2%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 30 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[通貨ペア情報]]></category>
		<category><![CDATA[ENUM定数]]></category>
		<category><![CDATA[SymbolInfoInteger]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[SymbolInfoDouble]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13086</guid>

					<description><![CDATA[<p>はじめに EA（自動売買）やカスタムインジケーターを作成するとき、「現在のスプレッドはいくつ？」「最小ロット数は？」「ストップレベルは？」など、通貨ペア（シンボル）のさまざまな情報をプログラムから取得したい場面がたくさん [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13086/%e3%80%90mql4%e3%80%91%e9%80%9a%e8%b2%a8%e3%83%9a%e3%82%a2%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e5%ae%9a%e6%95%b0%e3%81%a8%e9%96%a2%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8/">【MQL4】通貨ペア情報を取得する定数と関数を完全解説！ENUM_SYMBOL_INFO_INTEGER / ENUM_SYMBOL_INFO_DOUBLEの使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<h2><span id="toc1">はじめに</span></h2>
<p>EA（自動売買）やカスタムインジケーターを作成するとき、「現在のスプレッドはいくつ？」「最小ロット数は？」「ストップレベルは？」など、<strong>通貨ペア（シンボル）のさまざまな情報</strong>をプログラムから取得したい場面がたくさんあります。</p>
<p>MQL4では、こうした通貨ペアの情報を取得するために<strong>SymbolInfoInteger関数</strong>と<strong>SymbolInfoDouble関数</strong>が用意されています。そして、それぞれの関数で「何の情報を取得するか」を指定するために使うのが、<strong>ENUM_SYMBOL_INFO_INTEGER</strong>と<strong>ENUM_SYMBOL_INFO_DOUBLE</strong>という列挙型（enum）の定数です。</p>
<p>この記事では、これらの定数と関数の使い方を、実践的なコードサンプルを交えてわかりやすく解説します。</p>
<h2><span id="toc2">SymbolInfoInteger関数とENUM_SYMBOL_INFO_INTEGERとは</span></h2>
<h3><span id="toc3">関数の基本構文</span></h3>
<p><code>SymbolInfoInteger</code>関数は、指定した通貨ペアの<strong>整数型（long型）のプロパティ情報</strong>を取得する関数です。2つの書き方があります。</p>
<pre><code class="language-mql5">// 書き方① 戻り値で直接値を受け取る
long SymbolInfoInteger(
   string symbol,                        // 通貨ペア名
   ENUM_SYMBOL_INFO_INTEGER prop_id       // 取得したいプロパティの識別子
);

// 書き方② 成功/失敗をboolで受け取り、値は第3引数に格納
bool SymbolInfoInteger(
   string symbol,                        // 通貨ペア名
   ENUM_SYMBOL_INFO_INTEGER prop_id,      // 取得したいプロパティの識別子
   long &amp; var                             // 値を受け取る変数
);</code></pre>
<p>書き方②では、関数の戻り値が<code>bool</code>（true/false）になり、取得に成功したかどうかを判定できます。エラーハンドリングを丁寧に行いたい場合はこちらがおすすめです。</p>
<h3><span id="toc4">よく使うENUM_SYMBOL_INFO_INTEGERの定数一覧</span></h3>
<p>以下に、EA開発で特によく使う定数をまとめました。</p>
<table border="1" cellpadding="8" 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><code>SYMBOL_DIGITS</code></td>
<td>価格の小数点以下の桁数</td>
<td>価格の正規化（NormalizeDouble）に使用</td>
</tr>
<tr>
<td><code>SYMBOL_SPREAD</code></td>
<td>現在のスプレッド（ポイント単位）</td>
<td>スプレッドフィルターの実装</td>
</tr>
<tr>
<td><code>SYMBOL_SPREAD_FLOAT</code></td>
<td>変動スプレッドかどうか（bool）</td>
<td>スプレッドの監視方法の判断</td>
</tr>
<tr>
<td><code>SYMBOL_TRADE_STOPS_LEVEL</code></td>
<td>ストップレベル（ポイント単位）</td>
<td>SL/TPの最小距離チェック</td>
</tr>
<tr>
<td><code>SYMBOL_TRADE_FREEZE_LEVEL</code></td>
<td>フリーズレベル（ポイント単位）</td>
<td>決済価格付近での注文変更制限</td>
</tr>
<tr>
<td><code>SYMBOL_TRADE_MODE</code></td>
<td>取引モード（売買が許可されているか等）</td>
<td>取引可能かどうかの判定</td>
</tr>
<tr>
<td><code>SYMBOL_TRADE_EXEMODE</code></td>
<td>注文執行モード</td>
<td>成行 / 即時 / マーケット執行の判定</td>
</tr>
<tr>
<td><code>SYMBOL_SWAP_MODE</code></td>
<td>スワップの計算方法</td>
<td>スワップ計算ロジックの分岐</td>
</tr>
<tr>
<td><code>SYMBOL_SWAP_ROLLOVER3DAYS</code></td>
<td>3日分のスワップが付く曜日</td>
<td>スワップ戦略の参考</td>
</tr>
<tr>
<td><code>SYMBOL_SELECT</code></td>
<td>気配値表示で選択されているか</td>
<td>マルチ通貨EAでのシンボル確認</td>
</tr>
<tr>
<td><code>SYMBOL_TIME</code></td>
<td>直近のサーバー時間（Tick受信時刻）</td>
<td>データの鮮度チェック</td>
</tr>
</tbody>
</table>
<h3><span id="toc5">SymbolInfoIntegerの使用例</span></h3>
<p>SymbolInfoInteger関数では、SYMBOL_DIGITS で小数点以下の桁数、SYMBOL_SPREAD でスプレッド、SYMBOL_TRADE_STOPS_LEVEL でストップレベル、SYMBOL_TRADE_FREEZE_LEVEL でフリーズレベルなどの情報を取得できます。以下にコードサンプルを示します。</p>
<pre><code class="language-mql5">#property strict

void OnInit()
{
   string symbol = Symbol();

   // 小数点以下の桁数を取得
   int digits = (int)SymbolInfoInteger(symbol, SYMBOL_DIGITS);
   Print("小数点以下の桁数: ", digits);

   // 現在のスプレッドを取得
   int spread = (int)SymbolInfoInteger(symbol, SYMBOL_SPREAD);
   Print("スプレッド: ", spread, " ポイント");

   // ストップレベルを取得
   int stopLevel = (int)SymbolInfoInteger(symbol, SYMBOL_TRADE_STOPS_LEVEL);
   Print("ストップレベル: ", stopLevel, " ポイント");

   // フリーズレベルを取得
   int freezeLevel = (int)SymbolInfoInteger(symbol, SYMBOL_TRADE_FREEZE_LEVEL);
   Print("フリーズレベル: ", freezeLevel, " ポイント");

   // 変動スプレッドかどうか
   bool isFloatSpread = (bool)SymbolInfoInteger(symbol, SYMBOL_SPREAD_FLOAT);
   Print("変動スプレッド: ", isFloatSpread ? "はい" : "いいえ");
}</code></pre>
<p><strong>ポイント：</strong><code>SymbolInfoInteger</code>の戻り値は<code>long</code>型なので、<code>int</code>や<code>bool</code>として使いたい場合は、上記のように<strong>キャスト（型変換）</strong>を行いましょう。ENUM_SYMBOL_TRADE_EXECUTIONなどの列挙型の返り値を受け取る場合は、返り値を対応する列挙型にキャスト（型変換）して変数に代入します。</p>
<h2><span id="toc6">SymbolInfoDouble関数とENUM_SYMBOL_INFO_DOUBLEとは</span></h2>
<h3><span id="toc7">関数の基本構文</span></h3>
<p>SymbolInfoDouble関数は、指定した通貨ペアに関するプロパティ情報(double型)を取得します。この関数で取得する通貨ペアのプロパティ情報の識別子は ENUM_SYMBOL_INFO_DOUBLE 列挙値から選択します。こちらも2つの書き方があります。</p>
<pre><code class="language-mql5">// 書き方① 戻り値で直接値を受け取る
double SymbolInfoDouble(
   string symbol,                        // 通貨ペア名
   ENUM_SYMBOL_INFO_DOUBLE prop_id        // 取得したいプロパティの識別子
);

// 書き方② 成功/失敗をboolで受け取り、値は第3引数に格納
bool SymbolInfoDouble(
   string symbol,                        // 通貨ペア名
   ENUM_SYMBOL_INFO_DOUBLE prop_id,       // 取得したいプロパティの識別子
   double &amp; var                           // 値を受け取る変数
);</code></pre>
<h3><span id="toc8">よく使うENUM_SYMBOL_INFO_DOUBLEの定数一覧</span></h3>
<p>ENUM_SYMBOL_INFO_DOUBLEには、SYMBOL_BID（Bid売値）、SYMBOL_ASK（Ask買値）、SYMBOL_LAST（直近の約定価格）などの価格情報のほか、各種取引条件の定数が含まれています。</p>
<table border="1" cellpadding="8" 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><code>SYMBOL_BID</code></td>
<td>現在のBid（売値）</td>
<td>売り注文の基準価格</td>
</tr>
<tr>
<td><code>SYMBOL_ASK</code></td>
<td>現在のAsk（買値）</td>
<td>買い注文の基準価格</td>
</tr>
<tr>
<td><code>SYMBOL_POINT</code></td>
<td>1ポイントの価格単位</td>
<td>SL/TPの距離計算</td>
</tr>
<tr>
<td><code>SYMBOL_TRADE_TICK_VALUE</code></td>
<td>1Tickの価値（口座通貨建て）</td>
<td>損益計算</td>
</tr>
<tr>
<td><code>SYMBOL_TRADE_TICK_SIZE</code></td>
<td>最小価格変動幅</td>
<td>価格の丸め処理</td>
</tr>
<tr>
<td><code>SYMBOL_TRADE_CONTRACT_SIZE</code></td>
<td>1ロットあたりの契約サイズ</td>
<td>ポジションサイズ計算</td>
</tr>
<tr>
<td><code>SYMBOL_VOLUME_MIN</code></td>
<td>最小取引ロット数</td>
<td>ロット数のバリデーション</td>
</tr>
<tr>
<td><code>SYMBOL_VOLUME_MAX</code></td>
<td>最大取引ロット数</td>
<td>ロット数のバリデーション</td>
</tr>
<tr>
<td><code>SYMBOL_VOLUME_STEP</code></td>
<td>ロット数の刻み幅</td>
<td>ロット数の正規化</td>
</tr>
<tr>
<td><code>SYMBOL_SWAP_LONG</code></td>
<td>買いスワップ</td>
<td>スワップの確認・計算</td>
</tr>
<tr>
<td><code>SYMBOL_SWAP_SHORT</code></td>
<td>売りスワップ</td>
<td>スワップの確認・計算</td>
</tr>
<tr>
<td><code>SYMBOL_MARGIN_INITIAL</code></td>
<td>初期証拠金</td>
<td>資金管理</td>
</tr>
</tbody>
</table>
<h3><span id="toc9">SymbolInfoDoubleの使用例</span></h3>
<pre><code class="language-mql5">#property strict

void OnInit()
{
   string symbol = Symbol();

   // Bid / Ask を取得
   double bid = SymbolInfoDouble(symbol, SYMBOL_BID);
   double ask = SymbolInfoDouble(symbol, SYMBOL_ASK);
   Print("Bid: ", bid, " / Ask: ", ask);

   // ポイントサイズを取得
   double point = SymbolInfoDouble(symbol, SYMBOL_POINT);
   Print("1ポイント: ", point);

   // ロット関連情報を取得
   double minLot  = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MIN);
   double maxLot  = SymbolInfoDouble(symbol, SYMBOL_VOLUME_MAX);
   double lotStep = SymbolInfoDouble(symbol, SYMBOL_VOLUME_STEP);
   Print("最小ロット: ", minLot, " / 最大ロット: ", maxLot, " / 刻み: ", lotStep);

   // スワップ情報を取得
   double swapLong  = SymbolInfoDouble(symbol, SYMBOL_SWAP_LONG);
   double swapShort = SymbolInfoDouble(symbol, SYMBOL_SWAP_SHORT);
   Print("買いスワップ: ", swapLong, " / 売りスワップ: ", swapShort);
}</code></pre>
<h2><span id="toc10">MarketInfo関数との違い ― なぜSymbolInfoXXXを使うべきか</span></h2>
<p>MQL4には、古くから<code>MarketInfo()</code>関数が存在し、通貨ペアの情報を取得できました。しかし、<code>SymbolInfoInteger</code> / <code>SymbolInfoDouble</code>を使うことをおすすめします。その理由は以下の通りです。</p>
<ul>
<li><strong>型の正確性：</strong>MarketInfo()はすべての値をdouble型で返しますが、SymbolInfoIntegerはlong型を返すため、整数値の精度が保たれ、型チェックが正確になります。</li>
<li><strong>MQL5との互換性：</strong>MT4とMT5の両方で動作するコードを書きたい場合は、SymbolInfoDouble()を使うほうがよいとされています。MQL4ではMarketInfo関数でも同様にポイントサイズを取得できますが、MQL4/5共通でSymbolInfoDouble関数が使えるので、そちらを使っておけばよいでしょう。</li>
<li><strong>エラーハンドリング：</strong>書き方②（bool戻り値版）を使えば、情報が取得できなかった場合を明確に判定できます。</li>
</ul>
<pre><code class="language-mql5">// &#x274c; 古い書き方（MarketInfo）
double spread = MarketInfo(Symbol(), MODE_SPREAD);
double point  = MarketInfo(Symbol(), MODE_POINT);

// &#x2705; 新しい書き方（SymbolInfoXXX）※推奨
int    spread = (int)SymbolInfoInteger(Symbol(), SYMBOL_SPREAD);
double point  = SymbolInfoDouble(Symbol(), SYMBOL_POINT);</code></pre>
<h2><span id="toc11">【実践】通貨ペア情報を一括表示するサンプルEA</span></h2>
<p>最後に、ここまで学んだ内容を活用して、チャートに適用した通貨ペアの主要情報をログに一括出力するサンプルEAを紹介します。</p>
<pre><code class="language-mql5">//+------------------------------------------------------------------+
//| SymbolInfoViewer.mq4                                             |
//| 通貨ペアの主要情報を一括表示するサンプルEA                         |
//+------------------------------------------------------------------+
#property strict

void OnInit()
{
   string sym = Symbol();

   Print("=== ", sym, " の通貨ペア情報 ===");

   // --- Integer型の情報 ---
   Print("小数桁数 (Digits): ",
         (int)SymbolInfoInteger(sym, SYMBOL_DIGITS));

   Print("スプレッド: ",
         (int)SymbolInfoInteger(sym, SYMBOL_SPREAD), " point");

   Print("変動スプレッド: ",
         (bool)SymbolInfoInteger(sym, SYMBOL_SPREAD_FLOAT));

   Print("ストップレベル: ",
         (int)SymbolInfoInteger(sym, SYMBOL_TRADE_STOPS_LEVEL), " point");

   Print("フリーズレベル: ",
         (int)SymbolInfoInteger(sym, SYMBOL_TRADE_FREEZE_LEVEL), " point");

   // 取引実行モードの取得（列挙型へのキャスト）
   ENUM_SYMBOL_TRADE_EXECUTION exeMode
      = (ENUM_SYMBOL_TRADE_EXECUTION)SymbolInfoInteger(sym, SYMBOL_TRADE_EXEMODE);
   Print("取引執行モード: ", EnumToString(exeMode));

   // --- Double型の情報 ---
   Print("Bid: ", SymbolInfoDouble(sym, SYMBOL_BID));
   Print("Ask: ", SymbolInfoDouble(sym, SYMBOL_ASK));
   Print("Point: ", SymbolInfoDouble(sym, SYMBOL_POINT));

   Print("最小ロット: ", SymbolInfoDouble(sym, SYMBOL_VOLUME_MIN));
   Print("最大ロット: ", SymbolInfoDouble(sym, SYMBOL_VOLUME_MAX));
   Print("ロット刻み: ", SymbolInfoDouble(sym, SYMBOL_VOLUME_STEP));
   Print("契約サイズ: ", SymbolInfoDouble(sym, SYMBOL_TRADE_CONTRACT_SIZE));

   Print("TickValue: ", SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_VALUE));
   Print("TickSize: ",  SymbolInfoDouble(sym, SYMBOL_TRADE_TICK_SIZE));

   Print("買いスワップ: ", SymbolInfoDouble(sym, SYMBOL_SWAP_LONG));
   Print("売りスワップ: ", SymbolInfoDouble(sym, SYMBOL_SWAP_SHORT));

   Print("=== 情報取得完了 ===");
}</code></pre>
<p>このEAをチャートにセットすると、「エキスパート」タブにその通貨ペアの主要な情報が一覧で出力されます。自分のブローカーの設定値を確認したり、EA開発時のデバッグに非常に便利です。</p>
<h2><span id="toc12">注意点とTips</span></h2>
<ul>
<li><strong>気配値表示ウィンドウに注意：</strong>ストラテジーテスターの中ではSymbolInfoやMarketInfoが取得できない時があり、気配値表示ウィンドウに表示されていない通貨ペアでは値が0.0になることがあります。マルチ通貨EAを作る場合は、対象通貨ペアが気配値表示に含まれているか事前に確認しましょう。</li>
<li><strong>ストップレベルが0の場合：</strong>一部のブローカーではストップレベルが0に設定されています。この場合、SL/TPの距離制限がないという意味ではなく、スプレッド分は最低限必要になることが多いため、実際のテストで確認しましょう。</li>
<li><strong>EnumToString関数の活用：</strong>ENUM_SYMBOL_TRADE_EXECUTION型などの列挙型を受け取る場合は、SymbolInfoIntegerの返り値を対応する列挙型にキャストして変数に代入します。<code>EnumToString()</code>を使うと定数名が文字列で返されるのでデバッグに便利です。</li>
</ul>
<h2><span id="toc13">まとめ</span></h2>
<p>今回は、MQL4で通貨ペア情報を取得するための<strong>ENUM_SYMBOL_INFO_INTEGER</strong>と<strong>ENUM_SYMBOL_INFO_DOUBLE</strong>の定数、そして<strong>SymbolInfoInteger関数</strong>と<strong>SymbolInfoDouble関数</strong>の使い方を解説しました。</p>
<p>ポイントを整理すると：</p>
<ul>
<li><strong>整数型の情報</strong>（桁数、スプレッド、ストップレベルなど）→ <code>SymbolInfoInteger()</code></li>
<li><strong>小数型の情報</strong>（価格、ポイント、ロット数、スワップなど）→ <code>SymbolInfoDouble()</code></li>
<li>古い<code>MarketInfo()</code>より型安全でMQL5互換の<code>SymbolInfoXXX</code>を使おう</li>
<li>bool戻り値版を使えば、エラーハンドリングもしっかり行える</li>
</ul>
<p>通貨ペアの情報を正確に取得できるようになると、ロット計算やSL/TP設定、スプレッドフィルターなど、EA開発のあらゆる場面で役立ちます。ぜひ今回のサンプルコードを実際に動かして、自分のブローカーの値を確認してみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13086/%e3%80%90mql4%e3%80%91%e9%80%9a%e8%b2%a8%e3%83%9a%e3%82%a2%e6%83%85%e5%a0%b1%e3%82%92%e5%8f%96%e5%be%97%e3%81%99%e3%82%8b%e5%ae%9a%e6%95%b0%e3%81%a8%e9%96%a2%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8/">【MQL4】通貨ペア情報を取得する定数と関数を完全解説！ENUM_SYMBOL_INFO_INTEGER / ENUM_SYMBOL_INFO_DOUBLEの使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4】チャート設定定数を完全理解！ENUM_CHART_PROPERTY_INTEGER・STRING・DOUBLEの使い方</title>
		<link>https://mql-programing.com/archives/13083/%e3%80%90mql4%e3%80%91%e3%83%81%e3%83%a3%e3%83%bc%e3%83%88%e8%a8%ad%e5%ae%9a%e5%ae%9a%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e7%90%86%e8%a7%a3%ef%bc%81enum_chart_property_integer%e3%83%bbstring%e3%83%bbd/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 29 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[定数]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[ChartSetInteger]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[チャート設定]]></category>
		<category><![CDATA[ENUM_CHART_PROPERTY]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13083</guid>

					<description><![CDATA[<p>EAやインジケーターを開発していると、「チャートの背景色をプログラムから変更したい」「グリッドを非表示にしたい」「ローソク足の色を統一したい」といった場面に出くわすことがあります。 MQL4では、チャートの見た目や動作を [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13083/%e3%80%90mql4%e3%80%91%e3%83%81%e3%83%a3%e3%83%bc%e3%83%88%e8%a8%ad%e5%ae%9a%e5%ae%9a%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e7%90%86%e8%a7%a3%ef%bc%81enum_chart_property_integer%e3%83%bbstring%e3%83%bbd/">【MQL4】チャート設定定数を完全理解！ENUM_CHART_PROPERTY_INTEGER・STRING・DOUBLEの使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>EAやインジケーターを開発していると、「チャートの背景色をプログラムから変更したい」「グリッドを非表示にしたい」「ローソク足の色を統一したい」といった場面に出くわすことがあります。</p>
<p>MQL4では、チャートの見た目や動作を制御するための<strong>チャートプロパティ定数</strong>が用意されています。この記事では、<strong>ENUM_CHART_PROPERTY_INTEGER</strong>、<strong>ENUM_CHART_PROPERTY_STRING</strong>、<strong>ENUM_CHART_PROPERTY_DOUBLE</strong>の3種類の列挙型を中心に、チャート設定の操作方法をわかりやすく解説します。</p>
<h2><span id="toc1">チャートプロパティを操作する関数の全体像</span></h2>
<p>MQL4では、チャートプロパティの値を「設定する関数」と「取得する関数」がデータ型ごとにペアで用意されています。</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>
<th>対応する列挙型</th>
</tr>
</thead>
<tbody>
<tr>
<td>整数型（long）</td>
<td>ChartSetInteger()</td>
<td>ChartGetInteger()</td>
<td>ENUM_CHART_PROPERTY_INTEGER</td>
</tr>
<tr>
<td>浮動小数点型（double）</td>
<td>ChartSetDouble()</td>
<td>ChartGetDouble()</td>
<td>ENUM_CHART_PROPERTY_DOUBLE</td>
</tr>
<tr>
<td>文字列型（string）</td>
<td>ChartSetString()</td>
<td>ChartGetString()</td>
<td>ENUM_CHART_PROPERTY_STRING</td>
</tr>
</tbody>
</table>
<p>これらの関数の第1引数にはチャートIDを指定します。<strong>0を指定すると現在のチャート</strong>を意味します。第2引数に、これから説明する列挙型の定数を渡すことで、どのプロパティを操作するかを指定します。</p>
<h2><span id="toc2">ENUM_CHART_PROPERTY_INTEGER — 整数型プロパティ</span></h2>
<p>最も種類が多く、よく使うのがこの整数型プロパティです。チャートの表示/非表示の切り替え、色の設定、モードの変更など幅広い操作ができます。</p>
<h3><span id="toc3">表示モード系のプロパティ</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>設定値</th>
</tr>
</thead>
<tbody>
<tr>
<td>CHART_MODE</td>
<td>チャートの表示タイプ</td>
<td>CHART_BARS / CHART_CANDLES / CHART_LINE</td>
</tr>
<tr>
<td>CHART_FOREGROUND</td>
<td>価格チャートを前面に表示するか</td>
<td>true / false</td>
</tr>
<tr>
<td>CHART_SHIFT</td>
<td>右端にシフト（余白）を設けるか</td>
<td>true / false</td>
</tr>
<tr>
<td>CHART_AUTOSCROLL</td>
<td>自動スクロール（最新バーへ自動移動）</td>
<td>true / false</td>
</tr>
<tr>
<td>CHART_SCALE</td>
<td>チャートのスケール（0〜5）</td>
<td>0（縮小）〜 5（拡大）</td>
</tr>
</tbody>
</table>
<h3><span id="toc4">表示要素の ON/OFF 系プロパティ</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>CHART_SHOW_GRID</td>
<td>グリッド線の表示/非表示</td>
</tr>
<tr>
<td>CHART_SHOW_PERIOD_SEP</td>
<td>期間区切り線の表示/非表示</td>
</tr>
<tr>
<td>CHART_SHOW_ASK_LINE</td>
<td>Ask（買値）ラインの表示/非表示</td>
</tr>
<tr>
<td>CHART_SHOW_BID_LINE</td>
<td>Bid（売値）ラインの表示/非表示</td>
</tr>
<tr>
<td>CHART_SHOW_DATE_SCALE</td>
<td>横軸（日時スケール）の表示/非表示</td>
</tr>
<tr>
<td>CHART_SHOW_PRICE_SCALE</td>
<td>縦軸（価格スケール）の表示/非表示</td>
</tr>
<tr>
<td>CHART_SHOW_OHLC</td>
<td>四本値（OHLC）の表示/非表示</td>
</tr>
<tr>
<td>CHART_SHOW_ONE_CLICK</td>
<td>ワンクリックトレードパネルの表示/非表示</td>
</tr>
<tr>
<td>CHART_SHOW_VOLUMES</td>
<td>出来高の表示モード</td>
</tr>
</tbody>
</table>
<h3><span id="toc5">色の設定用プロパティ</span></h3>
<p>チャートの配色もすべてプログラムから制御できます。color型の値を指定します。</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>CHART_COLOR_BACKGROUND</td>
<td>チャートの背景色</td>
</tr>
<tr>
<td>CHART_COLOR_FOREGROUND</td>
<td>前景色（軸やテキストの色）</td>
</tr>
<tr>
<td>CHART_COLOR_GRID</td>
<td>グリッド線の色</td>
</tr>
<tr>
<td>CHART_COLOR_CHART_UP</td>
<td>上昇バー / ローソク足の外枠・ヒゲの色</td>
</tr>
<tr>
<td>CHART_COLOR_CHART_DOWN</td>
<td>下降バー / ローソク足の外枠・ヒゲの色</td>
</tr>
<tr>
<td>CHART_COLOR_CANDLE_BULL</td>
<td>陽線（Bull）の実体の色</td>
</tr>
<tr>
<td>CHART_COLOR_CANDLE_BEAR</td>
<td>陰線（Bear）の実体の色</td>
</tr>
<tr>
<td>CHART_COLOR_CHART_LINE</td>
<td>ラインチャートの色</td>
</tr>
<tr>
<td>CHART_COLOR_ASK</td>
<td>Askラインの色</td>
</tr>
<tr>
<td>CHART_COLOR_BID</td>
<td>Bidラインの色</td>
</tr>
<tr>
<td>CHART_COLOR_STOP_LEVEL</td>
<td>ストップレベルの色</td>
</tr>
</tbody>
</table>
<h3><span id="toc6">読み取り専用のプロパティ</span></h3>
<p>以下のプロパティは値の取得のみ可能で、プログラムから変更はできません（読み取り専用 = r/o）。</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>CHART_WINDOWS_TOTAL</td>
<td>チャートウィンドウの総数（サブウィンドウ含む）</td>
</tr>
<tr>
<td>CHART_WIDTH_IN_BARS</td>
<td>チャートの幅（バー数単位）</td>
</tr>
<tr>
<td>CHART_WIDTH_IN_PIXELS</td>
<td>チャートの幅（ピクセル単位）</td>
</tr>
<tr>
<td>CHART_HEIGHT_IN_PIXELS</td>
<td>チャートの高さ（ピクセル単位）</td>
</tr>
<tr>
<td>CHART_FIRST_VISIBLE_BAR</td>
<td>画面上で最初に見えるバーの番号</td>
</tr>
<tr>
<td>CHART_VISIBLE_BARS</td>
<td>画面上に表示されているバーの本数</td>
</tr>
<tr>
<td>CHART_IS_OBJECT</td>
<td>オブジェクトとしてのチャートかどうか</td>
</tr>
</tbody>
</table>
<h3><span id="toc7">実践サンプル：チャートの配色をカスタマイズする</span></h3>
<p>以下はEAの<code>OnInit()</code>内でチャートの見た目を一括変更する例です。</p>
<pre><code class="language-mql4">int OnInit()
{
   // チャート表示をローソク足に変更
   ChartSetInteger(0, CHART_MODE, CHART_CANDLES);
   
   // 背景色をダークブルーに設定
   ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrMidnightBlue);
   
   // グリッドを非表示にする（背景色と同色でも可）
   ChartSetInteger(0, CHART_SHOW_GRID, false);
   
   // 陽線（Bull）の色設定
   ChartSetInteger(0, CHART_COLOR_CANDLE_BULL, clrDodgerBlue);
   ChartSetInteger(0, CHART_COLOR_CHART_UP, clrDodgerBlue);
   
   // 陰線（Bear）の色設定
   ChartSetInteger(0, CHART_COLOR_CANDLE_BEAR, clrMediumOrchid);
   ChartSetInteger(0, CHART_COLOR_CHART_DOWN, clrMediumOrchid);
   
   // Askラインを表示する
   ChartSetInteger(0, CHART_SHOW_ASK_LINE, true);
   
   // 設定を反映
   ChartRedraw();
   
   return(INIT_SUCCEEDED);
}</code></pre>
<p><strong>ポイント：</strong>ChartSetInteger()を呼んだだけでは画面にすぐ反映されないことがあります。確実に描画を更新したい場合は、最後に<code>ChartRedraw()</code>を呼びましょう。</p>
<h2><span id="toc8">ENUM_CHART_PROPERTY_DOUBLE — 浮動小数点型プロパティ</span></h2>
<p>Double型のプロパティは数が少なく、主にチャートの価格範囲を取得するために使います。</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>備考</th>
</tr>
</thead>
<tbody>
<tr>
<td>CHART_PRICE_MIN</td>
<td>チャート上の最小価格</td>
<td>読み取り専用</td>
</tr>
<tr>
<td>CHART_PRICE_MAX</td>
<td>チャート上の最大価格</td>
<td>読み取り専用</td>
</tr>
<tr>
<td>CHART_SHIFT_SIZE</td>
<td>右端シフトの割合（10〜50%）</td>
<td>設定可能</td>
</tr>
<tr>
<td>CHART_FIXED_POSITION</td>
<td>固定位置（左端からの割合%）</td>
<td>設定可能</td>
</tr>
<tr>
<td>CHART_FIXED_MAX</td>
<td>固定スケール時の最大価格</td>
<td>設定可能</td>
</tr>
<tr>
<td>CHART_FIXED_MIN</td>
<td>固定スケール時の最小価格</td>
<td>設定可能</td>
</tr>
</tbody>
</table>
<h3><span id="toc9">実践サンプル：現在のチャート価格範囲を取得する</span></h3>
<pre><code class="language-mql4">void OnTick()
{
   // 現在チャートに表示されている価格範囲を取得
   double priceMin = ChartGetDouble(0, CHART_PRICE_MIN);
   double priceMax = ChartGetDouble(0, CHART_PRICE_MAX);
   
   Print("表示中の価格範囲: ", priceMin, " ～ ", priceMax);
}</code></pre>
<p><code>CHART_PRICE_MIN</code>と<code>CHART_PRICE_MAX</code>は、画面上に「今見えている」範囲の最小・最大価格です。スクロールやズームに応じて動的に変化するため、現在の表示状態を知りたいときに便利です。</p>
<h2><span id="toc10">ENUM_CHART_PROPERTY_STRING — 文字列型プロパティ</span></h2>
<p>文字列型のプロパティは現在1つだけです。</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%; margin: 1em 0; font-size: 0.95em;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td>CHART_COMMENT</td>
<td>チャートの左上に表示されるコメント文字列</td>
</tr>
</tbody>
</table>
<h3><span id="toc11">実践サンプル：チャートにコメントを表示する</span></h3>
<pre><code class="language-mql4">void OnTick()
{
   // ChartSetString でチャートコメントを設定
   string info = "スプレッド: " + IntegerToString(SymbolInfoInteger(_Symbol, SYMBOL_SPREAD))
               + " / Bid: " + DoubleToString(Bid, _Digits);
   
   ChartSetString(0, CHART_COMMENT, info);
   ChartRedraw();
}

// コメントの取得
void ShowCurrentComment()
{
   string currentComment = ChartGetString(0, CHART_COMMENT);
   Print("現在のコメント: ", currentComment);
}</code></pre>
<p><code>ChartSetString()</code>による<code>CHART_COMMENT</code>の設定は、<code>Comment()</code>関数と同様にチャート左上にテキストを表示します。<code>Comment()</code>関数との違いは、チャートIDを指定できるため<strong>他のチャートウィンドウに対してもコメントを設定できる</strong>点です。</p>
<h2><span id="toc12">応用テクニック：チャートの設定を保存・復元する</span></h2>
<p>EAやインジケーターでチャートの見た目を変更する場合、終了時に元の設定に戻すのがマナーです。以下のパターンを覚えておきましょう。</p>
<pre><code class="language-mql4">// グローバル変数に元の設定を保存
color g_origBgColor;
bool  g_origShowGrid;

int OnInit()
{
   // 元の設定を保存
   g_origBgColor  = (color)ChartGetInteger(0, CHART_COLOR_BACKGROUND);
   g_origShowGrid = (bool)ChartGetInteger(0, CHART_SHOW_GRID);
   
   // 新しい設定を適用
   ChartSetInteger(0, CHART_COLOR_BACKGROUND, clrBlack);
   ChartSetInteger(0, CHART_SHOW_GRID, false);
   ChartRedraw();
   
   return(INIT_SUCCEEDED);
}

void OnDeinit(const int reason)
{
   // 元の設定を復元
   ChartSetInteger(0, CHART_COLOR_BACKGROUND, g_origBgColor);
   ChartSetInteger(0, CHART_SHOW_GRID, g_origShowGrid);
   ChartRedraw();
}</code></pre>
<p>こうすることで、EAを取り外したときにチャートが元の見た目に戻ります。ユーザーにとって親切な設計になりますので、ぜひ習慣にしてください。</p>
<h2><span id="toc13">よくある注意点とつまずきポイント</span></h2>
<h3><span id="toc14">① ChartRedraw()を忘れない</span></h3>
<p>チャートプロパティを変更する関数は、実際にはイベントキューにコマンドを追加するだけです。画面への即時反映が必要な場合は、<code>ChartRedraw()</code>を明示的に呼びましょう。</p>
<h3><span id="toc15">② 第1引数のチャートID</span></h3>
<p>第1引数に<strong>0</strong>を指定すると「現在のチャート」を意味します。別のチャートを操作したい場合は、<code>ChartID()</code>や<code>ChartFirst()</code>/<code>ChartNext()</code>で取得したIDを使います。</p>
<h3><span id="toc16">③ 読み取り専用プロパティに注意</span></h3>
<p><code>CHART_WIDTH_IN_PIXELS</code>や<code>CHART_PRICE_MIN</code>などの読み取り専用（r/o）プロパティに対してSet関数を呼んでも、値は変更されません。公式リファレンスで「r/o」の表記を確認しましょう。</p>
<h3><span id="toc17">④ 新しく開いたチャートの操作タイミング</span></h3>
<p><code>ChartOpen()</code>で新しくチャートを開いた直後は、まだデータが読み込まれていない場合があります。<code>CHART_PRICE_MIN</code>や<code>CHART_PRICE_MAX</code>を取得しても0が返ることがあるため、少し待つか、次のティックで取得するようにしましょう。</p>
<h2><span id="toc18">まとめ</span></h2>
<p>MQL4のチャートプロパティ定数は、大きく<strong>3つの列挙型</strong>に分類されます。</p>
<ul>
<li><strong>ENUM_CHART_PROPERTY_INTEGER</strong>：色・表示切替・モード設定など（最も種類が多い）</li>
<li><strong>ENUM_CHART_PROPERTY_DOUBLE</strong>：価格範囲・スケール関連</li>
<li><strong>ENUM_CHART_PROPERTY_STRING</strong>：チャートコメント</li>
</ul>
<p>操作には<code>ChartSetInteger()</code>/<code>ChartGetInteger()</code>、<code>ChartSetDouble()</code>/<code>ChartGetDouble()</code>、<code>ChartSetString()</code>/<code>ChartGetString()</code>の6つの関数を使い分けます。</p>
<p>特に、EAやインジケーターで<strong>チャートの配色カスタマイズ</strong>や<strong>情報表示</strong>を行う際に必須の知識となりますので、まずは本記事のサンプルコードを動かして、チャートプロパティの変更を体験してみてください！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13083/%e3%80%90mql4%e3%80%91%e3%83%81%e3%83%a3%e3%83%bc%e3%83%88%e8%a8%ad%e5%ae%9a%e5%ae%9a%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e7%90%86%e8%a7%a3%ef%bc%81enum_chart_property_integer%e3%83%bbstring%e3%83%bbd/">【MQL4】チャート設定定数を完全理解！ENUM_CHART_PROPERTY_INTEGER・STRING・DOUBLEの使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4】ENUM_OBJECTとは？オブジェクトタイプ定数の全種類一覧と使い方をわかりやすく解説</title>
		<link>https://mql-programing.com/archives/13080/%e3%80%90mql4%e3%80%91enum_object%e3%81%a8%e3%81%af%ef%bc%9f%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%82%bf%e3%82%a4%e3%83%97%e5%ae%9a%e6%95%b0%e3%81%ae%e5%85%a8%e7%a8%ae%e9%a1%9e/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Tue, 28 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[ObjectCreate]]></category>
		<category><![CDATA[ENUM_OBJECT]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[オブジェクト]]></category>
		<category><![CDATA[チャート描画]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13080</guid>

					<description><![CDATA[<p>MQL4でチャート上にラインや矢印、テキストなどのグラフィカルオブジェクトを描画するとき、必ず登場するのがENUM_OBJECTという列挙型です。 ObjectCreate関数の第2引数には、このENUM_OBJECTの [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13080/%e3%80%90mql4%e3%80%91enum_object%e3%81%a8%e3%81%af%ef%bc%9f%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%82%bf%e3%82%a4%e3%83%97%e5%ae%9a%e6%95%b0%e3%81%ae%e5%85%a8%e7%a8%ae%e9%a1%9e/">【MQL4】ENUM_OBJECTとは？オブジェクトタイプ定数の全種類一覧と使い方をわかりやすく解説</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>MQL4でチャート上にラインや矢印、テキストなどのグラフィカルオブジェクトを描画するとき、必ず登場するのが<strong>ENUM_OBJECT</strong>という列挙型です。</p>
<p>ObjectCreate関数の第2引数には、このENUM_OBJECTの値を指定して「どの種類のオブジェクトを作るか」を決定します。しかし、オブジェクトタイプは約44種類もあり、「どんな種類があるの？」「どう使い分けるの？」と迷う方も多いのではないでしょうか。</p>
<p>この記事では、<strong>ENUM_OBJECTの全種類を一覧表で整理</strong>し、よく使うオブジェクトの実践的なコードサンプルもあわせて解説します。</p>
<h2><span id="toc1">ENUM_OBJECTとは？</span></h2>
<p><strong>ENUM_OBJECT</strong>は、MQL4で定義されている列挙型（enum）の一つで、チャート上に作成できるグラフィカルオブジェクトの種類を表す定数をまとめたものです。</p>
<p>オブジェクトを作成する<code>ObjectCreate</code>関数のシグネチャは以下のようになっています。</p>
<pre><code class="language-mql4">bool ObjectCreate(
   long         chart_id,   // チャートID（0=現在のチャート）
   string       name,       // オブジェクト名（一意の名前）
   ENUM_OBJECT  type,       // オブジェクトタイプ
   int          sub_window, // サブウィンドウ番号（0=メインウィンドウ）
   datetime     time1,      // 1つ目のアンカーポイントの時刻
   double       price1,     // 1つ目のアンカーポイントの価格
   ...                      // 必要に応じて追加のアンカーポイント
);
</code></pre>
<p>第3引数の<code>type</code>に<strong>ENUM_OBJECTの定数値</strong>を指定することで、水平線・トレンドライン・矢印・テキストラベルなど、目的に合ったオブジェクトを作成できます。</p>
<h2><span id="toc2">全オブジェクトタイプ一覧（カテゴリ別）</span></h2>
<p>ENUM_OBJECTに含まれるオブジェクトタイプを、カテゴリ別に整理しました。</p>
<h3><span id="toc3">ライン系オブジェクト</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; width:100%; max-width:720px;">
<thead>
<tr style="background:#f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>アンカー数</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_VLINE</td>
<td>垂直線</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_HLINE</td>
<td>水平線</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_TREND</td>
<td>トレンドライン</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_TRENDBYANGLE</td>
<td>角度によるトレンドライン</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_CYCLES</td>
<td>サイクルライン</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_ARROWED_LINE</td>
<td>矢印付きライン</td>
<td>2</td>
</tr>
</tbody>
</table>
<h3><span id="toc4">チャネル系オブジェクト</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; width:100%; max-width:720px;">
<thead>
<tr style="background:#f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>アンカー数</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_CHANNEL</td>
<td>等距離チャネル</td>
<td>3</td>
</tr>
<tr>
<td>OBJ_STDDEVCHANNEL</td>
<td>標準偏差チャネル</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_REGRESSION</td>
<td>線形回帰チャネル</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_PITCHFORK</td>
<td>アンドリューズ・ピッチフォーク</td>
<td>3</td>
</tr>
</tbody>
</table>
<h3><span id="toc5">ギャン系オブジェクト</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; width:100%; max-width:720px;">
<thead>
<tr style="background:#f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>アンカー数</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_GANNLINE</td>
<td>ギャンライン</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_GANNFAN</td>
<td>ギャンファン</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_GANNGRID</td>
<td>ギャングリッド</td>
<td>2</td>
</tr>
</tbody>
</table>
<h3><span id="toc6">フィボナッチ系オブジェクト</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; width:100%; max-width:720px;">
<thead>
<tr style="background:#f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>アンカー数</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_FIBO</td>
<td>フィボナッチ・リトレースメント</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_FIBOTIMES</td>
<td>フィボナッチ・タイムゾーン</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_FIBOFAN</td>
<td>フィボナッチ・ファン</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_FIBOARC</td>
<td>フィボナッチ・アーク</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_FIBOCHANNEL</td>
<td>フィボナッチ・チャネル</td>
<td>3</td>
</tr>
<tr>
<td>OBJ_EXPANSION</td>
<td>フィボナッチ・エクスパンション</td>
<td>3</td>
</tr>
</tbody>
</table>
<h3><span id="toc7">エリオット波動系オブジェクト</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; width:100%; max-width:720px;">
<thead>
<tr style="background:#f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>アンカー数</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_ELLIOTWAVE5</td>
<td>エリオット推進波（5波）</td>
<td>5</td>
</tr>
<tr>
<td>OBJ_ELLIOTWAVE3</td>
<td>エリオット修正波（3波）</td>
<td>3</td>
</tr>
</tbody>
</table>
<h3><span id="toc8">図形系オブジェクト</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; width:100%; max-width:720px;">
<thead>
<tr style="background:#f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>アンカー数</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_RECTANGLE</td>
<td>長方形</td>
<td>2</td>
</tr>
<tr>
<td>OBJ_TRIANGLE</td>
<td>三角形</td>
<td>3</td>
</tr>
<tr>
<td>OBJ_ELLIPSE</td>
<td>楕円</td>
<td>3</td>
</tr>
</tbody>
</table>
<h3><span id="toc9">矢印・マーカー系オブジェクト</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; width:100%; max-width:720px;">
<thead>
<tr style="background:#f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>アンカー数</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_ARROW</td>
<td>矢印（任意のWingdingsコード指定可）</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_THUMB_UP</td>
<td>サムズアップ</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_THUMB_DOWN</td>
<td>サムズダウン</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_UP</td>
<td>上向き矢印</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_DOWN</td>
<td>下向き矢印</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_STOP</td>
<td>ストップサイン</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_CHECK</td>
<td>チェックマーク</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_LEFT_PRICE</td>
<td>左向き価格ラベル</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_RIGHT_PRICE</td>
<td>右向き価格ラベル</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_BUY</td>
<td>買いサイン</td>
<td>1</td>
</tr>
<tr>
<td>OBJ_ARROW_SELL</td>
<td>売りサイン</td>
<td>1</td>
</tr>
</tbody>
</table>
<h3><span id="toc10">テキスト・GUI系オブジェクト</span></h3>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse:collapse; width:100%; max-width:720px;">
<thead>
<tr style="background:#f0f0f0;">
<th>定数名</th>
<th>説明</th>
<th>配置基準</th>
</tr>
</thead>
<tbody>
<tr>
<td>OBJ_TEXT</td>
<td>テキスト（チャート座標に固定）</td>
<td>時刻・価格</td>
</tr>
<tr>
<td>OBJ_LABEL</td>
<td>テキストラベル（ピクセル座標に固定）</td>
<td>X・Y座標</td>
</tr>
<tr>
<td>OBJ_BUTTON</td>
<td>ボタン</td>
<td>X・Y座標</td>
</tr>
<tr>
<td>OBJ_EDIT</td>
<td>入力フィールド</td>
<td>X・Y座標</td>
</tr>
<tr>
<td>OBJ_RECTANGLE_LABEL</td>
<td>矩形ラベル（パネル背景など）</td>
<td>X・Y座標</td>
</tr>
<tr>
<td>OBJ_BITMAP</td>
<td>ビットマップ画像（チャート座標）</td>
<td>時刻・価格</td>
</tr>
<tr>
<td>OBJ_BITMAP_LABEL</td>
<td>ビットマップラベル（ピクセル座標）</td>
<td>X・Y座標</td>
</tr>
<tr>
<td>OBJ_EVENT</td>
<td>イベントオブジェクト</td>
<td>時刻</td>
</tr>
</tbody>
</table>
<p>※ アンカー数とは、ObjectCreate関数で指定が必要な座標ポイントの数です。たとえばトレンドラインは始点と終点の2つが必要です。</p>
<h2><span id="toc11">よく使うオブジェクトの実践コード</span></h2>
<p>ここからは、EA開発やインジケーター作成でよく使うオブジェクトタイプを5つ取り上げ、実際のコードとともに解説します。</p>
<h3><span id="toc12">①水平線（OBJ_HLINE）を描画する</span></h3>
<p>水平線は特定の価格レベルにラインを引くオブジェクトです。サポート・レジスタンスラインの表示などに使います。アンカーポイントは<strong>price1のみ</strong>で、time1は意味を持ちませんが、引数として0を渡します。</p>
<pre><code class="language-mql4">void DrawHLine(string name, double price, color clr)
{
   // すでに同名のオブジェクトがあれば削除
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

   // 水平線を作成（time1は0でOK、price1に価格を指定）
   ObjectCreate(0, name, OBJ_HLINE, 0, 0, price);

   // 色を設定
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   // 線のスタイルを点線に
   ObjectSetInteger(0, name, OBJPROP_STYLE, STYLE_DASH);
   // 線の太さ
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 1);
}

// 使用例：現在の価格に赤い水平線を描画
void OnStart()
{
   DrawHLine("SupportLine", Ask - 50 * _Point, clrRed);
}
</code></pre>
<h3><span id="toc13">②垂直線（OBJ_VLINE）を描画する</span></h3>
<p>垂直線は特定の時刻に縦のラインを引くオブジェクトです。セッション区切りや重要なイベント時刻の表示に使います。アンカーポイントは<strong>time1のみ</strong>で、price1は0を渡します。</p>
<pre><code class="language-mql4">void DrawVLine(string name, datetime time, color clr)
{
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

   // 垂直線を作成（time1に時刻を指定、price1は0でOK）
   ObjectCreate(0, name, OBJ_VLINE, 0, time, 0);

   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   ObjectSetInteger(0, name, OBJPROP_STYLE, STYLE_DOT);
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 1);
}

// 使用例：現在の足の時刻に青い垂直線を描画
void OnStart()
{
   DrawVLine("EventLine", TimeCurrent(), clrBlue);
}
</code></pre>
<h3><span id="toc14">③矢印マーカー（OBJ_ARROW）を表示する</span></h3>
<p>OBJ_ARROWは、Wingdingsフォントの文字コードを使って任意のアイコンを表示できる汎用的な矢印オブジェクトです。<code>OBJPROP_ARROWCODE</code>プロパティでアイコンの種類を変更できます。</p>
<pre><code class="language-mql4">void DrawArrow(string name, datetime time, double price, int arrowCode, color clr)
{
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

   // 矢印オブジェクトを作成
   ObjectCreate(0, name, OBJ_ARROW, 0, time, price);

   // 矢印コードを設定（例: 233=上矢印, 234=下矢印）
   ObjectSetInteger(0, name, OBJPROP_ARROWCODE, arrowCode);
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   // 矢印のサイズ
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);
}

// 使用例：現在の足に上向き矢印を表示
void OnStart()
{
   DrawArrow("BuySignal", Time[0], Low[0] - 10 * _Point, 233, clrLime);
}
</code></pre>
<p>よく使われるWingdingsコードの例：233（上向き矢印）、234（下向き矢印）、159（大きな丸）、161（チェックマーク）などがあります。</p>
<h3><span id="toc15">④トレンドライン（OBJ_TREND）を描画する</span></h3>
<p>トレンドラインは2つのアンカーポイント（始点と終点）を結ぶ直線です。デフォルトでは右方向に延長されるため、延長が不要な場合は<code>OBJPROP_RAY_RIGHT</code>をfalseに設定します。</p>
<pre><code class="language-mql4">void DrawTrendLine(string name, datetime time1, double price1,
                   datetime time2, double price2, color clr)
{
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

   // 2点を指定してトレンドラインを作成
   ObjectCreate(0, name, OBJ_TREND, 0, time1, price1, time2, price2);

   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);
   // 右方向への延長をオフにする
   ObjectSetInteger(0, name, OBJPROP_RAY_RIGHT, false);
}

// 使用例：5本前の安値から現在の安値へトレンドラインを描画
void OnStart()
{
   DrawTrendLine("MyTrend",
                 Time[5], Low[5],
                 Time[0], Low[0],
                 clrOrangeRed);
}
</code></pre>
<h3><span id="toc16">⑤テキストラベル（OBJ_LABEL）をチャート隅に配置する</span></h3>
<p>OBJ_LABELはピクセル座標ベースのテキストオブジェクトです。チャートをスクロールしても位置が固定されるため、情報パネルやステータス表示に最適です。<code>OBJPROP_CORNER</code>で基準コーナーを、<code>OBJPROP_XDISTANCE</code>と<code>OBJPROP_YDISTANCE</code>で位置を調整します。</p>
<pre><code class="language-mql4">void DrawLabel(string name, string text, int corner, int x, int y,
               color clr, int fontSize)
{
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

   // ラベルオブジェクトを作成（time/priceは不要なので0）
   ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);

   // 基準コーナーを設定
   // CORNER_LEFT_UPPER=0, CORNER_RIGHT_UPPER=1
   // CORNER_LEFT_LOWER=2, CORNER_RIGHT_LOWER=3
   ObjectSetInteger(0, name, OBJPROP_CORNER, corner);

   // コーナーからの距離（ピクセル）
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);

   // テキスト内容とフォント
   ObjectSetString(0, name, OBJPROP_TEXT, text);
   ObjectSetString(0, name, OBJPROP_FONT, "Arial Bold");
   ObjectSetInteger(0, name, OBJPROP_FONTSIZE, fontSize);
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);
}

// 使用例：左上にスプレッド情報を表示
void OnStart()
{
   int spread = (int)MarketInfo(Symbol(), MODE_SPREAD);
   string text = "Spread: " + IntegerToString(spread) + " pts";
   DrawLabel("SpreadLabel", text, CORNER_LEFT_UPPER, 20, 30, clrWhite, 12);
}
</code></pre>
<h2><span id="toc17">ObjectCreate使用時の注意点</span></h2>
<p>オブジェクトを使う際に知っておくべきポイントをまとめます。</p>
<h3><span id="toc18">オブジェクト名のルール</span></h3>
<ul>
<li><strong>最大63文字</strong>まで指定できます。</li>
<li><strong>ラテン文字（英数字）の使用が推奨</strong>されています。日本語文字を使うと環境によって文字化けする可能性があります。</li>
<li>同じチャート上で<strong>オブジェクト名は一意</strong>でなければなりません。</li>
</ul>
<h3><span id="toc19">同名オブジェクトが既に存在する場合</span></h3>
<p>ObjectCreate関数は、同名のオブジェクトがすでに存在する場合、<strong>新規作成はせず、既存オブジェクトの座標を変更しようとします</strong>。この場合、関数はfalseを返しますが、エラーではなく座標の更新が行われることがあります。</p>
<p>意図しない動作を防ぐために、作成前に<code>ObjectFind</code>で存在確認し、必要に応じて<code>ObjectDelete</code>で削除してから作成するのが安全です。</p>
<h3><span id="toc20">オブジェクトの後片付け</span></h3>
<p>EA終了時やインジケーター削除時には、作成したオブジェクトを削除するようにしましょう。<code>OnDeinit</code>関数内で処理するのが一般的です。</p>
<pre><code class="language-mql4">void OnDeinit(const int reason)
{
   // プレフィックスが "My_" のオブジェクトをすべて削除
   ObjectsDeleteAll(0, "My_");
}
</code></pre>
<p>オブジェクト名にプレフィックス（接頭辞）を付けておくと、<code>ObjectsDeleteAll</code>の第2引数にそのプレフィックスを指定するだけで一括削除できるので便利です。</p>
<h3><span id="toc21">OBJ_TEXT と OBJ_LABEL の違い</span></h3>
<p><strong>OBJ_TEXT</strong>はチャートの時刻・価格座標に固定されるため、チャートをスクロールするとテキストも一緒に動きます。一方、<strong>OBJ_LABEL</strong>はチャートウィンドウのピクセル座標に固定されるため、スクロールしても常に同じ位置に表示されます。常時表示したい情報にはOBJ_LABELを使いましょう。</p>
<h2><span id="toc22">まとめ</span></h2>
<p>この記事では、MQL4の<strong>ENUM_OBJECT</strong>列挙型について、基本的な概念から全種類の一覧、そして実践的なコードサンプルまでを解説しました。</p>
<ul>
<li><strong>ENUM_OBJECT</strong>は、ObjectCreate関数でオブジェクトの種類を指定するための列挙型</li>
<li>ライン系・チャネル系・フィボナッチ系・矢印系・テキスト系など、<strong>約44種類</strong>のオブジェクトタイプがある</li>
<li><strong>OBJ_HLINE</strong>（水平線）と<strong>OBJ_VLINE</strong>（垂直線）はアンカーポイントが1つだけ</li>
<li><strong>OBJ_ARROW</strong>はWingdingsコードで様々なアイコンを表示可能</li>
<li><strong>OBJ_LABEL</strong>はピクセル座標固定で、情報パネルの作成に最適</li>
<li>オブジェクト名は<strong>63文字以内のラテン文字</strong>を推奨。プレフィックスを付けて管理すると後片付けが楽になる</li>
</ul>
<p>まずは水平線やラベルなど、シンプルなオブジェクトから試してみてください。チャート上にカスタム表示を加えることで、EAやインジケーターの使い勝手が大きく向上します。</p>
<p>投稿 <a href="https://mql-programing.com/archives/13080/%e3%80%90mql4%e3%80%91enum_object%e3%81%a8%e3%81%af%ef%bc%9f%e3%82%aa%e3%83%96%e3%82%b8%e3%82%a7%e3%82%af%e3%83%88%e3%82%bf%e3%82%a4%e3%83%97%e5%ae%9a%e6%95%b0%e3%81%ae%e5%85%a8%e7%a8%ae%e9%a1%9e/">【MQL4】ENUM_OBJECTとは？オブジェクトタイプ定数の全種類一覧と使い方をわかりやすく解説</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4】注文タイプ定数を完全解説！OP_BUY・OP_SELL・指値/逆指値の全6種類を一覧で理解しよう</title>
		<link>https://mql-programing.com/archives/13077/%e3%80%90mql4%e3%80%91%e6%b3%a8%e6%96%87%e3%82%bf%e3%82%a4%e3%83%97%e5%ae%9a%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e8%a7%a3%e8%aa%ac%ef%bc%81op_buy%e3%83%bbop_sell%e3%83%bb%e6%8c%87%e5%80%a4-%e9%80%86/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Mon, 27 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[OrderSend]]></category>
		<category><![CDATA[待機注文]]></category>
		<category><![CDATA[OP_BUY]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[注文タイプ定数]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13077</guid>

					<description><![CDATA[<p>MQL4で注文を出すとき、必ず使うのがOrderSend()関数です。この関数の第2引数には「注文タイプ」を指定する必要があります。 「OP_BUYは分かるけど、OP_BUYLIMITとOP_BUYSTOPの違いって何？ [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13077/%e3%80%90mql4%e3%80%91%e6%b3%a8%e6%96%87%e3%82%bf%e3%82%a4%e3%83%97%e5%ae%9a%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e8%a7%a3%e8%aa%ac%ef%bc%81op_buy%e3%83%bbop_sell%e3%83%bb%e6%8c%87%e5%80%a4-%e9%80%86/">【MQL4】注文タイプ定数を完全解説！OP_BUY・OP_SELL・指値/逆指値の全6種類を一覧で理解しよう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>MQL4で注文を出すとき、必ず使うのが<strong>OrderSend()</strong>関数です。この関数の第2引数には「注文タイプ」を指定する必要があります。</p>
<p>「OP_BUYは分かるけど、OP_BUYLIMITとOP_BUYSTOPの違いって何？」「指値と逆指値がごっちゃになる…」という方も多いのではないでしょうか。</p>
<p>この記事では、MQL4の<strong>注文タイプ定数 全6種類</strong>を一覧表で整理し、それぞれのコードサンプル付きで徹底解説します。これを読めば、すべての注文タイプを自信を持って使い分けられるようになります。</p>
<h2><span id="toc1">注文タイプ定数の一覧（全6種類）</span></h2>
<p>まずは全体像を把握しましょう。MQL4で使える注文タイプ定数は以下の6つです。</p>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; width: 100%;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>数値</th>
<th>種類</th>
<th>説明</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>OP_BUY</strong></td>
<td>0</td>
<td>成行注文</td>
<td>現在価格で買い（ロング）</td>
</tr>
<tr>
<td><strong>OP_SELL</strong></td>
<td>1</td>
<td>成行注文</td>
<td>現在価格で売り（ショート）</td>
</tr>
<tr>
<td><strong>OP_BUYLIMIT</strong></td>
<td>2</td>
<td>指値注文</td>
<td>現在価格より<strong>下</strong>で買い予約</td>
</tr>
<tr>
<td><strong>OP_SELLLIMIT</strong></td>
<td>3</td>
<td>指値注文</td>
<td>現在価格より<strong>上</strong>で売り予約</td>
</tr>
<tr>
<td><strong>OP_BUYSTOP</strong></td>
<td>4</td>
<td>逆指値注文</td>
<td>現在価格より<strong>上</strong>で買い予約</td>
</tr>
<tr>
<td><strong>OP_SELLSTOP</strong></td>
<td>5</td>
<td>逆指値注文</td>
<td>現在価格より<strong>下</strong>で売り予約</td>
</tr>
</tbody>
</table>
<p>数値の0〜5を直接書いても動作しますが、<strong>定数名を使うことで可読性が格段に上がります</strong>。必ず定数名を使いましょう。</p>
<h2><span id="toc2">成行注文：OP_BUY と OP_SELL</span></h2>
<p>成行注文は「今すぐ約定させたい」ときに使う、最も基本的な注文タイプです。</p>
<h3><span id="toc3">OP_BUY（買い成行注文）</span></h3>
<p>買い注文は<strong>Ask（売値）</strong>で約定します。買うときはスプレッド分だけ高い価格で約定する点に注意してください。</p>
<pre><code class="language-mql4">// 買い成行注文の例
int ticket = OrderSend(
    Symbol(),       // 現在の通貨ペア
    OP_BUY,         // 買い注文
    0.1,            // 0.1ロット
    Ask,            // 買いはAsk価格を指定
    3,              // スリッページ許容（ポイント）
    0,              // ストップロス（0 = なし）
    0,              // テイクプロフィット（0 = なし）
    "Buy Order",    // コメント
    12345,          // マジックナンバー
    0,              // 有効期限（成行では無関係）
    clrBlue         // チャート上の矢印色
);

if(ticket < 0)
{
    Print("買い注文エラー: ", GetLastError());
}
else
{
    Print("買い注文成功！ チケット番号: ", ticket);
}</code></pre>
<h3><span id="toc4">OP_SELL（売り成行注文）</span></h3>
<p>売り注文は<strong>Bid（買値）</strong>で約定します。OP_BUYとの違いは、指定する価格がBidになる点です。</p>
<pre><code class="language-mql4">// 売り成行注文の例
int ticket = OrderSend(
    Symbol(),       // 現在の通貨ペア
    OP_SELL,        // 売り注文
    0.1,            // 0.1ロット
    Bid,            // 売りはBid価格を指定
    3,              // スリッページ許容
    0,              // ストップロス
    0,              // テイクプロフィット
    "Sell Order",   // コメント
    12345,          // マジックナンバー
    0,              // 有効期限
    clrRed          // チャート上の矢印色
);

if(ticket < 0)
{
    Print("売り注文エラー: ", GetLastError());
}</code></pre>
<p><strong>重要ポイント：</strong>買いは<strong>Ask</strong>、売りは<strong>Bid</strong>。これを逆にすると<code>ERR_INVALID_PRICE（エラーコード129）</code>が発生します。初心者がつまずきやすいポイントなので、しっかり覚えておきましょう。</p>
<h2><span id="toc5">指値注文：OP_BUYLIMIT と OP_SELLLIMIT</span></h2>
<p>指値注文は「今より有利な価格になったら約定させたい」ときに使います。<strong>逆張りエントリー</strong>に向いている注文タイプです。</p>
<h3><span id="toc6">OP_BUYLIMIT（買い指値注文）</span></h3>
<p>現在のAsk価格より<strong>下</strong>の価格を指定して、「そこまで下がったら買いたい」という注文です。押し目買いのイメージです。</p>
<pre><code class="language-mql4">// 買い指値注文：現在価格より50pips下で買い予約
double entryPrice = Ask - 50 * Point * 10;  // 50pips下（5桁ブローカーの場合）

int ticket = OrderSend(
    Symbol(),
    OP_BUYLIMIT,     // 買い指値注文
    0.1,
    entryPrice,       // 現在のAskより下の価格
    3,
    entryPrice - 30 * Point * 10,  // SL：エントリーから30pips下
    entryPrice + 60 * Point * 10,  // TP：エントリーから60pips上
    "BuyLimit Order",
    12345,
    0,                // 有効期限（0 = 無期限）
    clrBlue
);

if(ticket < 0)
    Print("買い指値注文エラー: ", GetLastError());</code></pre>
<h3><span id="toc7">OP_SELLLIMIT（売り指値注文）</span></h3>
<p>現在のBid価格より<strong>上</strong>の価格を指定して、「そこまで上がったら売りたい」という注文です。戻り売りのイメージです。</p>
<pre><code class="language-mql4">// 売り指値注文：現在価格より50pips上で売り予約
double entryPrice = Bid + 50 * Point * 10;

int ticket = OrderSend(
    Symbol(),
    OP_SELLLIMIT,     // 売り指値注文
    0.1,
    entryPrice,        // 現在のBidより上の価格
    3,
    entryPrice + 30 * Point * 10,  // SL：エントリーから30pips上
    entryPrice - 60 * Point * 10,  // TP：エントリーから60pips下
    "SellLimit Order",
    12345,
    0,
    clrRed
);

if(ticket < 0)
    Print("売り指値注文エラー: ", GetLastError());</code></pre>
<h2><span id="toc8">逆指値注文：OP_BUYSTOP と OP_SELLSTOP</span></h2>
<p>逆指値注文は「今より不利な価格になったら約定させたい」ときに使います。一見すると不利に思えますが、<strong>ブレイクアウト狙いの順張り</strong>には非常に有効です。</p>
<h3><span id="toc9">OP_BUYSTOP（買い逆指値注文）</span></h3>
<p>現在のAsk価格より<strong>上</strong>の価格を指定します。「レジスタンスを上抜けたら買いたい」というブレイクアウト戦略で使います。</p>
<pre><code class="language-mql4">// 買い逆指値注文：現在価格より50pips上で買い予約（上抜けブレイク狙い）
double entryPrice = Ask + 50 * Point * 10;

int ticket = OrderSend(
    Symbol(),
    OP_BUYSTOP,       // 買い逆指値注文
    0.1,
    entryPrice,        // 現在のAskより上の価格
    3,
    entryPrice - 30 * Point * 10,  // SL
    entryPrice + 60 * Point * 10,  // TP
    "BuyStop Order",
    12345,
    0,
    clrBlue
);

if(ticket < 0)
    Print("買い逆指値注文エラー: ", GetLastError());</code></pre>
<h3><span id="toc10">OP_SELLSTOP（売り逆指値注文）</span></h3>
<p>現在のBid価格より<strong>下</strong>の価格を指定します。「サポートを下抜けたら売りたい」というブレイクアウト戦略で使います。</p>
<pre><code class="language-mql4">// 売り逆指値注文：現在価格より50pips下で売り予約（下抜けブレイク狙い）
double entryPrice = Bid - 50 * Point * 10;

int ticket = OrderSend(
    Symbol(),
    OP_SELLSTOP,      // 売り逆指値注文
    0.1,
    entryPrice,        // 現在のBidより下の価格
    3,
    entryPrice + 30 * Point * 10,  // SL
    entryPrice - 60 * Point * 10,  // TP
    "SellStop Order",
    12345,
    0,
    clrRed
);

if(ticket < 0)
    Print("売り逆指値注文エラー: ", GetLastError());</code></pre>
<h2><span id="toc11">注文タイプの分類整理</span></h2>
<p>6つの注文タイプを改めて分類すると、大きく<strong>2つのグループ</strong>に分けられます。</p>
<h3><span id="toc12">成行注文（即時約定）</span></h3>
<ul>
<li><strong>OP_BUY（0）</strong>：今すぐ買う</li>
<li><strong>OP_SELL（1）</strong>：今すぐ売る</li>
</ul>
<h3><span id="toc13">待機注文（予約注文）</span></h3>
<ul>
<li><strong>OP_BUYLIMIT（2）</strong>：今より下で買い予約（逆張り）</li>
<li><strong>OP_SELLLIMIT（3）</strong>：今より上で売り予約（逆張り）</li>
<li><strong>OP_BUYSTOP（4）</strong>：今より上で買い予約（順張り）</li>
<li><strong>OP_SELLSTOP（5）</strong>：今より下で売り予約（順張り）</li>
</ul>
<p>EAのプログラムでは、成行注文だけで十分なケースも多いですが、ブレイクアウトEAや押し目買いEAを作るなら待機注文の理解は必須です。</p>
<h2><span id="toc14">OrderType()で注文タイプを判定する</span></h2>
<p>注文タイプ定数は、注文を出すときだけでなく<strong>ポジション管理</strong>でも重要です。<code>OrderType()</code>関数を使えば、選択中の注文がどのタイプかを判定できます。</p>
<pre><code class="language-mql4">// 自分のEAが持つ買いポジションだけを決済する例
for(int i = OrdersTotal() - 1; i >= 0; i--)
{
    if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        continue;

    // マジックナンバーと通貨ペアで自分の注文か判定
    if(OrderMagicNumber() != 12345)
        continue;
    if(OrderSymbol() != Symbol())
        continue;

    // 注文タイプで分岐
    if(OrderType() == OP_BUY)
    {
        // 買いポジションを決済
        bool result = OrderClose(OrderTicket(), OrderLots(), Bid, 3, clrBlue);
        if(!result)
            Print("決済エラー: ", GetLastError());
    }
    else if(OrderType() == OP_SELL)
    {
        // 売りポジションを決済
        bool result = OrderClose(OrderTicket(), OrderLots(), Ask, 3, clrRed);
        if(!result)
            Print("決済エラー: ", GetLastError());
    }
}</code></pre>
<p>ここでも<strong>買いの決済はBid、売りの決済はAsk</strong>を使う点に注意してください。注文時と決済時で使う価格が逆になります。</p>
<h2><span id="toc15">よくある間違いと注意点</span></h2>
<h3><span id="toc16">1. 価格の指定ミス（AskとBidの混同）</span></h3>
<p>最も多いエラーが<code>ERR_INVALID_PRICE（129）</code>です。以下のルールを覚えましょう。</p>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; width: 100%;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>操作</th>
<th>使う価格</th>
</tr>
</thead>
<tbody>
<tr>
<td>買い注文を出す / 売りポジションを決済する</td>
<td><strong>Ask</strong></td>
</tr>
<tr>
<td>売り注文を出す / 買いポジションを決済する</td>
<td><strong>Bid</strong></td>
</tr>
</tbody>
</table>
<h3><span id="toc17">2. ストップレベルの違反</span></h3>
<p>待機注文の価格が現在価格に近すぎると<code>ERR_INVALID_STOPS（130）</code>が発生します。ブローカーごとに「最低限離さなければならない値幅（ストップレベル）」が設定されています。</p>
<pre><code class="language-mql4">// ストップレベルを取得して安全な価格を計算する
int stopLevel = (int)MarketInfo(Symbol(), MODE_STOPLEVEL);
double minDistance = stopLevel * Point;

// 例：OP_BUYLIMITの場合、Ask - minDistance より下の価格を指定する
double safePrice = Ask - minDistance - 10 * Point;  // 余裕を持たせる</code></pre>
<h3><span id="toc18">3. 待機注文の削除はOrderDelete()を使う</span></h3>
<p>初心者がよく間違えるのが、待機注文の削除に<code>OrderClose()</code>を使ってしまうケースです。</p>
<ul>
<li><strong>OrderClose()</strong>：成行注文（OP_BUY / OP_SELL）の決済に使う</li>
<li><strong>OrderDelete()</strong>：待機注文（LIMIT / STOP系）のキャンセルに使う</li>
</ul>
<pre><code class="language-mql4">// 待機注文を削除する正しい方法
if(OrderType() == OP_BUYLIMIT || OrderType() == OP_SELLLIMIT ||
   OrderType() == OP_BUYSTOP  || OrderType() == OP_SELLSTOP)
{
    bool result = OrderDelete(OrderTicket());
    if(!result)
        Print("待機注文の削除エラー: ", GetLastError());
}</code></pre>
<p>待機注文に対して<code>OrderClose()</code>を使うと<code>ERR_INVALID_FUNCTION_PARAMVALUE（4051）</code>などのエラーになるので注意しましょう。</p>
<h2><span id="toc19">まとめ</span></h2>
<p>MQL4の注文タイプ定数は全部で<strong>6種類</strong>あり、大きく3つのカテゴリに分類できます。</p>
<ul>
<li><strong>成行注文</strong>：OP_BUY（0）/ OP_SELL（1）→ 今すぐ約定</li>
<li><strong>指値注文</strong>：OP_BUYLIMIT（2）/ OP_SELLLIMIT（3）→ 有利な価格で予約（逆張り向き）</li>
<li><strong>逆指値注文</strong>：OP_BUYSTOP（4）/ OP_SELLSTOP（5）→ 不利な方向で予約（ブレイクアウト向き）</li>
</ul>
<p>覚えるべきポイントは以下の3つです。</p>
<ul>
<li><strong>買いはAsk、売りはBid</strong>を必ず守る</li>
<li>待機注文はストップレベルを考慮した価格を設定する</li>
<li>成行注文の決済は<strong>OrderClose()</strong>、待機注文のキャンセルは<strong>OrderDelete()</strong>を使う</li>
</ul>
<p>まずはOP_BUYとOP_SELLの成行注文から始めて、慣れてきたら指値・逆指値注文にも挑戦してみてください。注文タイプを使い分けられれば、EAの戦略の幅が大きく広がります。</p>
<p>投稿 <a href="https://mql-programing.com/archives/13077/%e3%80%90mql4%e3%80%91%e6%b3%a8%e6%96%87%e3%82%bf%e3%82%a4%e3%83%97%e5%ae%9a%e6%95%b0%e3%82%92%e5%ae%8c%e5%85%a8%e8%a7%a3%e8%aa%ac%ef%bc%81op_buy%e3%83%bbop_sell%e3%83%bb%e6%8c%87%e5%80%a4-%e9%80%86/">【MQL4】注文タイプ定数を完全解説！OP_BUY・OP_SELL・指値/逆指値の全6種類を一覧で理解しよう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4】ENUM_APPLIED_PRICE（価格定数）完全ガイド｜PRICE_CLOSEからPRICE_WEIGHTEDまで7種類を徹底解説</title>
		<link>https://mql-programing.com/archives/13074/%e3%80%90mql4%e3%80%91enum_applied_price%ef%bc%88%e4%be%a1%e6%a0%bc%e5%ae%9a%e6%95%b0%ef%bc%89%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bd%9cprice_close%e3%81%8b%e3%82%89price_weighted%e3%81%be/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 26 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[定数]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[iMA関数]]></category>
		<category><![CDATA[ENUM_APPLIED_PRICE]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[価格定数]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13074</guid>

					<description><![CDATA[<p>MQL4でインジケーター関数を使うとき、「どの価格を基準に計算するか」を指定する場面が頻繁にあります。たとえば移動平均線を計算するとき、終値を使うのか、高値と安値の平均を使うのかで結果が変わりますよね。 この「どの価格を [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13074/%e3%80%90mql4%e3%80%91enum_applied_price%ef%bc%88%e4%be%a1%e6%a0%bc%e5%ae%9a%e6%95%b0%ef%bc%89%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bd%9cprice_close%e3%81%8b%e3%82%89price_weighted%e3%81%be/">【MQL4】ENUM_APPLIED_PRICE（価格定数）完全ガイド｜PRICE_CLOSEからPRICE_WEIGHTEDまで7種類を徹底解説</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>MQL4でインジケーター関数を使うとき、「どの価格を基準に計算するか」を指定する場面が頻繁にあります。たとえば移動平均線を計算するとき、終値を使うのか、高値と安値の平均を使うのかで結果が変わりますよね。</p>
<p>この「どの価格を使うか」を指定するために用意されているのが、<strong>ENUM_APPLIED_PRICE</strong>（適用価格の列挙型）です。全部で7種類の定数があり、iMA()やiRSI()などの組み込み関数で頻繁に使われます。</p>
<p>この記事では、7つの価格定数それぞれの意味と計算式、そして実際のコードでの使い方をわかりやすく解説します。</p>
<h2><span id="toc1">ENUM_APPLIED_PRICEとは？</span></h2>
<p>ENUM_APPLIED_PRICEは、MQL4で定義されている<strong>列挙型（enum）</strong>のひとつです。テクニカル指標の計算に使う「価格の種類」を指定するために使います。</p>
<p>たとえば、移動平均線を計算する<code>iMA()</code>関数のシグネチャを見てみましょう。</p>
<pre><code class="language-mql4">double iMA(
   string       symbol,           // 通貨ペア
   int          timeframe,        // 時間足
   int          ma_period,        // 期間
   int          ma_shift,         // シフト
   int          ma_method,        // 移動平均の種類
   int          applied_price,    // 適用価格 ← ここ！
   int          shift             // バーのインデックス
);
</code></pre>
<p>この<strong>applied_price</strong>の部分に、ENUM_APPLIED_PRICEの定数を指定します。どの定数を選ぶかによって、計算結果が変わってくるわけです。</p>
<h2><span id="toc2">7つの価格定数一覧</span></h2>
<p>ENUM_APPLIED_PRICEには、以下の7つの定数が定義されています。</p>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; width: 100%;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>値</th>
<th>説明</th>
<th>計算式</th>
</tr>
</thead>
<tbody>
<tr>
<td>PRICE_CLOSE</td>
<td>0</td>
<td>終値</td>
<td>Close</td>
</tr>
<tr>
<td>PRICE_OPEN</td>
<td>1</td>
<td>始値</td>
<td>Open</td>
</tr>
<tr>
<td>PRICE_HIGH</td>
<td>2</td>
<td>高値</td>
<td>High</td>
</tr>
<tr>
<td>PRICE_LOW</td>
<td>3</td>
<td>安値</td>
<td>Low</td>
</tr>
<tr>
<td>PRICE_MEDIAN</td>
<td>4</td>
<td>中間値</td>
<td>(High + Low) / 2</td>
</tr>
<tr>
<td>PRICE_TYPICAL</td>
<td>5</td>
<td>典型値</td>
<td>(High + Low + Close) / 3</td>
</tr>
<tr>
<td>PRICE_WEIGHTED</td>
<td>6</td>
<td>加重終値</td>
<td>(High + Low + Close + Close) / 4</td>
</tr>
</tbody>
</table>
<h3><span id="toc3">PRICE_CLOSE（終値）— 値: 0</span></h3>
<p>もっとも一般的に使われる適用価格です。各ローソク足の<strong>終値（Close）</strong>を使って計算します。特にこだわりがなければ、まずはこれを選んでおけば問題ありません。多くのトレーダーやテクニカル分析の教科書でも、終値ベースの計算がデフォルトとされています。</p>
<h3><span id="toc4">PRICE_OPEN（始値）— 値: 1</span></h3>
<p>各ローソク足の<strong>始値（Open）</strong>を使って計算します。始値はバーの開始時点の価格なので、「そのバーが始まった瞬間にわかる値」という特徴があります。バックテストやリアルタイム処理で、確定済みの値だけを使いたい場合に選ばれることがあります。</p>
<h3><span id="toc5">PRICE_HIGH（高値）— 値: 2</span></h3>
<p>各ローソク足の<strong>高値（High）</strong>を使って計算します。高値ベースの移動平均線は、レジスタンスライン（上値抵抗線）のような役割として活用できます。</p>
<h3><span id="toc6">PRICE_LOW（安値）— 値: 3</span></h3>
<p>各ローソク足の<strong>安値（Low）</strong>を使って計算します。安値ベースの移動平均線は、サポートライン（下値支持線）のような役割として活用できます。PRICE_HIGHと組み合わせて移動平均チャネルを作る使い方が人気です。</p>
<h3><span id="toc7">PRICE_MEDIAN（中間値）— 値: 4</span></h3>
<p>計算式は <strong>(High + Low) / 2</strong> です。ローソク足の高値と安値のちょうど中間の価格、つまりそのバーの「値幅の中心」を使います。終値の偏りを排除し、そのバーの価格帯の中心で計算したいときに使います。</p>
<h3><span id="toc8">PRICE_TYPICAL（典型値）— 値: 5</span></h3>
<p>計算式は <strong>(High + Low + Close) / 3</strong> です。Median Price（中間値）に終値を加えて3で割った値で、中間値よりも<strong>実際の値動きの結果（終値）を反映</strong>した価格になります。CCI（商品チャネル指数）などのインジケーターでは、このTypical Priceが標準的に使われています。</p>
<h3><span id="toc9">PRICE_WEIGHTED（加重終値）— 値: 6</span></h3>
<p>計算式は <strong>(High + Low + Close + Close) / 4</strong> です。Typical Price（典型値）の計算式で終値を2回カウントすることで、<strong>終値により大きな比重</strong>を置いた価格です。「値幅全体も考慮したいけど、やっぱり終値を重視したい」という場合に適しています。</p>
<p>この3つの関係性を整理すると、次のようになります。</p>
<ul>
<li><strong>Median Price</strong>（HL/2）：ローソク足の値幅の中間値</li>
<li><strong>Typical Price</strong>（HLC/3）：中間値に終値を加え、より実際の値動きに近づけた値</li>
<li><strong>Weighted Close</strong>（HLCC/4）：さらに終値の比重を高め、終値に近づけた値</li>
</ul>
<h2><span id="toc10">実際のコードでの使い方</span></h2>
<h3><span id="toc11">iMA関数での基本的な使用例</span></h3>
<p>もっとも基本的な使い方です。20期間の単純移動平均線を終値ベースで計算します。</p>
<pre><code class="language-mql4">void OnTick()
{
   // 20期間SMAを終値(PRICE_CLOSE)で計算
   double ma_close = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);

   // 20期間SMAを典型値(PRICE_TYPICAL)で計算
   double ma_typical = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_TYPICAL, 0);

   Print("終値ベースSMA: ", ma_close);
   Print("典型値ベースSMA: ", ma_typical);
}
</code></pre>
<p>同じ期間・同じ移動平均の種類でも、適用価格を変えるだけで計算結果が変わることがわかります。</p>
<h3><span id="toc12">iRSI関数での使用例</span></h3>
<p>RSI（相対力指数）でも適用価格を指定できます。</p>
<pre><code class="language-mql4">void OnTick()
{
   // 14期間RSIを終値で計算
   double rsi = iRSI(NULL, 0, 14, PRICE_CLOSE, 0);

   if(rsi > 70)
   {
      Print("RSIが70を超えました（買われすぎ）: ", rsi);
   }
   else if(rsi < 30)
   {
      Print("RSIが30を下回りました（売られすぎ）: ", rsi);
   }
}
</code></pre>
<h3><span id="toc13">HIGH/LOWを使った移動平均チャネルの作成例</span></h3>
<p>PRICE_HIGHとPRICE_LOWを組み合わせると、価格を挟み込むようなチャネル（帯）を作ることができます。</p>
<pre><code class="language-mql4">void OnTick()
{
   int period = 20;

   // 高値ベースの移動平均（上側バンド）
   double upper = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_HIGH, 0);

   // 安値ベースの移動平均（下側バンド）
   double lower = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_LOW, 0);

   // 終値ベースの移動平均（中央線）
   double middle = iMA(NULL, 0, period, 0, MODE_SMA, PRICE_CLOSE, 0);

   Print("上側: ", upper, " 中央: ", middle, " 下側: ", lower);

   // 現在価格が上側バンドを超えたら
   if(Ask > upper)
   {
      Print("価格が移動平均チャネルの上側を突破！");
   }
   // 現在価格が下側バンドを下回ったら
   if(Bid < lower)
   {
      Print("価格が移動平均チャネルの下側を突破！");
   }
}
</code></pre>
<p>このように、適用価格を変えるだけで同じiMA関数から異なる性質のラインを引くことができます。</p>
<h2><span id="toc14">input変数でユーザーに選ばせる方法</span></h2>
<p>EAやカスタムインジケーターを作るとき、適用価格をユーザーがパラメーター画面から選べるようにしたいですよね。MQL4では、<strong>ENUM_APPLIED_PRICEをinput変数の型として使う</strong>ことで、自動的にドロップダウンリストが表示されます。</p>
<pre><code class="language-mql4">// パラメーター設定
input int                 MAPeriod     = 20;            // 移動平均の期間
input ENUM_MA_METHOD      MAMethod     = MODE_SMA;      // 移動平均の種類
input ENUM_APPLIED_PRICE  MAPrice      = PRICE_CLOSE;   // 適用価格

void OnTick()
{
   double ma = iMA(NULL, 0, MAPeriod, 0, MAMethod, MAPrice, 0);
   Print("MA値: ", ma);
}
</code></pre>
<p>このように書くだけで、MetaTraderのパラメーター入力画面に「適用価格」のドロップダウンリストが自動生成されます。ユーザーは「Close price」「Open price」「Median Price (HL/2)」…といった選択肢から直感的に選ぶことができます。</p>
<p>int型で宣言してユーザーに数値を手入力させるよりも、<strong>はるかに使いやすく、入力ミスも防げる</strong>優れた方法です。EAやインジケーターを配布する場合は、ぜひこの書き方を使いましょう。</p>
<h2><span id="toc15">定数の整数値を直接使う場合の注意</span></h2>
<p>ENUM_APPLIED_PRICEの各定数には整数値（0〜6）が割り当てられているため、数値を直接指定しても動作します。</p>
<pre><code class="language-mql4">// 定数名を使う場合（推奨）
double ma1 = iMA(NULL, 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);

// 整数値を直接使う場合（非推奨）
double ma2 = iMA(NULL, 0, 20, 0, MODE_SMA, 0, 0);
</code></pre>
<p>上の2行はどちらも同じ結果になりますが、<strong>整数値を直接書く方法はおすすめしません</strong>。理由は以下の通りです。</p>
<ul>
<li><strong>可読性が低い</strong>：「0」だけでは何の価格かすぐにわからない</li>
<li><strong>保守性が悪い</strong>：後から見たとき、あるいは他の人が見たときに意味が伝わらない</li>
<li><strong>タイプミスに気づきにくい</strong>：定数名なら打ち間違えればコンパイルエラーになるが、数値だと範囲外の値でも気づきにくい</li>
</ul>
<p>常に<strong>PRICE_CLOSE</strong>や<strong>PRICE_TYPICAL</strong>のような定数名を使うようにしましょう。</p>
<h2><span id="toc16">どの適用価格を選ぶべきか？</span></h2>
<p>7種類もあると「結局どれを使えばいいの？」と迷いますよね。以下に用途別の目安をまとめます。</p>
<table border="1" cellpadding="8" cellspacing="0" style="border-collapse: collapse; width: 100%;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>用途・場面</th>
<th>おすすめの適用価格</th>
</tr>
</thead>
<tbody>
<tr>
<td>一般的なトレンド分析</td>
<td>PRICE_CLOSE（最も標準的）</td>
</tr>
<tr>
<td>ノイズを減らしたい</td>
<td>PRICE_TYPICAL または PRICE_MEDIAN</td>
</tr>
<tr>
<td>終値重視だがノイズも減らしたい</td>
<td>PRICE_WEIGHTED</td>
</tr>
<tr>
<td>レジスタンスライン的に使いたい</td>
<td>PRICE_HIGH</td>
</tr>
<tr>
<td>サポートライン的に使いたい</td>
<td>PRICE_LOW</td>
</tr>
<tr>
<td>CCIなど特定のインジケーター</td>
<td>PRICE_TYPICAL（標準仕様に従う）</td>
</tr>
</tbody>
</table>
<p>迷ったときは<strong>PRICE_CLOSE</strong>を選んでおけば、まず間違いありません。そこから最適化やバックテストを行って、他の価格定数を試してみるのがよいでしょう。</p>
<h2><span id="toc17">まとめ</span></h2>
<p>ENUM_APPLIED_PRICEは、テクニカル指標の計算に「どの価格を使うか」を指定するための列挙型です。今回のポイントを振り返りましょう。</p>
<ul>
<li><strong>7種類の定数</strong>がある：PRICE_CLOSE（終値）、PRICE_OPEN（始値）、PRICE_HIGH（高値）、PRICE_LOW（安値）、PRICE_MEDIAN（中間値）、PRICE_TYPICAL（典型値）、PRICE_WEIGHTED（加重終値）</li>
<li><strong>iMA()やiRSI()</strong>などの組み込み関数で、applied_priceパラメーターに指定して使う</li>
<li><strong>input変数の型</strong>にENUM_APPLIED_PRICEを使えば、ドロップダウンリストで選択できるようになる</li>
<li>整数値の直接指定は動作するが、<strong>可読性の観点から定数名を使うべき</strong></li>
<li>迷ったら<strong>PRICE_CLOSE</strong>が最も無難で一般的</li>
</ul>
<p>適用価格の選択はインジケーターの計算結果に直接影響するため、それぞれの意味を理解しておくことが大切です。この記事を参考に、自分のEAやインジケーターに最適な適用価格を選んでみてください。</p>
<p>投稿 <a href="https://mql-programing.com/archives/13074/%e3%80%90mql4%e3%80%91enum_applied_price%ef%bc%88%e4%be%a1%e6%a0%bc%e5%ae%9a%e6%95%b0%ef%bc%89%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bd%9cprice_close%e3%81%8b%e3%82%89price_weighted%e3%81%be/">【MQL4】ENUM_APPLIED_PRICE（価格定数）完全ガイド｜PRICE_CLOSEからPRICE_WEIGHTEDまで7種類を徹底解説</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4】時間足定数（ENUM_TIMEFRAMES）完全ガイド｜PERIOD_M1〜PERIOD_MN1の一覧と実践的な使い方</title>
		<link>https://mql-programing.com/archives/13071/%e3%80%90mql4%e3%80%91%e6%99%82%e9%96%93%e8%b6%b3%e5%ae%9a%e6%95%b0%ef%bc%88enum_timeframes%ef%bc%89%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bd%9cperiod_m1%e3%80%9cperiod_mn1%e3%81%ae%e4%b8%80/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sat, 25 Apr 2026 01:00:00 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[ENUM_TIMEFRAMES]]></category>
		<category><![CDATA[MQL4]]></category>
		<category><![CDATA[EA開発]]></category>
		<category><![CDATA[時間足]]></category>
		<category><![CDATA[マルチタイムフレーム]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=13071</guid>

					<description><![CDATA[<p>MQL4でEAやインジケーターを作っていると、「1時間足の移動平均線を取得したい」「日足のローソク足データを参照したい」といった場面が頻繁に出てきます。そんなときに使うのが時間足定数（ENUM_TIMEFRAMES）です [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/13071/%e3%80%90mql4%e3%80%91%e6%99%82%e9%96%93%e8%b6%b3%e5%ae%9a%e6%95%b0%ef%bc%88enum_timeframes%ef%bc%89%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bd%9cperiod_m1%e3%80%9cperiod_mn1%e3%81%ae%e4%b8%80/">【MQL4】時間足定数（ENUM_TIMEFRAMES）完全ガイド｜PERIOD_M1〜PERIOD_MN1の一覧と実践的な使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[<p>MQL4でEAやインジケーターを作っていると、「1時間足の移動平均線を取得したい」「日足のローソク足データを参照したい」といった場面が頻繁に出てきます。そんなときに使うのが<strong>時間足定数（ENUM_TIMEFRAMES）</strong>です。</p>
<p>この記事では、MQL4で使える時間足定数をすべて一覧で紹介し、基本的な使い方からマルチタイムフレーム分析への応用まで、実践的なコード例とともに解説します。</p>
<h2><span id="toc1">ENUM_TIMEFRAMESとは？</span></h2>
<p>ENUM_TIMEFRAMESは、MetaTraderのチャート時間足を表す<strong>列挙型（enum）</strong>です。列挙型とは、あらかじめ決められた名前付きの定数をグループ化したもので、「どの時間足か」をプログラム上でわかりやすく指定するために使います。</p>
<p>例えば、1時間足を指定するときに数値の <code>60</code> と書くよりも、<code>PERIOD_H1</code> と書いたほうが圧倒的に読みやすいですよね。これが時間足定数を使う最大のメリットです。</p>
<h2><span id="toc2">時間足定数の一覧（MQL4）</span></h2>
<p>MQL4で使用できる時間足定数は、特殊な <code>PERIOD_CURRENT</code> を含めて全部で<strong>10個</strong>です。以下の表にまとめました。</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%; text-align: center;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>整数値</th>
<th>意味</th>
<th>1本あたりの秒数</th>
</tr>
</thead>
<tbody>
<tr>
<td>PERIOD_CURRENT</td>
<td>0</td>
<td>現在のチャートの時間足</td>
<td>（チャートに依存）</td>
</tr>
<tr>
<td>PERIOD_M1</td>
<td>1</td>
<td>1分足</td>
<td>60秒</td>
</tr>
<tr>
<td>PERIOD_M5</td>
<td>5</td>
<td>5分足</td>
<td>300秒</td>
</tr>
<tr>
<td>PERIOD_M15</td>
<td>15</td>
<td>15分足</td>
<td>900秒</td>
</tr>
<tr>
<td>PERIOD_M30</td>
<td>30</td>
<td>30分足</td>
<td>1,800秒</td>
</tr>
<tr>
<td>PERIOD_H1</td>
<td>60</td>
<td>1時間足</td>
<td>3,600秒</td>
</tr>
<tr>
<td>PERIOD_H4</td>
<td>240</td>
<td>4時間足</td>
<td>14,400秒</td>
</tr>
<tr>
<td>PERIOD_D1</td>
<td>1440</td>
<td>日足</td>
<td>86,400秒</td>
</tr>
<tr>
<td>PERIOD_W1</td>
<td>10080</td>
<td>週足</td>
<td>604,800秒</td>
</tr>
<tr>
<td>PERIOD_MN1</td>
<td>43200</td>
<td>月足</td>
<td>約2,592,000秒</td>
</tr>
</tbody>
</table>
<p>MQL4の整数値は<strong>「分」を基準</strong>にしています。例えば PERIOD_H1 は60分なので整数値が60、PERIOD_D1 は1440分（24時間×60分）なので1440です。この規則を覚えておくと、値の意味がすぐに理解できます。</p>
<h2><span id="toc3">MQL5との違いに注意</span></h2>
<p>MQL4からMQL5へコードを移植する際に、最もハマりやすいポイントの一つがこの時間足定数の整数値の違いです。</p>
<p>MQL5ではビットシフトを用いた全く異なる整数値が割り当てられています。</p>
<table border="1" cellpadding="6" cellspacing="0" style="border-collapse: collapse; width: 100%; text-align: center;">
<thead>
<tr style="background-color: #f0f0f0;">
<th>定数名</th>
<th>MQL4の整数値</th>
<th>MQL5の整数値</th>
</tr>
</thead>
<tbody>
<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_H1</td>
<td>60</td>
<td>16385</td>
</tr>
<tr>
<td>PERIOD_D1</td>
<td>1440</td>
<td>16408</td>
</tr>
<tr>
<td>PERIOD_W1</td>
<td>10080</td>
<td>32769</td>
</tr>
<tr>
<td>PERIOD_MN1</td>
<td>43200</td>
<td>49153</td>
</tr>
</tbody>
</table>
<p>分足（M1〜M30）まではMQL4とMQL5で同じ値ですが、<strong>H1以上は完全に異なります</strong>。定数名（PERIOD_H1など）を使っていれば問題ありませんが、整数値をハードコードしていると移植時にバグの原因になります。常に定数名を使う習慣をつけましょう。</p>
<h2><span id="toc4">基本的な使い方</span></h2>
<h3><span id="toc5">iMA()で別の時間足の移動平均線を取得する</span></h3>
<p>最もよく使うパターンが、<code>iMA()</code> などのテクニカル指標関数に時間足を指定するケースです。</p>
<pre><code class="language-mql4">// 現在の通貨ペアの1時間足で、20期間の単純移動平均線を取得
double ma_h1 = iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);

// 日足の20期間移動平均線を取得
double ma_d1 = iMA(NULL, PERIOD_D1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
</code></pre>
<p>第1引数の <code>NULL</code> は現在の通貨ペアを意味し、第2引数に時間足定数を指定します。</p>
<h3><span id="toc6">iClose()で別の時間足の終値を取得する</span></h3>
<pre><code class="language-mql4">// 日足の1本前（昨日）の終値を取得
double yesterday_close = iClose(NULL, PERIOD_D1, 1);

// 4時間足の現在のバーの始値を取得
double h4_open = iOpen(NULL, PERIOD_H4, 0);
</code></pre>
<h3><span id="toc7">Period()で現在の時間足を取得する</span></h3>
<pre><code class="language-mql4">// 現在のチャートの時間足を取得
int current_tf = Period();

// 現在の時間足が1時間足かどうか判定
if(Period() == PERIOD_H1)
{
    Print("現在のチャートは1時間足です");
}
</code></pre>
<p><code>Period()</code> 関数は現在のチャートの時間足を整数値で返します。PERIOD_CURRENTを指定したときと同じ時間足のデータが取得されます。</p>
<h2><span id="toc8">実践テクニック</span></h2>
<h3><span id="toc9">inputパラメーターでドロップダウン選択にする</span></h3>
<p>EAのパラメーターに <code>ENUM_TIMEFRAMES</code> 型を使うと、MetaTraderのパラメーター設定画面で<strong>ドロップダウンリストから時間足を選択</strong>できるようになります。これは非常に便利なテクニックです。</p>
<pre><code class="language-mql4">input ENUM_TIMEFRAMES InpTimeframe = PERIOD_H1; // 分析する時間足
input int             InpMAPeriod  = 20;         // 移動平均線の期間

void OnTick()
{
    double ma = iMA(NULL, InpTimeframe, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
    // ユーザーが選択した時間足のMAを使って売買判断
}
</code></pre>
<p>ユーザーが数値を手入力する必要がなく、選択ミスも防げるので、EA配布時にも親切な設計になります。</p>
<h3><span id="toc10">PeriodSeconds()で時間足を秒数に変換する</span></h3>
<pre><code class="language-mql4">// 現在の時間足の1本あたりの秒数を取得
int seconds = PeriodSeconds(PERIOD_H1);
Print("1時間足の1本 = ", seconds, "秒"); // 3600秒

// 引数を省略すると現在のチャートの時間足が使われる
int current_seconds = PeriodSeconds();
</code></pre>
<p>時間計算を行う場面（例：「次のバーが生成されるまで何秒か」など）で非常に役立ちます。</p>
<h3><span id="toc11">マルチタイムフレーム分析のEAサンプル</span></h3>
<p>実践的な例として、日足のトレンド方向を確認してからエントリーする簡易EAのロジックを紹介します。</p>
<pre><code class="language-mql4">input ENUM_TIMEFRAMES InpEntryTF  = PERIOD_H1;  // エントリー判断の時間足
input ENUM_TIMEFRAMES InpFilterTF = PERIOD_D1;  // トレンドフィルターの時間足
input int             InpMAPeriod = 20;          // MA期間

void OnTick()
{
    // 上位足（日足）のMAでトレンド方向を判定
    double ma_filter = iMA(NULL, InpFilterTF, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
    double price_filter = iClose(NULL, InpFilterTF, 0);
    
    bool uptrend   = (price_filter > ma_filter);
    bool downtrend = (price_filter < ma_filter);
    
    // エントリー足のMAでエントリーシグナルを判定
    double ma_entry = iMA(NULL, InpEntryTF, InpMAPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
    double price_entry = iClose(NULL, InpEntryTF, 0);
    
    // 日足が上昇トレンド かつ 1時間足で価格がMAを上抜け → 買いシグナル
    if(uptrend &#038;&#038; price_entry > ma_entry)
    {
        // 買い注文のロジック
        Print("買いシグナル検出！");
    }
    
    // 日足が下降トレンド かつ 1時間足で価格がMAを下抜け → 売りシグナル
    if(downtrend && price_entry < ma_entry)
    {
        // 売り注文のロジック
        Print("売りシグナル検出！");
    }
}
</code></pre>
<p>このように、時間足定数を活用すれば<strong>マルチタイムフレーム分析</strong>のロジックを簡潔に書くことができます。</p>
<h2><span id="toc12">よくある注意点・トラブル</span></h2>
<h3><span id="toc13">整数値の直書きは避ける</span></h3>
<p>以下のように整数値を直接書くのは避けましょう。</p>
<pre><code class="language-mql4">// &#x274c; 悪い例：何を意味しているのかわかりにくい
double ma = iMA(NULL, 60, 20, 0, MODE_SMA, PRICE_CLOSE, 0);

// &#x2705; 良い例：PERIOD_H1と書けば一目で1時間足とわかる
double ma = iMA(NULL, PERIOD_H1, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
</code></pre>
<p>可読性が下がるだけでなく、MQL5へ移植する際にバグの原因になります。</p>
<h3><span id="toc14">ヒストリーデータ不足に注意</span></h3>
<p>別の時間足のデータを参照するとき、MetaTraderにその時間足の<strong>ヒストリーデータが十分にダウンロードされていない</strong>場合があります。特にバックテスト時に、上位足のデータが不足していると正しい結果が得られません。</p>
<p>必要な時間足のチャートを一度開いてデータを読み込ませるか、スクリプトで事前にデータの存在を確認する処理を入れておくと安心です。</p>
<h3><span id="toc15">PERIOD_CURRENTと0の違い</span></h3>
<p><code>PERIOD_CURRENT</code> の整数値は <code>0</code> です。関数に <code>0</code> を渡しても <code>PERIOD_CURRENT</code> を渡しても同じ動作になりますが、コードの意図を明確にするために <code>PERIOD_CURRENT</code> を使うことをおすすめします。</p>
<h2><span id="toc16">まとめ</span></h2>
<p>MQL4の時間足定数（ENUM_TIMEFRAMES）について、重要なポイントを整理します。</p>
<ul>
<li><strong>PERIOD_M1〜PERIOD_MN1</strong>の9つの時間足定数と、<strong>PERIOD_CURRENT</strong>（現在のチャートの時間足）が使える</li>
<li>MQL4の整数値は<strong>「分」が基準</strong>（H1=60, D1=1440など）</li>
<li>MQL5では<strong>H1以上の整数値が全く異なる</strong>ため、移植時は必ず定数名を使う</li>
<li><code>input ENUM_TIMEFRAMES</code> でパラメーター化すると、<strong>ドロップダウン選択</strong>が自動生成されて便利</li>
<li><code>PeriodSeconds()</code> で時間足を秒数に変換でき、時間計算に活用できる</li>
<li>マルチタイムフレーム分析では、上位足のデータ（ヒストリー）が十分にあるか確認が必要</li>
</ul>
<p>時間足定数はEA開発で日常的に使う基本中の基本です。まずは <code>iMA()</code> や <code>iClose()</code> に異なる時間足を指定するところから試してみてください。マルチタイムフレーム分析ができるようになると、EA戦略の幅が大きく広がりますよ！</p>
<p>投稿 <a href="https://mql-programing.com/archives/13071/%e3%80%90mql4%e3%80%91%e6%99%82%e9%96%93%e8%b6%b3%e5%ae%9a%e6%95%b0%ef%bc%88enum_timeframes%ef%bc%89%e5%ae%8c%e5%85%a8%e3%82%ac%e3%82%a4%e3%83%89%ef%bd%9cperiod_m1%e3%80%9cperiod_mn1%e3%81%ae%e4%b8%80/">【MQL4】時間足定数（ENUM_TIMEFRAMES）完全ガイド｜PERIOD_M1〜PERIOD_MN1の一覧と実践的な使い方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】初期化関数の戻り値の定数（ENUM_INIT_RETCODE）</title>
		<link>https://mql-programing.com/archives/2908/enum_init_retcode/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 15 May 2022 02:34:58 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[ENUM_INIT_RETCODE]]></category>
		<category><![CDATA[OnInit]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=2908</guid>

					<description><![CDATA[<p>初期化関数の戻り値の定数（ENUM_INIT_RETCODE） 初期化関数の戻り値の定数（ENUM_INIT_RETCODE）は、OnInit関数の戻り値として使われる定数です。 初期化が成功したのか、失敗したのかを戻す [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/2908/enum_init_retcode/">【MQL4定数】初期化関数の戻り値の定数（ENUM_INIT_RETCODE）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">初期化関数の戻り値の定数（ENUM_INIT_RETCODE）</span></h2>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">初期化関数の戻り値の定数（ENUM_INIT_RETCODE）は、OnInit関数の戻り値として使われる定数です。</span></strong></p>



<p class="wp-block-paragraph">初期化が成功したのか、失敗したのかを戻すことができます。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc2">初期化関数の戻り値の定数（ENUM_INIT_RETCODE）</span></h3>



<figure class="wp-block-table alignfull is-style-stripes"><table><tbody><tr><td><strong>定数</strong></td><td><strong>説明</strong></td></tr><tr><td>INIT_SUCCEEDED</td><td>初期化成功</td></tr><tr><td>INIT_FAILED</td><td>初期化失敗</td></tr><tr><td>INIT_PARAMETERS_INCORRECT</td><td>パラメータに異常値が代入されている</td></tr><tr><td>INIT_AGENT_NOT_SUITABLE</td><td>メモリ不足などの問題が発生</td></tr></tbody></table></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">初期化関数の戻り値の定数の使い方</span></h2>



<p class="wp-block-paragraph">主に、<strong>OnInit関数</strong>で使用されます。</p>



<p class="wp-block-paragraph">OnInit関数の戻り値として記述します。</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>//異常値を検出するためのパラメータ
input int ma_period=10;

int OnInit()
  {


   //パラメータが異常かどうかをチェック
   if(ma_period &lt;= 0)
     {
      //パラメータが異常なので、INIT_PARAMETERS_INCORRECT定数を戻す
      return (INIT_PARAMETERS_INCORRECT);
     }


   //メモリに異常がないかチェック
   int memory = TerminalInfoInteger(TERMINAL_MEMORY_TOTAL);
   if(memory &lt; 2000)
     {
      //メモリが異常なので、INIT_AGENT_NOT_SUITABLE定数を戻す
      return (INIT_AGENT_NOT_SUITABLE);
     }


   //その他異常がないかチェック
   double ma = iMA(Symbol(), PERIOD_CURRENT, 14, 0, MODE_SMA, PRICE_CLOSE, 0);
   if(ma &lt;= 0)
     {
      //値が異常なので、INIT_FAILED定数を戻す
      return(INIT_FAILED);
     }


   //正常なので、INIT_SUCCEEDED定数を戻す
   return(INIT_SUCCEEDED);
  }</code></pre></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">ほとんどの場合、<strong><span class="marker-under-red">成功（INIT_SUCCEEDED）と異常（INIT_FAILED）の定数</span></strong>を使えば良いので、この2つを覚えておくと良いでしょう。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



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



<p class="wp-block-paragraph">以下は、初期化関数の戻り値の定数（ENUM_INIT_RETCODE）を活用したEAのサンプルプログラムです。</p>



<p class="wp-block-paragraph">OnInit関数内で各種チェックを行い、適切な定数を返しています。初期化に成功した場合のみOnTick関数で移動平均線の値をログに出力します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| ENUM_INIT_RETCODE サンプルプログラム                              |
//+------------------------------------------------------------------+
#property strict

//--- 入力パラメータ
input int    InpMaPeriod   = 14;    // 移動平均の期間
input double InpLotSize    = 0.1;   // ロットサイズ

//--- グローバル変数
double g_maValue;

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
  {
   //--- パラメータが異常かどうかをチェック
   if(InpMaPeriod &lt;= 0)
     {
      Print("エラー: 移動平均の期間が不正です。期間=", InpMaPeriod);
      return(INIT_PARAMETERS_INCORRECT);
     }

   //--- ロットサイズが異常かどうかをチェック
   if(InpLotSize &lt;= 0 || InpLotSize &gt; 10.0)
     {
      Print("エラー: ロットサイズが不正です。ロット=", InpLotSize);
      return(INIT_PARAMETERS_INCORRECT);
     }

   //--- メモリに異常がないかチェック
   int memory = TerminalInfoInteger(TERMINAL_MEMORY_TOTAL);
   if(memory &lt; 2000)
     {
      Print("エラー: メモリが不足しています。メモリ=", memory, "MB");
      return(INIT_AGENT_NOT_SUITABLE);
     }

   //--- 移動平均の値を取得してチェック
   g_maValue = iMA(Symbol(), PERIOD_CURRENT, InpMaPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);
   if(g_maValue &lt;= 0)
     {
      Print("エラー: 移動平均の値が取得できませんでした。");
      return(INIT_FAILED);
     }

   //--- すべてのチェックに問題なし
   Print("初期化成功: 移動平均期間=", InpMaPeriod, " ロット=", InpLotSize);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| ティック関数                                                      |
//+------------------------------------------------------------------+
void OnTick()
  {
   //--- 移動平均の最新値を取得
   g_maValue = iMA(Symbol(), PERIOD_CURRENT, InpMaPeriod, 0, MODE_SMA, PRICE_CLOSE, 0);

   //--- 現在の価格と移動平均の値をログに出力
   double currentPrice = Close[0];
   Print("現在価格=", currentPrice, " 移動平均=", g_maValue);

   //--- 価格が移動平均より上か下かを判定
   if(currentPrice &gt; g_maValue)
     {
      Print("現在価格は移動平均より上です（買いシグナル）");
     }
   else
     {
      Print("現在価格は移動平均より下です（売りシグナル）");
     }
  }

//+------------------------------------------------------------------+
//| 終了関数                                                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   Print("EAを終了します。理由コード=", reason);
  }</code></pre></div>



<p class="wp-block-paragraph">このサンプルでは、OnInit関数内で以下の4つのチェックを行っています。</p>



<ul class="wp-block-list">
<li><strong>移動平均の期間チェック</strong>：0以下の場合は<code>INIT_PARAMETERS_INCORRECT</code>を返す</li>
<li><strong>ロットサイズのチェック</strong>：0以下または10を超える場合は<code>INIT_PARAMETERS_INCORRECT</code>を返す</li>
<li><strong>メモリのチェック</strong>：メモリが不足している場合は<code>INIT_AGENT_NOT_SUITABLE</code>を返す</li>
<li><strong>移動平均値の取得チェック</strong>：値が取得できない場合は<code>INIT_FAILED</code>を返す</li>
</ul>



<p class="wp-block-paragraph">すべてのチェックに問題がなければ、<code>INIT_SUCCEEDED</code>を返して正常に初期化が完了します。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc5">【補足】初期化関数の戻り値の定数の列挙型（ENUM_INIT_RETCODE）</span></h2>



<p class="wp-block-paragraph">初期化関数の戻り値の定数は、ENUM_INIT_RETCODEという<a href="https://mql-programing.com/enum/">列挙型</a>に含まれています。</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_INIT_RETCODE initRetcode = INIT_SUCCEEDED;</code></pre></div>



<p class="wp-block-paragraph">上記のようにプログラムすると、initRetcode変数に INIT_SUCCEEDEDの値が代入されます。</p>



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



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



<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/enum/" 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/09/enum.jpg?fit=1200%2C675&#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">目次 列挙型とは？列挙型と配列の違い列挙型と配列のデータの取り出し方法の違い列挙型と配列のデータの取り出し方法のまとめ列挙型の構造と使い方列挙型の構造列挙型の使い方列挙型はどこで使われているのか列挙型のプログラム例まとめ</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/1399/enum/" 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/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://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2021/09/make_autotrade_by_myself.jpg?fit=1200%2C675&#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">【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり</div><div class="blogcard-snippet external-blogcard-snippet">目次 はじめにFX自動売買とはFX自動売買を作るための準備FX自動売買の作り方口座凍結の対策をするプログラムテンプレートを作る決済ロジックをプログラミングするプログラムテンプレートを作るエントリーロジックをプログラミング</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/2908/enum_init_retcode/">【MQL4定数】初期化関数の戻り値の定数（ENUM_INIT_RETCODE）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】エラーコード定数​（ERR_○○）</title>
		<link>https://mql-programing.com/archives/2839/error_code_constant/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 08 May 2022 03:22:19 +0000</pubDate>
				<category><![CDATA[定数]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[ERR_]]></category>
		<category><![CDATA[_LastError]]></category>
		<category><![CDATA[GetLastError]]></category>
		<category><![CDATA[ErrorDescription]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=2839</guid>

					<description><![CDATA[<p>エラーコード定数​（ERR_○○） エラーコード定数​（ERR_○○）は、プログラム実行時のエラー内容を知るための定数です。 例えば、注文が通らなかった場合、ERR_INVALID_TRADE_VOLUMEなどのエラー定 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/2839/error_code_constant/">【MQL4定数】エラーコード定数​（ERR_○○）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">エラーコード定数​（ERR_○○）</span></h2>



<p class="wp-block-paragraph">エラーコード定数​（ERR_○○）は、<strong><span class="marker-under-red">プログラム実行時のエラー内容を知るための定数です。</span></strong></p>



<p class="wp-block-paragraph">例えば、注文が通らなかった場合、ERR_INVALID_TRADE_VOLUMEなどのエラー定数が使用されます。</p>



<p class="wp-block-paragraph">エラーコードは、システムが自動的に<strong>_LastError変数</strong>に格納するものなので、プログラムに記述する必要はありませんが、<strong>デバッグするときに非常に便利</strong>なので、覚えておくと良いでしょう。</p>



<div style="height:79px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">エラーコード定数は、以下の関数で使います。</p>



<ul class="wp-block-list"><li><strong>GetLastError関数：最近のエラーコードを返す関数</strong></li><li><strong>ErrorDescription関数：エラーコードの内容を返す関数</strong></li></ul>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc2">エラーコード定数​（ERR_○○）</span></h3>



<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>ERR_NO_ERROR</td><td>0</td><td>エラーはありません<br>No error returned</td></tr><tr><td>ERR_NO_RESULT</td><td>1</td><td>エラーはありませんが、結果が不明です<br>No error returned, but the result is unknown</td></tr><tr><td>ERR_COMMON_ERROR</td><td>2</td><td>一般的なエラー<br>Common error</td></tr><tr><td>ERR_INVALID_TRADE_PARAMETERS</td><td>3</td><td>無効な取引パラメータ<br>Invalid trade parameters</td></tr><tr><td>ERR_SERVER_BUSY</td><td>4</td><td>トレードサーバーがビジー状態です<br>Trade server is busy</td></tr><tr><td>ERR_OLD_VERSION</td><td>5</td><td>クライアントターミナルのバージョンが古い<br>Old version of the client terminal</td></tr><tr><td>ERR_NO_CONNECTION</td><td>6</td><td>トレードサーバーに接続していません<br>No connection with trade server</td></tr><tr><td>ERR_NOT_ENOUGH_RIGHTS</td><td>7</td><td>権限が十分ではありません<br>Not enough rights</td></tr><tr><td>ERR_TOO_FREQUENT_REQUESTS</td><td>8</td><td>要求が頻繁過ぎます<br>Too frequent requests</td></tr><tr><td>ERR_MALFUNCTIONAL_TRADE</td><td>9</td><td>異常な取引操作です<br>Malfunctional trade operation</td></tr><tr><td>ERR_ACCOUNT_DISABLED</td><td>64</td><td>許可されていないアカウントです<br>Account disabled</td></tr><tr><td>ERR_INVALID_ACCOUNT</td><td>65</td><td>無効なアカウントです<br>Invalid account</td></tr><tr><td>ERR_TRADE_TIMEOUT</td><td>128</td><td>トレードタイムアウト<br>Trade timeout</td></tr><tr><td>ERR_INVALID_PRICE</td><td>129</td><td>無効な価格です<br>Invalid price</td></tr><tr><td>ERR_INVALID_STOPS</td><td>130</td><td>無効なストップ設定です<br>Invalid stops</td></tr><tr><td>ERR_INVALID_TRADE_VOLUME</td><td>131</td><td>無効なトレード量(lot数)です<br>Invalid trade volume</td></tr><tr><td>ERR_MARKET_CLOSED</td><td>132</td><td>市場が閉じています<br>Market is closed</td></tr><tr><td>ERR_TRADE_DISABLED</td><td>133</td><td>トレード無効設定になっています<br>Trade is disabled</td></tr><tr><td>ERR_NOT_ENOUGH_MONEY</td><td>134</td><td>証拠金が不足しています<br>Not enough money</td></tr><tr><td>ERR_PRICE_CHANGED</td><td>135</td><td>価格が変更されました<br>Price changed</td></tr><tr><td>ERR_OFF_QUOTES</td><td>136</td><td>レートが提示されていません<br>Off quotes</td></tr><tr><td>ERR_BROKER_BUSY</td><td>137</td><td>ブローカーがビジー状態です<br>Broker is busy</td></tr><tr><td>ERR_REQUOTE</td><td>138</td><td>レート再提示<br>Requote</td></tr><tr><td>ERR_ORDER_LOCKED</td><td>139</td><td>注文がロックされています<br>Order is locked</td></tr><tr><td>ERR_LONG_POSITIONS_ONLY_ALLOWED</td><td>140</td><td>ロングエントリーのみ許可されています<br>Buy orders only allowed</td></tr><tr><td>ERR_TOO_MANY_REQUESTS</td><td>141</td><td>要求が多過ぎます<br>Too many requests</td></tr><tr><td>ERR_TRADE_MODIFY_DENIED</td><td>145</td><td>変更注文が市場提示価格に近すぎる為、拒否されました。<br>Modification denied because order is too close to market</td></tr><tr><td>ERR_TRADE_CONTEXT_BUSY</td><td>146</td><td>トレードコンテキストがビジーです<br>Trade context is busy</td></tr><tr><td>ERR_TRADE_EXPIRATION_DENIED</td><td>147</td><td>有効期限設定はブローカーによって拒否されました<br>Expirations are denied by broker</td></tr><tr><td>ERR_TRADE_TOO_MANY_ORDERS</td><td>148</td><td>保留中の注文量がブローカーによって設定された上限に達しています<br>The amount of open and pending orders has reached the limit set by the broker</td></tr><tr><td>ERR_TRADE_HEDGE_PROHIBITED</td><td>149</td><td>両建ては無効になっています<br>An attempt to open an order opposite to the existing one when hedging is disabled</td></tr><tr><td>ERR_TRADE_PROHIBITED_BY_FIFO</td><td>150</td><td>FIFOルールに違反したポジション決済をしようとしています<br>An attempt to close an order contravening the FIFO rule</td></tr><tr><td>ERR_NO_MQLERROR</td><td>4000</td><td>エラーはありません<br>No error returned</td></tr><tr><td>ERR_WRONG_FUNCTION_POINTER</td><td>4001</td><td>不正な関数ポインタ<br>Wrong function pointer</td></tr><tr><td>ERR_ARRAY_INDEX_OUT_OF_RANGE</td><td>4002</td><td>配列インデックスの範囲外指定。<br>Array index is out of range.</td></tr><tr><td>ERR_NO_MEMORY_FOR_CALL_STACK</td><td>4003</td><td>関数呼び出しの為のスタックメモリがありません<br>No memory for function call stack</td></tr><tr><td>ERR_RECURSIVE_STACK_OVERFLOW</td><td>4004</td><td>スタックオーバーフロー<br>Recursive stack overflow</td></tr><tr><td>ERR_NOT_ENOUGH_STACK_FOR_PARAM</td><td>4005</td><td>引数の為のスタックが不十分<br>Not enough stack for parameter</td></tr><tr><td>ERR_NO_MEMORY_FOR_PARAM_STRING</td><td>4006</td><td>文字列引数の為のメモリ不足<br>No memory for parameter string</td></tr><tr><td>ERR_NO_MEMORY_FOR_TEMP_STRING</td><td>4007</td><td>文字列の為のメモリ不足<br>No memory for temp string</td></tr><tr><td>ERR_NOT_INITIALIZED_STRING</td><td>4008</td><td>文字列は初期化されません<br>Not initialized string</td></tr><tr><td>ERR_NOT_INITIALIZED_ARRAYSTRING</td><td>4009</td><td>配列文字列は初期化されません<br>Not initialized string in array</td></tr><tr><td>ERR_NO_MEMORY_FOR_ARRAYSTRING</td><td>4010</td><td>配列文字列の為のメモリ不足<br>No memory for array string</td></tr><tr><td>ERR_TOO_LONG_STRING</td><td>4011</td><td>文字列が長過ぎです<br>Too long string</td></tr><tr><td>ERR_REMAINDER_FROM_ZERO_DIVIDE</td><td>4012</td><td>ゼロ除算(余剰)をしています<br>Remainder from zero divide</td></tr><tr><td>ERR_ZERO_DIVIDE</td><td>4013</td><td>ゼロ除算をしています<br>Zero divide</td></tr><tr><td>ERR_UNKNOWN_COMMAND</td><td>4014</td><td>不明なコマンド<br>Unknown command</td></tr><tr><td>ERR_WRONG_JUMP</td><td>4015</td><td>不正なジャンプ<br>Wrong jump (never generated error).</td></tr><tr><td>ERR_NOT_INITIALIZED_ARRAY</td><td>4016</td><td>配列は初期化されません<br>Not initialized array</td></tr><tr><td>ERR_DLL_CALLS_NOT_ALLOWED</td><td>4017</td><td>DLL呼び出しが許可されていません。許可するには、EAプロパティのチェックボックスで設定します<br>DLL calls are not allowed</td></tr><tr><td>ERR_CANNOT_LOAD_LIBRARY</td><td>4018</td><td>ライブラリをロードできません<br>Cannot load library</td></tr><tr><td>ERR_CANNOT_CALL_FUNCTION</td><td>4019</td><td>関数を呼び出せません<br>Cannot call function</td></tr><tr><td>ERR_EXTERNAL_CALLS_NOT_ALLOWED</td><td>4020</td><td>外部関数の呼び出しが許可されていません。許可するには、EAプロパティのチェックボックスで設定します<br>Expert function calls are not allowed</td></tr><tr><td>ERR_NO_MEMORY_FOR_RETURNED_STR</td><td>4021</td><td>関数の文字列型の戻り値の為のメモリが足りません<br>Not enough memory for temp string returned from function</td></tr><tr><td>ERR_SYSTEM_BUSY</td><td>4022</td><td>システムビジー<br>System is busy (never generated error)</td></tr><tr><td>ERR_DLLFUNC_CRITICALERROR</td><td>4023</td><td>DLL呼び出しの致命的なエラー<br>DLL-function call critical error</td></tr><tr><td>ERR_INTERNAL_ERROR</td><td>4024</td><td>内部エラー<br>Internal error</td></tr><tr><td>ERR_OUT_OF_MEMORY</td><td>4025</td><td>メモリ不足<br>Out of memory</td></tr><tr><td>ERR_INVALID_POINTER</td><td>4026</td><td>無効なポインタ<br>Invalid pointer</td></tr><tr><td>ERR_FORMAT_TOO_MANY_FORMATTERS</td><td>4027</td><td>フォーマット関数で引数が多過ぎます<br>Too many formatters in the format function</td></tr><tr><td>ERR_FORMAT_TOO_MANY_PARAMETERS</td><td>4028</td><td>パラメータカウントが上限を超えています<br>Parameters count exceeds formatters count</td></tr><tr><td>ERR_ARRAY_INVALID</td><td>4029</td><td>無効な配列<br>Invalid array</td></tr><tr><td>ERR_CHART_NOREPLY</td><td>4030</td><td>チャートから返信がありません<br>No reply from chart</td></tr><tr><td>ERR_INVALID_FUNCTION_PARAMSCNT</td><td>4050</td><td>無効な関数の引数数<br>Invalid function parameters count</td></tr><tr><td>ERR_INVALID_FUNCTION_PARAMVALUE</td><td>4051</td><td>無効な関数の引数値<br>Invalid function parameter value</td></tr><tr><td>ERR_STRING_FUNCTION_INTERNAL</td><td>4052</td><td>文字列関数の内部エラー<br>String function internal error</td></tr><tr><td>ERR_SOME_ARRAY_ERROR</td><td>4053</td><td>配列エラー<br>Some array error</td></tr><tr><td>ERR_INCORRECT_SERIESARRAY_USING</td><td>4054</td><td>不正な時系列配列使用<br>Incorrect series array using</td></tr><tr><td>ERR_CUSTOM_INDICATOR_ERROR</td><td>4055</td><td>カスタムインジケータエラー<br>Custom indicator error</td></tr><tr><td>ERR_INCOMPATIBLE_ARRAYS</td><td>4056</td><td>互換性の無い配列<br>Arrays are incompatible</td></tr><tr><td>ERR_GLOBAL_VARIABLES_PROCESSING</td><td>4057</td><td>グローバル変数処理エラー<br>Global variables processing error</td></tr><tr><td>ERR_GLOBAL_VARIABLE_NOT_FOUND</td><td>4058</td><td>グローバル変数が見つかりません<br>Global variable not found</td></tr><tr><td>ERR_FUNC_NOT_ALLOWED_IN_TESTING</td><td>4059</td><td>関数がテストモードで許可されていません<br>Function is not allowed in testing mode</td></tr><tr><td>ERR_FUNCTION_NOT_CONFIRMED</td><td>4060</td><td>関数が呼び出し許可されていません<br>Function is not allowed for call</td></tr><tr><td>ERR_SEND_MAIL_ERROR</td><td>4061</td><td>メール送信エラー<br>Send mail error</td></tr><tr><td>ERR_STRING_PARAMETER_EXPECTED</td><td>4062</td><td>文字列引数が必要<br>String parameter expected</td></tr><tr><td>ERR_INTEGER_PARAMETER_EXPECTED</td><td>4063</td><td>整数引数が必要<br>Integer parameter expected</td></tr><tr><td>ERR_DOUBLE_PARAMETER_EXPECTED</td><td>4064</td><td>double引数が必要<br>Double parameter expected</td></tr><tr><td>ERR_ARRAY_AS_PARAMETER_EXPECTED</td><td>4065</td><td>配列引数が必要<br>Array as parameter expected</td></tr><tr><td>ERR_HISTORY_WILL_UPDATED</td><td>4066</td><td>要求したヒストリーデータが更新中<br>Requested history data is in updating state</td></tr><tr><td>ERR_TRADE_ERROR</td><td>4067</td><td>内部トレードエラー<br>Internal trade error</td></tr><tr><td>ERR_RESOURCE_NOT_FOUND</td><td>4068</td><td>リソースが見つかりません<br>Resource not found</td></tr><tr><td>ERR_RESOURCE_NOT_SUPPORTED</td><td>4069</td><td>リソースがサポートされていません<br>Resource not supported</td></tr><tr><td>ERR_RESOURCE_DUPLICATED</td><td>4070</td><td>リソースが重複しています<br>Duplicate resource</td></tr><tr><td>ERR_INDICATOR_CANNOT_INIT</td><td>4071</td><td>カスタムインジケータを初期化できません<br>Custom indicator cannot initialize</td></tr><tr><td>ERR_INDICATOR_CANNOT_LOAD</td><td>4072</td><td>カスタムインジケータをロードできません<br>Cannot load custom indicator</td></tr><tr><td>ERR_NO_HISTORY_DATA</td><td>4073</td><td>ヒストリーデータがありません<br>No history data</td></tr><tr><td>ERR_NO_MEMORY_FOR_HISTORY</td><td>4074</td><td>ヒストリーデータの為のメモリがありません<br>No memory for history data</td></tr><tr><td>ERR_NO_MEMORY_FOR_INDICATOR</td><td>4075</td><td>インジケータ計算の為のメモリがありません<br>Not enough memory for indicator calculation</td></tr><tr><td>ERR_END_OF_FILE</td><td>4099</td><td>ファイルの終わり<br>End of file</td></tr><tr><td>ERR_SOME_FILE_ERROR</td><td>4100</td><td>ファイルエラー<br>Some file error</td></tr><tr><td>ERR_WRONG_FILE_NAME</td><td>4101</td><td>不正なファイル名<br>Wrong file name</td></tr><tr><td>ERR_TOO_MANY_OPENED_FILES</td><td>4102</td><td>ファイルを開き過ぎています<br>Too many opened files</td></tr><tr><td>ERR_CANNOT_OPEN_FILE</td><td>4103</td><td>ファイルが開けません<br>Cannot open file</td></tr><tr><td>ERR_INCOMPATIBLE_FILEACCESS</td><td>4104</td><td>互換性の無いファイルアクセス<br>Incompatible access to a file</td></tr><tr><td>ERR_NO_ORDER_SELECTED</td><td>4105</td><td>オーダー選択されていません<br>No order selected</td></tr><tr><td>ERR_UNKNOWN_SYMBOL</td><td>4106</td><td>不明なシンボル<br>Unknown symbol</td></tr><tr><td>ERR_INVALID_PRICE_PARAM</td><td>4107</td><td>無効な価格<br>Invalid price</td></tr><tr><td>ERR_INVALID_TICKET</td><td>4108</td><td>無効なチケット<br>Invalid ticket</td></tr><tr><td>ERR_TRADE_NOT_ALLOWED</td><td>4109</td><td>トレードが許可されていません。許可するには、EAプロパティのチェックボックスで設定します<br>Trade is not allowed. Enable checkbox &#8220;Allow live trading&#8221; in the Expert Advisor properties</td></tr><tr><td>ERR_LONGS_NOT_ALLOWED</td><td>4110</td><td>買い注文は許可されていません。許可するには、EAプロパティで設定します<br>Longs are not allowed. Check the Expert Advisor properties</td></tr><tr><td>ERR_SHORTS_NOT_ALLOWED</td><td>4111</td><td>売り注文は許可されていません。許可するには、EAプロパティで設定します<br>Shorts are not allowed. Check the Expert Advisor properties</td></tr><tr><td>ERR_TRADE_EXPERT_DISABLED_BY_SERVER</td><td>4112</td><td>EA・スクリプトによる自動売買はトレードサーバーで許可されていません<br>Automated trading by Expert Advisors/Scripts disabled by trade server</td></tr><tr><td>ERR_OBJECT_ALREADY_EXISTS</td><td>4200</td><td>オブジェクトが既に存在しています<br>Object already exists</td></tr><tr><td>ERR_UNKNOWN_OBJECT_PROPERTY</td><td>4201</td><td>不明なオブジェクトプロパティ<br>Unknown object property</td></tr><tr><td>ERR_OBJECT_DOES_NOT_EXIST</td><td>4202</td><td>オブジェクトが存在していません<br>Object does not exist</td></tr><tr><td>ERR_UNKNOWN_OBJECT_TYPE</td><td>4203</td><td>不明なオブジェクトタイプ<br>Unknown object type</td></tr><tr><td>ERR_NO_OBJECT_NAME</td><td>4204</td><td>オブジェクト名がありません<br>No object name</td></tr><tr><td>ERR_OBJECT_COORDINATES_ERROR</td><td>4205</td><td>オブジェクト調整エラー<br>Object coordinates error</td></tr><tr><td>ERR_NO_SPECIFIED_SUBWINDOW</td><td>4206</td><td>サブウインドウを指定出来ません<br>No specified subwindow</td></tr><tr><td>ERR_SOME_OBJECT_ERROR</td><td>4207</td><td>グラフィカルオブジェクトエラー<br>Graphical object error</td></tr><tr><td>ERR_CHART_PROP_INVALID</td><td>4210</td><td>不正なチャートプロパティ<br>Unknown chart property</td></tr><tr><td>ERR_CHART_NOT_FOUND</td><td>4211</td><td>チャートが見つかりません<br>Chart not found</td></tr><tr><td>ERR_CHARTWINDOW_NOT_FOUND</td><td>4212</td><td>チャートサブウインドウが見つかりません<br>Chart subwindow not found</td></tr><tr><td>ERR_CHARTINDICATOR_NOT_FOUND</td><td>4213</td><td>チャートインジケータが見つかりません<br>Chart indicator not found</td></tr><tr><td>ERR_SYMBOL_SELECT</td><td>4220</td><td>シンボル選択エラー<br>Symbol select error</td></tr><tr><td>ERR_NOTIFICATION_ERROR</td><td>4250</td><td>通知エラー<br>Notification error</td></tr><tr><td>ERR_NOTIFICATION_PARAMETER</td><td>4251</td><td>通知パラメータエラー<br>Notification parameter error</td></tr><tr><td>ERR_NOTIFICATION_SETTINGS</td><td>4252</td><td>通知無効<br>Notifications disabled</td></tr><tr><td>ERR_NOTIFICATION_TOO_FREQUENT</td><td>4253</td><td>通知を頻繁に送り過ぎ<br>Notification send too frequent</td></tr><tr><td>ERR_FTP_NOSERVER</td><td>4260</td><td>FTPサーバーが指定されていません<br>FTP server is not specified</td></tr><tr><td>ERR_FTP_NOLOGIN</td><td>4261</td><td>FTPログインが指定されていません<br>FTP login is not specified</td></tr><tr><td>ERR_FTP_CONNECT_FAILED</td><td>4262</td><td>FTP接続に失敗しました<br>FTP connection failed</td></tr><tr><td>ERR_FTP_CLOSED</td><td>4263</td><td>FTP接続が閉じられました<br>FTP connection closed</td></tr><tr><td>ERR_FTP_CHANGEDIR</td><td>4264</td><td>サーバー上でFTPパスが見つかりません<br>FTP path not found on server</td></tr><tr><td>ERR_FTP_FILE_ERROR</td><td>4265</td><td>FTPサーバーで送信するディレクトリ(MQL4\Files)にファイルがありません<br>File not found in the MQL4\Files directory to send on FTP server</td></tr><tr><td>ERR_FTP_ERROR</td><td>4266</td><td>FTPデータ送信中のエラー<br>Common error during FTP data transmission</td></tr><tr><td>ERR_FILE_TOO_MANY_OPENED</td><td>5001</td><td>ファイルを開き過ぎ<br>Too many opened files</td></tr><tr><td>ERR_FILE_WRONG_FILENAME</td><td>5002</td><td>不正なファイル名<br>Wrong file name</td></tr><tr><td>ERR_FILE_TOO_LONG_FILENAME</td><td>5003</td><td>ファイル名が長すぎます<br>Too long file name</td></tr><tr><td>ERR_FILE_CANNOT_OPEN</td><td>5004</td><td>ファイルを開けません<br>Cannot open file</td></tr><tr><td>ERR_FILE_BUFFER_ALLOCATION_ERROR</td><td>5005</td><td>テキストファイルのバッファ割り当てエラー<br>Text file buffer allocation error</td></tr><tr><td>ERR_FILE_CANNOT_DELETE</td><td>5006</td><td>ファイルを削除できません<br>Cannot delete file</td></tr><tr><td>ERR_FILE_INVALID_HANDLE</td><td>5007</td><td>無効なファイルハンドル(ファイルがオープン・クローズされていない)<br>Invalid file handle (file closed or was not opened)</td></tr><tr><td>ERR_FILE_WRONG_HANDLE</td><td>5008</td><td>不正なファイルハンドル(ハンドルインデックスがハンドルテーブル外)<br>Wrong file handle (handle index is out of handle table)</td></tr><tr><td>ERR_FILE_NOT_TOWRITE</td><td>5009</td><td><a href="https://mql-programing.com/file_constant/" title="【MQL4定数】ファイル定数（FILE_○○）">FILE_WRITE</a>フラグ付きでオープンする必要があります<br>File must be opened with FILE_WRITE flag</td></tr><tr><td>ERR_FILE_NOT_TOREAD</td><td>5010</td><td><a href="https://mql-programing.com/file_constant/">FILE_READ</a>フラグ付きでオープンする必要があります<br>File must be opened with FILE_READ flag</td></tr><tr><td>ERR_FILE_NOT_BIN</td><td>5011</td><td><a href="https://mql-programing.com/file_constant/">FILE_BIN</a>フラグ付きでオープンする必要があります<br>File must be opened with FILE_BIN flag</td></tr><tr><td>ERR_FILE_NOT_TXT</td><td>5012</td><td><a href="https://mql-programing.com/file_constant/">FILE_TXT</a>フラグ付きでオープンする必要があります<br>File must be opened with FILE_TXT flag</td></tr><tr><td>ERR_FILE_NOT_TXTORCSV</td><td>5013</td><td><a href="https://mql-programing.com/file_constant/">FILE_TXT</a>又は<a href="https://mql-programing.com/file_constant/">FILE_CSV</a>フラグ付きでオープンする必要があります<br>File must be opened with FILE_TXT or FILE_CSV flag</td></tr><tr><td>ERR_FILE_NOT_CSV</td><td>5014</td><td><a href="https://mql-programing.com/file_constant/">FILE_CSV</a>フラグ付きでオープンする必要があります<br>File must be opened with FILE_CSV flag</td></tr><tr><td>ERR_FILE_READ_ERROR</td><td>5015</td><td>ファイル読み込みエラー<br>File read error</td></tr><tr><td>ERR_FILE_WRITE_ERROR</td><td>5016</td><td>ファイル書き込みエラー<br>File write error</td></tr><tr><td>ERR_FILE_BIN_STRINGSIZE</td><td>5017</td><td>バイナリファイルの為に文字列サイズを指定する必要があります<br>String size must be specified for binary file</td></tr><tr><td>ERR_FILE_INCOMPATIBLE</td><td>5018</td><td>互換性の無いファイル(.txt:文字列ファイル, .bin：他ファイル)<br>Incompatible file (for string arrays-TXT, for others-BIN)</td></tr><tr><td>ERR_FILE_IS_DIRECTORY</td><td>5019</td><td>ファイルではありません。ディレクトリです。<br>File is directory not file</td></tr><tr><td>ERR_FILE_NOT_EXIST</td><td>5020</td><td>ファイルが存在しません<br>File does not exist</td></tr><tr><td>ERR_FILE_CANNOT_REWRITE</td><td>5021</td><td>ファイルを書き換える事は出来ません<br>File cannot be rewritten</td></tr><tr><td>ERR_FILE_WRONG_DIRECTORYNAME</td><td>5022</td><td>不正なディレクトリ名<br>Wrong directory name</td></tr><tr><td>ERR_FILE_DIRECTORY_NOT_EXIST</td><td>5023</td><td>ディレクトリが存在しません<br>Directory does not exist</td></tr><tr><td>ERR_FILE_NOT_DIRECTORY</td><td>5024</td><td>指定されたファイルはディレクトリではありません<br>Specified file is not directory</td></tr><tr><td>ERR_FILE_CANNOT_DELETE_DIRECTORY</td><td>5025</td><td>ディレクトリを削除する事は出来ません<br>Cannot delete directory</td></tr><tr><td>ERR_FILE_CANNOT_CLEAN_DIRECTORY</td><td>5026</td><td>ディレクトリ内のデータを削除する事は出来ません<br>Cannot clean directory</td></tr><tr><td>ERR_FILE_ARRAYRESIZE_ERROR</td><td>5027</td><td>配列サイズ変更エラー<br>Array resize error</td></tr><tr><td>ERR_FILE_STRINGRESIZE_ERROR</td><td>5028</td><td>文字列サイズ変更エラー<br>String resize error</td></tr><tr><td>ERR_FILE_STRUCT_WITH_OBJECTS</td><td>5029</td><td>構造体に文字列または動的配列が含まれています<br>Structure contains strings or dynamic arrays</td></tr><tr><td>ERR_WEBREQUEST_INVALID_ADDRESS</td><td>5200</td><td>無効なURL<br>Invalid URL</td></tr><tr><td>ERR_WEBREQUEST_CONNECT_FAILED</td><td>5201</td><td>指定されたURLへの接続に失敗しました<br>Failed to connect to specified URL</td></tr><tr><td>ERR_WEBREQUEST_TIMEOUT</td><td>5202</td><td>タイムアウト<br>Timeout exceeded</td></tr><tr><td>ERR_WEBREQUEST_REQUEST_FAILED</td><td>5203</td><td>HTTPリクエスト失敗<br>HTTP request failed</td></tr><tr><td>ERR_USER_ERROR_FIRST</td><td>65536</td><td>ユーザー定義エラーは、このコードから始まります<br>User defined errors start with this code</td></tr></tbody></table></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">エラーコード定数​（ERR_○○）の使い方</span></h2>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">エラーが起こったとき、システムが自動的に_LastError変数に、適切なエラーコード定数を格納します。</span></strong></p>



<p class="wp-block-paragraph">_LastError変数の値を取得するために、<strong>GetLastError関数</strong>を使います。</p>



<p class="wp-block-paragraph">GetLastError関数を使うことで、エラーコードの番号を知ることができます。</p>



<p class="wp-block-paragraph">エラーコードの番号を知ることができれば、エラーの内容を<strong>ErrorDescription関数</strong>を使って表示させることができるので、デバッグするときにとても役立ちます。</p>



<p class="wp-block-paragraph">例えば、以下のように使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>#property strict

//ライブラリをインクルード
#include &lt;stdlib.mqh&gt;

//+------------------------------------------------------------------+
//| スクリプトスタート
//+------------------------------------------------------------------+
void OnStart()
{
    int ea_ticket_res;

    // エラーになるようにLot:0で発注
    ea_ticket_res = OrderSend(  // オーダー送信
        Symbol(),               // 通貨ペア
        OP_BUY,                 // オーダータイプ[OP_BUY / OP_SELL]
        0.00000,                // ロット[0.01単位]
        Ask,                    // オーダープライスレート
        20,                     // スリップ上限    (int)[分解能 0.1pips]
        0,                      // ストップレート
        0,                      // リミットレート
        &quot;エラーテスト&quot;,          // オーダーコメント
        999,                    // マジックナンバー(管理用)
        0,                      // オーダーリミット時間
        clrRed                  // オーダーアイコンカラー
    );

    //オーダーエラー
    if ( ea_ticket_res == -1 ) { 

        int error_code;
        string error_detail;

        // エラーコード取得
        error_code = GetLastError(); 

        // エラー内容取得
        error_detail = ErrorDescription(error_code);

        if ( error_code != ERR_NO_ERROR ) {
            printf( &quot;エラーコード:%d 内容:%s&quot; , error_code , error_detail);
        }
    }
}</code></pre></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">上記のプログラムを実行することで、以下のような結果を得ることができます。</p>



<p class="wp-block-paragraph">「エラーコード: 4051 詳細：invalid function parameter value」</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc4">プログラム例</span></h2>



<p class="wp-block-paragraph">以下は、エラーコード定数を活用して、注文エラー発生時にエラー内容をログに出力するEAのサンプルプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>#property strict

//ライブラリをインクルード
#include &lt;stdlib.mqh&gt;

//+------------------------------------------------------------------+
//| Expert initialization function                                     |
//+------------------------------------------------------------------+
int OnInit()
{
    Print(&quot;EA初期化完了&quot;);
    return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| Expert deinitialization function                                   |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
    Print(&quot;EA終了&quot;);
}

//+------------------------------------------------------------------+
//| Expert tick function                                               |
//+------------------------------------------------------------------+
void OnTick()
{
    static bool ordered = false;

    // 一度だけ注文を試みる
    if ( !ordered ) {
        ordered = true;

        int ticket;

        // わざとロット数を0にしてエラーを発生させる
        ticket = OrderSend(
            Symbol(),           // 通貨ペア
            OP_BUY,             // 買い注文
            0.00000,            // ロット数（0でエラー発生）
            Ask,                // 現在のAsk価格
            20,                 // スリッページ
            0,                  // ストップロス
            0,                  // テイクプロフィット
            &quot;エラーテスト&quot;,      // コメント
            12345,              // マジックナンバー
            0,                  // 有効期限
            clrBlue             // 矢印の色
        );

        // エラー処理
        if ( ticket == -1 ) {
            int err = GetLastError();
            string desc = ErrorDescription(err);

            // エラーコードと内容をログに出力
            Print(&quot;注文失敗 - エラーコード: &quot;, err, &quot; 内容: &quot;, desc);

            // エラーの種類に応じた処理
            if ( err == ERR_INVALID_TRADE_VOLUME ) {
                Print(&quot;ロット数が不正です。ロット数を確認してください。&quot;);
            }
            else if ( err == ERR_NOT_ENOUGH_MONEY ) {
                Print(&quot;証拠金が不足しています。&quot;);
            }
            else if ( err == ERR_TRADE_NOT_ALLOWED ) {
                Print(&quot;自動売買が許可されていません。設定を確認してください。&quot;);
            }
            else if ( err == ERR_INVALID_STOPS ) {
                Print(&quot;ストップロスまたはテイクプロフィットの値が不正です。&quot;);
            }
            else if ( err == ERR_SERVER_BUSY || err == ERR_BROKER_BUSY ) {
                Print(&quot;サーバーがビジー状態です。後でリトライしてください。&quot;);
            }
            else {
                Print(&quot;その他のエラーが発生しました。&quot;);
            }
        }
        else {
            Print(&quot;注文成功 - チケット番号: &quot;, ticket);
        }
    }
}</code></pre></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">このサンプルプログラムでは、わざとロット数を0にして注文エラーを発生させ、<strong>GetLastError関数</strong>でエラーコードを取得し、<strong>ErrorDescription関数</strong>でエラーの詳細を表示しています。さらに、エラーコード定数を使って条件分岐を行い、エラーの種類に応じたメッセージを出力しています。</p>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



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



<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/enum/" 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/2021/09/enum.jpg?fit=1200%2C675&#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">目次 列挙型とは？列挙型と配列の違い列挙型と配列のデータの取り出し方法の違い列挙型と配列のデータの取り出し方法のまとめ列挙型の構造と使い方列挙型の構造列挙型の使い方列挙型はどこで使われているのか列挙型のプログラム例まとめ</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/1399/enum/" 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/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://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2021/09/make_autotrade_by_myself.jpg?fit=1200%2C675&#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">【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり</div><div class="blogcard-snippet external-blogcard-snippet">目次 はじめにFX自動売買とはFX自動売買を作るための準備FX自動売買の作り方口座凍結の対策をするプログラムテンプレートを作る決済ロジックをプログラミングするプログラムテンプレートを作るエントリーロジックをプログラミング</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/2839/error_code_constant/">【MQL4定数】エラーコード定数​（ERR_○○）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】オブジェクトのポインタ定数（ENUM_POINTER_TYPE）</title>
		<link>https://mql-programing.com/archives/2832/enum_pointer_type/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 08 May 2022 02:02:51 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[ENUM_POINTER_TYPE]]></category>
		<category><![CDATA[CheckPointer]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=2832</guid>

					<description><![CDATA[<p>オブジェクトのポインタ定数（ENUM_POINTER_TYPE） オブジェクトのポインタ定数（ENUM_POINTER_TYPE）は、オブジェクトのポインタの種類を確認するための定数です。 例えば、オブジェクトがどのよう [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/2832/enum_pointer_type/">【MQL4定数】オブジェクトのポインタ定数（ENUM_POINTER_TYPE）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">オブジェクトのポインタ定数（ENUM_POINTER_TYPE）</span></h2>



<p class="wp-block-paragraph">オブジェクトのポインタ定数（ENUM_POINTER_TYPE）は、<strong><span class="marker-under-red">オブジェクトのポインタの種類を確認するための定数です。</span></strong></p>



<p class="wp-block-paragraph">例えば、オブジェクトがどのように作成されたのかを確認したいときに使われます。</p>



<div style="height:79px" aria-hidden="true" class="wp-block-spacer"></div>



<p class="wp-block-paragraph">オブジェクトのポインタ定数は、以下の関数の戻り値として使います。</p>



<ul class="wp-block-list"><li><strong>CheckPointer関数：オブジェクトのポインタの種類を確認する関数</strong></li></ul>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h3 class="wp-block-heading"><span id="toc2">オブジェクトのポインタ定数（ENUM_POINTER_TYPE）</span></h3>



<figure class="wp-block-table alignfull is-style-stripes"><table><tbody><tr><td><strong>定数</strong></td><td><strong>説明</strong></td></tr><tr><td>POINTER_INVALID</td><td>不正なポインタ</td></tr><tr><td>POINTER_DYNAMIC</td><td>new演算子で作成されたオブジェクトポインタ</td></tr><tr><td>POINTER_AUTOMATIC</td><td>自動的に作成されたオブジェクトポインタ</td></tr></tbody></table></figure>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc3">オブジェクトのポインタ定数（ENUM_POINTER_TYPE）の使い方</span></h2>



<p class="wp-block-paragraph">主に、<strong>CheckPointer関数の戻り値</strong>として使用されます。</p>



<p class="wp-block-paragraph">例えば、以下のように使用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//適当なクラスを作成
class CItem{

};

//+------------------------------------------------------------------+
//| 初期化                         
//|------------------------------------------------------------------|
void OnInit(){
    //変数を宣言
    CItem*               temp_class;
    ENUM_POINTER_TYPE temp_ret;

    //オブジェクトを作成
    temp_class = new CItem;
    temp_ret   = CheckPointer(temp_class);

    //表示して確認
    if( temp_ret == POINTER_DYNAMIC) {
        Print( "new演算子で作成されたオブジェクト。","ポインタ：",temp_class , " チェック結果:",temp_ret );
    } else {
        Print( "他要因で作成されたオブジェクト。"   ,"ポインタ：",temp_class , " チェック結果:",temp_ret );
    }
}</code></pre></div>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc4">プログラム例</span></h2>



<p class="wp-block-paragraph">以下は、オブジェクトのポインタ定数（ENUM_POINTER_TYPE）を使って、new演算子で作成したオブジェクトと自動的に作成したオブジェクトのポインタの種類をそれぞれ確認するサンプルプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//適当なクラスを作成
class CItem{
public:
    int value;
    CItem(){ value = 0; }
};

//+------------------------------------------------------------------+
//| スクリプト開始関数                         
//|------------------------------------------------------------------|
void OnStart(){

    //--- new演算子で作成（POINTER_DYNAMIC）
    CItem* dynamicObj = new CItem;
    ENUM_POINTER_TYPE dynamicType = CheckPointer(dynamicObj);

    if(dynamicType == POINTER_DYNAMIC){
        Print("dynamicObj は new演算子で作成されたオブジェクトです。 種類：", EnumToString(dynamicType));
    } else if(dynamicType == POINTER_AUTOMATIC){
        Print("dynamicObj は自動的に作成されたオブジェクトです。 種類：", EnumToString(dynamicType));
    } else {
        Print("dynamicObj は不正なポインタです。 種類：", EnumToString(dynamicType));
    }

    //--- 自動的に作成（POINTER_AUTOMATIC）
    CItem autoObj;
    ENUM_POINTER_TYPE autoType = CheckPointer(GetPointer(autoObj));

    if(autoType == POINTER_DYNAMIC){
        Print("autoObj は new演算子で作成されたオブジェクトです。 種類：", EnumToString(autoType));
    } else if(autoType == POINTER_AUTOMATIC){
        Print("autoObj は自動的に作成されたオブジェクトです。 種類：", EnumToString(autoType));
    } else {
        Print("autoObj は不正なポインタです。 種類：", EnumToString(autoType));
    }

    //--- 不正なポインタの確認
    delete dynamicObj;
    ENUM_POINTER_TYPE deletedType = CheckPointer(dynamicObj);

    if(deletedType == POINTER_INVALID){
        Print("削除後の dynamicObj は不正なポインタです。 種類：", EnumToString(deletedType));
    }
}</code></pre></div>



<p class="wp-block-paragraph">このプログラムでは、3つのケースを確認しています。</p>



<ol class="wp-block-list"><li><strong>POINTER_DYNAMIC</strong>：new演算子で作成したオブジェクトのポインタを確認</li><li><strong>POINTER_AUTOMATIC</strong>：自動的に作成したオブジェクトのポインタをGetPointer関数で取得し確認</li><li><strong>POINTER_INVALID</strong>：delete演算子で削除済みのオブジェクトのポインタを確認</li></ol>



<div style="height:100px" aria-hidden="true" class="wp-block-spacer"></div>



<h2 class="wp-block-heading"><span id="toc5">【補足】オブジェクトのポインタ定数の列挙型（ENUM_POINTER_TYPE）</span></h2>



<p class="wp-block-paragraph">オブジェクトのポインタ定数は、ENUM_POINTER_TYPE​という<a href="https://mql-programing.com/enum/">列挙型</a>に含まれています。</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_POINTER_TYPE pointerType = POINTER_DYNAMIC;</code></pre></div>



<p class="wp-block-paragraph">上記のようにプログラムすると、pointerType変数に POINTER_DYNAMICの値が代入されます。</p>



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



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



<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/enum/" 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/2021/09/enum.jpg?fit=1200%2C675&#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">目次 列挙型とは？列挙型と配列の違い列挙型と配列のデータの取り出し方法の違い列挙型と配列のデータの取り出し方法のまとめ列挙型の構造と使い方列挙型の構造列挙型の使い方列挙型はどこで使われているのか列挙型のプログラム例まとめ</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/1399/enum/" 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/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://i0.wp.com/mql-programing.com/main29/wp-content/uploads/2021/09/make_autotrade_by_myself.jpg?fit=1200%2C675&#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">【MQL4プログラミング】自動売買の作り方！FXで使えるテンプレートあり</div><div class="blogcard-snippet external-blogcard-snippet">目次 はじめにFX自動売買とはFX自動売買を作るための準備FX自動売買の作り方口座凍結の対策をするプログラムテンプレートを作る決済ロジックをプログラミングするプログラムテンプレートを作るエントリーロジックをプログラミング</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/2832/enum_pointer_type/">【MQL4定数】オブジェクトのポインタ定数（ENUM_POINTER_TYPE）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
