<?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>ObjectSetInteger アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/objectsetinteger/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/objectsetinteger/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Tue, 31 Mar 2026 12:43:01 +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>ObjectSetInteger アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/objectsetinteger/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4定数】アローコードの定数（Arrow Code）</title>
		<link>https://mql-programing.com/archives/1895/arrow-code/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sat, 09 Oct 2021 05:13:21 +0000</pubDate>
				<category><![CDATA[定数]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<category><![CDATA[ObjectGetInteger]]></category>
		<category><![CDATA[Arrow Code]]></category>
		<category><![CDATA[MQL]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1895</guid>

					<description><![CDATA[<p>アローコードの定数（Arrow Code） アローコードの定数は、オブジェクトの矢印の種類を設定するときに使われます。 アローコードとは、チャート上に表示する矢印オブジェクトの種類を、定数にしたものです。 例えば、上矢印 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1895/arrow-code/">【MQL4定数】アローコードの定数（Arrow Code）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">アローコードの定数（Arrow Code）</span></h2>



<p class="wp-block-paragraph">アローコードの定数は、オブジェクトの矢印の種類を設定するときに使われます。</p>



<p class="wp-block-paragraph"><span class="marker-under-red"><strong>アローコードとは、チャート上に表示する矢印オブジェクトの種類を、定数にしたものです。</strong></span></p>



<p class="wp-block-paragraph">例えば、上矢印を表示したい場合は、<strong>SYMBOL_ARROWUP</strong>を使います。</p>



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



<p class="wp-block-paragraph">アローコードは、ObjectSetInteger関数、ObjectGetInteger関数で使われます。</p>



<p class="wp-block-paragraph">簡単に関数の説明です。</p>



<ul class="wp-block-list"><li><strong>ObjectSetInteger関数：オブジェクトの状態を設定する</strong></li><li><strong>ObjectGetInteger関数：オブジェクトの状態を取得する</strong></li></ul>



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



<p class="wp-block-paragraph">それぞれ、<strong><span class="marker-under-red">OBJPROP_ARROWCODEの設定値</span></strong>として、アローコードの定数が使われます。</p>



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



<h3 class="wp-block-heading"><span id="toc2">アローコードの定数（Arrow Code）</span></h3>



<figure class="wp-block-table alignfull is-style-stripes"><table><tbody><tr><td><b>定数</b></td><td><strong>説明</strong></td></tr><tr><td>SYMBOL_THUMBSUP</td><td>親指アップの矢印</td></tr><tr><td>SYMBOL_THUMBSDOWN</td><td>親指ダウンの矢印</td></tr><tr><td>SYMBOL_ARROWUP</td><td>上矢印</td></tr><tr><td>SYMBOL_ARROWDOWN</td><td>下矢印</td></tr><tr><td>SYMBOL_STOPSIGN</td><td>ストップサイン（バツ）</td></tr><tr><td>SYMBOL_CHECKSIGN</td><td>チェックサイン（チェック）</td></tr><tr><td>SYMBOL_LEFTPRICE</td><td>左側に価格を表示</td></tr><tr><td>SYMBOL_RIGHTPRICE</td><td>右側に価格を表示</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">アローコードの定数（Arrow Code）の使い方</span></h2>



<p class="wp-block-paragraph">ObjectSetInteger関数、ObjectGetInteger関数で使用されます。</p>



<p class="wp-block-paragraph"><strong><span class="marker-under-red">それぞれ、OBJPROP_ARROWCODEの設定値として、アローコードの定数が使われます。</span></strong></p>



<p class="wp-block-paragraph">上記の定数を入力しましょう。</p>



<p class="wp-block-paragraph">すると、その定数に対応した矢印の種類が設定されます。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //オブジェクトを上矢印に設定
   bool objectSetInteger = ObjectSetInteger(ChartID(), "自動売買を作ろう！", OBJPROP_ARROWCODE, SYMBOL_ARROWUP);

  //ObjectGetInteger関数
  //オブジェクトのアローコードを取得
   long objectGetInteger = ObjectGetInteger(ChartID(), "自動売買を作ろう！", OBJPROP_ARROWCODE);</code></pre></div>



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



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



<p class="wp-block-paragraph">以下は、チャート上に矢印オブジェクトを作成し、アローコードの定数を使って矢印の種類を設定するサンプルプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| スクリプト：アローコードのサンプルプログラム                      |
//+------------------------------------------------------------------+
void OnStart()
{
   //--- オブジェクト名
   string objName1 = "ArrowUp_Sample";
   string objName2 = "ArrowDown_Sample";
   string objName3 = "CheckSign_Sample";
   string objName4 = "StopSign_Sample";

   //--- 現在のチャートIDを取得
   long chartId = ChartID();

   //--- 現在の時間と価格を取得
   datetime currentTime = TimeCurrent();
   double currentPrice   = Ask;

   //--- 既存のオブジェクトがあれば削除
   ObjectDelete(chartId, objName1);
   ObjectDelete(chartId, objName2);
   ObjectDelete(chartId, objName3);
   ObjectDelete(chartId, objName4);

   //--- 上矢印オブジェクトを作成（SYMBOL_ARROWUP）
   ObjectCreate(chartId, objName1, OBJ_ARROW, 0, currentTime, currentPrice - 0.001);
   ObjectSetInteger(chartId, objName1, OBJPROP_ARROWCODE, SYMBOL_ARROWUP);
   ObjectSetInteger(chartId, objName1, OBJPROP_COLOR, clrBlue);
   ObjectSetInteger(chartId, objName1, OBJPROP_WIDTH, 2);
   Print("上矢印を作成しました。アローコード: ", ObjectGetInteger(chartId, objName1, OBJPROP_ARROWCODE));

   //--- 下矢印オブジェクトを作成（SYMBOL_ARROWDOWN）
   ObjectCreate(chartId, objName2, OBJ_ARROW, 0, currentTime, currentPrice + 0.001);
   ObjectSetInteger(chartId, objName2, OBJPROP_ARROWCODE, SYMBOL_ARROWDOWN);
   ObjectSetInteger(chartId, objName2, OBJPROP_COLOR, clrRed);
   ObjectSetInteger(chartId, objName2, OBJPROP_WIDTH, 2);
   Print("下矢印を作成しました。アローコード: ", ObjectGetInteger(chartId, objName2, OBJPROP_ARROWCODE));

   //--- チェックサインを作成（SYMBOL_CHECKSIGN）
   ObjectCreate(chartId, objName3, OBJ_ARROW, 0, currentTime - PeriodSeconds() * 3, currentPrice);
   ObjectSetInteger(chartId, objName3, OBJPROP_ARROWCODE, SYMBOL_CHECKSIGN);
   ObjectSetInteger(chartId, objName3, OBJPROP_COLOR, clrGreen);
   ObjectSetInteger(chartId, objName3, OBJPROP_WIDTH, 2);
   Print("チェックサインを作成しました。アローコード: ", ObjectGetInteger(chartId, objName3, OBJPROP_ARROWCODE));

   //--- ストップサインを作成（SYMBOL_STOPSIGN）
   ObjectCreate(chartId, objName4, OBJ_ARROW, 0, currentTime - PeriodSeconds() * 6, currentPrice);
   ObjectSetInteger(chartId, objName4, OBJPROP_ARROWCODE, SYMBOL_STOPSIGN);
   ObjectSetInteger(chartId, objName4, OBJPROP_COLOR, clrOrangeRed);
   ObjectSetInteger(chartId, objName4, OBJPROP_WIDTH, 2);
   Print("ストップサインを作成しました。アローコード: ", ObjectGetInteger(chartId, objName4, OBJPROP_ARROWCODE));

   //--- チャートを再描画
   ChartRedraw(chartId);

   Print("すべてのアローオブジェクトの作成が完了しました。");
}</code></pre></div>



<p class="wp-block-paragraph">このサンプルでは、<strong>SYMBOL_ARROWUP</strong>（上矢印）、<strong>SYMBOL_ARROWDOWN</strong>（下矢印）、<strong>SYMBOL_CHECKSIGN</strong>（チェックサイン）、<strong>SYMBOL_STOPSIGN</strong>（ストップサイン）の4種類のアローコードを使用しています。</p>



<p class="wp-block-paragraph">ObjectCreate関数でOBJ_ARROW型のオブジェクトを作成した後、<strong>ObjectSetInteger関数</strong>の<strong>OBJPROP_ARROWCODE</strong>にアローコードの定数を設定することで、矢印の種類を変更できます。</p>



<p class="wp-block-paragraph">また、<strong>ObjectGetInteger関数</strong>で設定済みのアローコードを取得し、Print関数でログに出力しています。</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/1895/arrow-code/">【MQL4定数】アローコードの定数（Arrow Code）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】ギャンラインのトレンド方向の定数（ENUM_GANN_DIRECTION​）</title>
		<link>https://mql-programing.com/archives/1852/enum_gann_direction/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 06 Oct 2021 06:09:36 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<category><![CDATA[ENUM_GANN_DIRECTION]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1852</guid>

					<description><![CDATA[<p>ギャンラインのトレンド方向の定数 ギャンラインのトレンド方向の定数は、ギャンラインのトレンド方向を設定するときに使われます。 トレンド方向とは、上昇トレンドか下降トレンドかのどちらかです。 設定するには、ObjectSe [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1852/enum_gann_direction/">【MQL4定数】ギャンラインのトレンド方向の定数（ENUM_GANN_DIRECTION​）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">ギャンラインのトレンド方向の定数</span></h2>



<p class="wp-block-paragraph">ギャンラインのトレンド方向の定数は、ギャンラインのトレンド方向を設定するときに使われます。</p>



<p class="wp-block-paragraph">トレンド方向とは、上昇トレンドか下降トレンドかのどちらかです。</p>



<p class="wp-block-paragraph">設定するには、ObjectSetInteger関数で設定します。</p>



<p class="wp-block-paragraph">簡単に関数の説明です。</p>



<ul class="wp-block-list"><li><strong>ObjectSetInteger関数：オブジェクトの状態を設定する</strong></li></ul>



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



<p class="wp-block-paragraph">それぞれ、<strong><span class="marker-under-red">OBJPROP_DIRECTIONの設定値</span></strong>として、ギャンラインのトレンド方向の定数が使われます。</p>



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



<h3 class="wp-block-heading"><span id="toc2">ギャンラインのトレンド方向の定数（ENUM_GANN_DIRECTION）</span></h3>



<figure class="wp-block-table alignfull is-style-stripes"><table><tbody><tr><td><b>定数</b></td><td><strong>説明</strong></td></tr><tr><td>GANN_UP_TREND</td><td>上昇トレンドに設定</td></tr><tr><td>GANN_DOWN_TREND</td><td>下降トレンドに設定</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">ギャンラインのトレンド方向の定数の使い方</span></h2>



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



<p class="wp-block-paragraph"><strong><span class="marker-under-red">それぞれ、OBJPROP_DIRECTIONの設定値として、ギャンラインのトレンドの方向を設定します。</span></strong></p>



<p class="wp-block-paragraph">上記の定数を入力しましょう。</p>



<p class="wp-block-paragraph">すると、その定数に対応したトレンド方向が設定されます。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //ギャンラインを上昇トレンドに設定する
   bool objectSetInteger = ObjectSetInteger(ChartID(), "自動売買を作ろう！", OBJPROP_DIRECTION, GANN_UP_TREND);</code></pre></div>



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



<p class="wp-block-paragraph">返り値はbool型です。</p>



<p class="wp-block-paragraph">成功すればtrue、失敗すればfalseが返ってきます。</p>



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



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



<p class="wp-block-paragraph">以下は、ギャンラインを作成し、トレンド方向を設定するサンプルプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| スクリプト：ギャンラインのトレンド方向設定サンプル
//+------------------------------------------------------------------+
void OnStart()
{
   string objName = "GannLine_Sample";

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

   //--- ギャンラインを作成する
   datetime time1 = iTime(Symbol(), Period(), 50);
   double   price1 = iLow(Symbol(), Period(), 50);
   datetime time2 = iTime(Symbol(), Period(), 0);

   bool created = ObjectCreate(0, objName, OBJ_GANNLINE, 0, time1, price1, time2, 0);

   if(!created)
   {
      Print("ギャンラインの作成に失敗しました。エラー: ", GetLastError());
      return;
   }

   //--- ギャンラインのスケールを設定
   ObjectSetDouble(0, objName, OBJPROP_SCALE, 1.0);

   //--- トレンド方向を上昇トレンドに設定する
   bool result = ObjectSetInteger(0, objName, OBJPROP_DIRECTION, GANN_UP_TREND);

   if(result)
      Print("トレンド方向を上昇トレンド（GANN_UP_TREND）に設定しました。");
   else
      Print("トレンド方向の設定に失敗しました。エラー: ", GetLastError());

   //--- 下降トレンドに変更する場合
   // ObjectSetInteger(0, objName, OBJPROP_DIRECTION, GANN_DOWN_TREND);

   //--- 線の色を設定
   ObjectSetInteger(0, objName, OBJPROP_COLOR, clrBlue);

   //--- チャートを再描画
   ChartRedraw(0);

   Print("ギャンラインのサンプルプログラムが完了しました。");
}</code></pre></div>



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



<p class="wp-block-paragraph">上記のサンプルでは、ObjectCreate関数でギャンラインを作成した後、ObjectSetInteger関数でOBJPROP_DIRECTIONにGANN_UP_TRENDを設定しています。</p>



<p class="wp-block-paragraph">GANN_DOWN_TRENDに変更すれば、下降トレンドのギャンラインになります。</p>



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



<h2 class="wp-block-heading"><span id="toc5">【補足】ギャンラインのトレンド方向の定数の列挙型（ENUM_GANN_DIRECTION）</span></h2>



<p class="wp-block-paragraph">ギャンラインのトレンド方向の定数は、ENUM_GANN_DIRECTIONという<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_GANN_DIRECTION gannDirection = GANN_UP_TREND;</code></pre></div>



<p class="wp-block-paragraph">上記のようにプログラムすると、gannDirection変数に GANN_UP_TRENDの数値が代入されます。</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/1852/enum_gann_direction/">【MQL4定数】ギャンラインのトレンド方向の定数（ENUM_GANN_DIRECTION​）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】オブジェクト可視の定数（時間足）</title>
		<link>https://mql-programing.com/archives/1842/object_visibility/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 06 Oct 2021 02:58:06 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[ObjectGetInteger]]></category>
		<category><![CDATA[object_visibility]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1842</guid>

					<description><![CDATA[<p>オブジェクト可視の定数（時間足） オブジェクト可視の定数は、オブジェクト可視を設定するときに使われます。 「5分足では表示する、1時間足では表示しない」というような設定をするための定数です。 主に、ObjectSetIn [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1842/object_visibility/">【MQL4定数】オブジェクト可視の定数（時間足）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">オブジェクト可視の定数（時間足）</span></h2>



<p class="wp-block-paragraph">オブジェクト可視の定数は、オブジェクト可視を設定するときに使われます。</p>



<p class="wp-block-paragraph">「5分足では表示する、1時間足では表示しない」というような設定をするための定数です。</p>



<p class="wp-block-paragraph">主に、ObjectSetInteger関数、ObjectGetInteger関数で使われます。</p>



<p class="wp-block-paragraph">簡単に関数の説明です。</p>



<ul class="wp-block-list"><li><strong>ObjectSetInteger関数：オブジェクトの状態を設定する</strong></li><li><strong>ObjectGetInteger関数：オブジェクトの状態を取得する</strong></li></ul>



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



<p class="wp-block-paragraph">それぞれ、<strong><span class="marker-under-red">OBJPROP_TIMEFRAMESの設定値</span></strong>として、オブジェクト可視の定数が使われます。</p>



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



<h3 class="wp-block-heading"><span id="toc2">オブジェクト可視の定数（時間足）</span></h3>



<figure class="wp-block-table alignfull is-style-stripes"><table><tbody><tr><td><b>定数</b></td><td><strong>説明</strong></td></tr><tr><td>EMPTY</td><td>全ての時間軸チャートに表示しない</td></tr><tr><td>OBJ_NO_PERIODS</td><td>全ての時間軸チャートに表示しない</td></tr><tr><td>OBJ_PERIOD_M1</td><td>1分チャートに表示する</td></tr><tr><td>OBJ_PERIOD_M5</td><td>5分チャートに表示する</td></tr><tr><td>OBJ_PERIOD_M15</td><td>15分チャートに表示する</td></tr><tr><td>OBJ_PERIOD_M30</td><td>30分チャートに表示する</td></tr><tr><td>OBJ_PERIOD_H1</td><td>1時間チャートに表示する</td></tr><tr><td>OBJ_PERIOD_H4</td><td>4時間チャートに表示する</td></tr><tr><td>OBJ_PERIOD_D1</td><td>1日チャートに表示する</td></tr><tr><td>OBJ_PERIOD_W1</td><td>1週間チャートに表示する</td></tr><tr><td>OBJ_PERIOD_MN1</td><td>1ヶ月チャートに表示する</td></tr><tr><td>OBJ_ALL_PERIODS</td><td>全てのチャートに表示する</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">オブジェクト可視の定数（時間足）の使い方</span></h2>



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



<p class="wp-block-paragraph"><strong><span class="marker-under-red">それぞれ、OBJPROP_TIMEFRAMESの設定値として、オブジェクト可視の定数が使われます。</span></strong></p>



<p class="wp-block-paragraph">上記の定数を入力しましょう。</p>



<p class="wp-block-paragraph">すると、その定数に対応した時間足が設定されます。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //オブジェクトの可視を全ての時間足に設定する
   bool objectSetInteger = ObjectSetInteger(ChartID(), "自動売買を作ろう！", OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);
 
  //ObjectGetInteger関数
  //オブジェクトの可視設定を取得する
  long objectGetInteger = ObjectGetInteger(ChartID(), "自動売買を作ろう！", OBJPROP_TIMEFRAMES);</code></pre></div>



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



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



<p class="wp-block-paragraph">以下は、水平線オブジェクトを作成し、オブジェクト可視の定数を使って特定の時間足にのみ表示する設定を行うプログラム例です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| スクリプトプログラム開始関数                                      |
//+------------------------------------------------------------------+
void OnStart()
{
   string objName = "VisibilityTestLine";
   double price   = Ask;

   //--- 水平線オブジェクトを作成する
   if(!ObjectCreate(0, objName, OBJ_HLINE, 0, 0, price))
   {
      Print("オブジェクト作成失敗: ", GetLastError());
      return;
   }

   //--- オブジェクトの色を設定する
   ObjectSetInteger(0, objName, OBJPROP_COLOR, clrRed);

   //--- オブジェクトの可視設定を行う
   //--- 1時間足と4時間足にのみ表示する（ビット演算で複数指定）
   ObjectSetInteger(0, objName, OBJPROP_TIMEFRAMES, OBJ_PERIOD_H1 | OBJ_PERIOD_H4);

   Print("水平線を作成しました（1時間足・4時間足のみ表示）");

   //--- 現在の可視設定を取得して確認する
   long visibility = ObjectGetInteger(0, objName, OBJPROP_TIMEFRAMES);
   Print("可視設定値: ", visibility);

   //--- 各時間足への表示状態を確認する
   if((visibility & OBJ_PERIOD_M1)  != 0) Print("1分足: 表示");
   if((visibility & OBJ_PERIOD_M5)  != 0) Print("5分足: 表示");
   if((visibility & OBJ_PERIOD_M15) != 0) Print("15分足: 表示");
   if((visibility & OBJ_PERIOD_M30) != 0) Print("30分足: 表示");
   if((visibility & OBJ_PERIOD_H1)  != 0) Print("1時間足: 表示");
   if((visibility & OBJ_PERIOD_H4)  != 0) Print("4時間足: 表示");
   if((visibility & OBJ_PERIOD_D1)  != 0) Print("日足: 表示");
   if((visibility & OBJ_PERIOD_W1)  != 0) Print("週足: 表示");
   if((visibility & OBJ_PERIOD_MN1) != 0) Print("月足: 表示");

   //--- 全ての時間足に表示を変更する
   ObjectSetInteger(0, objName, OBJPROP_TIMEFRAMES, OBJ_ALL_PERIODS);
   Print("全ての時間足に表示するよう変更しました");
}</code></pre></div>



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



<p class="wp-block-paragraph">上記のプログラムでは、まず水平線オブジェクトを作成し、OBJ_PERIOD_H1とOBJ_PERIOD_H4をビット演算子「|」で組み合わせて、1時間足と4時間足にのみ表示する設定を行っています。</p>



<p class="wp-block-paragraph">複数の時間足を指定したい場合は、このようにビット演算子「|」を使って定数を組み合わせます。</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/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/1842/object_visibility/">【MQL4定数】オブジェクト可視の定数（時間足）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】チャート基準座標の定数（ENUM_BASE_CORNER​）</title>
		<link>https://mql-programing.com/archives/1833/enum_base_corner/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 06 Oct 2021 01:53:40 +0000</pubDate>
				<category><![CDATA[定数]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<category><![CDATA[ENUM_BASE_CORNER]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1833</guid>

					<description><![CDATA[<p>チャート基準座標の定数 チャート基準座標の定数は、チャートの基準座標を設定するときに使われます。 チャート基準座標とは、オブジェクトを表示するときに基準となるチャート上の座標のことです。 主に、ObjectSetInte [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1833/enum_base_corner/">【MQL4定数】チャート基準座標の定数（ENUM_BASE_CORNER​）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">チャート基準座標の定数</span></h2>



<p class="wp-block-paragraph">チャート基準座標の定数は、チャートの基準座標を設定するときに使われます。</p>



<p class="wp-block-paragraph">チャート基準座標とは、オブジェクトを表示するときに基準となるチャート上の座標のことです。</p>



<p class="wp-block-paragraph">主に、ObjectSetInteger関数で使われます。</p>



<p class="wp-block-paragraph">簡単に関数の説明です。</p>



<ul class="wp-block-list"><li><strong>ObjectSetInteger関数：オブジェクトの状態を設定する</strong></li></ul>



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



<p class="wp-block-paragraph">それぞれ、<strong><span class="marker-under-red">OBJPROP_CORNERの設定値</span></strong>として、チャート基準座標の定数が使われます。</p>



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



<h3 class="wp-block-heading"><span id="toc2">チャート基準座標の定数（ENUM_BASE_CORNER​）</span></h3>



<figure class="wp-block-table alignfull is-style-stripes"><table><tbody><tr><td><b>定数</b></td><td><strong>説明</strong></td></tr><tr><td>CORNER_LEFT_UPPER</td><td>チャートの左上を基準座標に設定</td></tr><tr><td>CORNER_LEFT_LOWER</td><td>チャートの左下を基準座標に設定</td></tr><tr><td>CORNER_RIGHT_LOWER</td><td>チャートの右下を基準座標に設定</td></tr><tr><td>CORNER_RIGHT_UPPER</td><td>チャートの右上を基準座標に設定</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">チャート基準座標の定数の使い方</span></h2>



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



<p class="wp-block-paragraph"><strong><span class="marker-under-red">それぞれ、OBJPROP_CORNERの設定値として、チャート基準座標の定数が使われます。</span></strong></p>



<p class="wp-block-paragraph">上記の定数を入力しましょう。</p>



<p class="wp-block-paragraph">すると、その定数に対応した基準座標が設定されます。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //チャート上の左上を基準座標にする
   bool objectSetInteger = ObjectSetInteger(ChartID(), &quot;自動売買を作ろう！&quot;, OBJPROP_CORNER, CORNER_LEFT_UPPER);</code></pre></div>



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



<p class="wp-block-paragraph">返り値はbool型です。</p>



<p class="wp-block-paragraph">成功すればture、失敗すればfalseが返ってきます。</p>



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



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



<p class="wp-block-paragraph">ここからは、チャート基準座標の定数を使った実用的なプログラム例を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc5">例1：チャート右上にスプレッド表示ラベルを作成する</span></h3>



<p class="wp-block-paragraph">チャートの右上にリアルタイムのスプレッドを表示するインジケーターです。CORNER_RIGHT_UPPERを使って右上を基準座標に設定しています。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| スプレッド表示インジケーター                                        |
//+------------------------------------------------------------------+
#property indicator_chart_window

// ラベルオブジェクトの名前を定義
string labelName = "SpreadLabel";

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // ラベルオブジェクトを作成する
   ObjectCreate(0, labelName, OBJ_LABEL, 0, 0, 0);
   
   // チャートの右上を基準座標に設定する
   ObjectSetInteger(0, labelName, OBJPROP_CORNER, CORNER_RIGHT_UPPER);
   
   // 基準座標からのX方向の距離（ピクセル）
   ObjectSetInteger(0, labelName, OBJPROP_XDISTANCE, 20);
   
   // 基準座標からのY方向の距離（ピクセル）
   ObjectSetInteger(0, labelName, OBJPROP_YDISTANCE, 30);
   
   // フォントサイズを設定
   ObjectSetInteger(0, labelName, OBJPROP_FONTSIZE, 14);
   
   // 文字色を設定（白色）
   ObjectSetInteger(0, labelName, OBJPROP_COLOR, clrWhite);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれる関数                                         |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   // 現在のスプレッドを取得（ポイント単位）
   int currentSpread = (int)MarketInfo(Symbol(), MODE_SPREAD);
   
   // ラベルのテキストにスプレッド値を表示する
   ObjectSetString(0, labelName, OBJPROP_TEXT, "Spread: " + IntegerToString(currentSpread) + " pts");
   
   // チャートを再描画して表示を更新する
   ChartRedraw();
   
   return(rates_total);
}

//+------------------------------------------------------------------+
//| 終了時にオブジェクトを削除する                                      |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 作成したラベルオブジェクトを削除する
   ObjectDelete(0, labelName);
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc6">例2：4隅にラベルを配置して情報パネルを作成する</span></h3>



<p class="wp-block-paragraph">4つの基準座標定数をすべて使い、チャートの四隅にそれぞれ異なる情報を表示するEAの例です。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 四隅情報パネルEA                                                   |
//+------------------------------------------------------------------+

// 4つのラベル名を定義
string labelLU = "InfoPanel_LU"; // 左上
string labelRU = "InfoPanel_RU"; // 右上
string labelLB = "InfoPanel_LB"; // 左下
string labelRB = "InfoPanel_RB"; // 右下

//+------------------------------------------------------------------+
//| ラベルを作成する共通関数                                            |
//| corner : 基準座標の定数                                            |
//| name   : オブジェクト名                                            |
//| xDist  : X方向の距離（ピクセル）                                    |
//| yDist  : Y方向の距離（ピクセル）                                    |
//+------------------------------------------------------------------+
void CreateInfoLabel(ENUM_BASE_CORNER corner, string name, int xDist, int yDist)
{
   // ラベルオブジェクトを作成
   ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
   
   // 基準座標を設定（引数で渡された定数を使用）
   ObjectSetInteger(0, name, OBJPROP_CORNER, corner);
   
   // 基準座標からの距離を設定
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, xDist);
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yDist);
   
   // フォントサイズを12に設定
   ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 12);
   
   // 文字色をライムグリーンに設定
   ObjectSetInteger(0, name, OBJPROP_COLOR, clrLime);
}

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // 左上：通貨ペア名を表示
   CreateInfoLabel(CORNER_LEFT_UPPER, labelLU, 15, 25);
   
   // 右上：現在時刻を表示
   CreateInfoLabel(CORNER_RIGHT_UPPER, labelRU, 15, 25);
   
   // 左下：口座残高を表示
   CreateInfoLabel(CORNER_LEFT_LOWER, labelLB, 15, 25);
   
   // 右下：現在のポジション数を表示
   CreateInfoLabel(CORNER_RIGHT_LOWER, labelRB, 15, 25);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとの処理                                                 |
//+------------------------------------------------------------------+
void OnTick()
{
   // 左上に通貨ペア名を表示
   ObjectSetString(0, labelLU, OBJPROP_TEXT, "Symbol: " + Symbol());
   
   // 右上にサーバー時刻を表示
   ObjectSetString(0, labelRU, OBJPROP_TEXT, "Time: " + TimeToString(TimeCurrent(), TIME_MINUTES));
   
   // 左下に口座残高を表示
   ObjectSetString(0, labelLB, OBJPROP_TEXT, "Balance: " + DoubleToString(AccountBalance(), 2));
   
   // 右下に現在の保有ポジション数を表示
   ObjectSetString(0, labelRB, OBJPROP_TEXT, "Orders: " + IntegerToString(OrdersTotal()));
   
   // チャートを再描画して表示を更新する
   ChartRedraw();
}

//+------------------------------------------------------------------+
//| 終了時にすべてのラベルを削除する                                     |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete(0, labelLU);
   ObjectDelete(0, labelRU);
   ObjectDelete(0, labelLB);
   ObjectDelete(0, labelRB);
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc7">例3：左下に取引履歴サマリーを表示するインジケーター</span></h3>



<p class="wp-block-paragraph">チャートの左下（CORNER_LEFT_LOWER）を基準座標にして、当日の取引結果（勝敗数と損益）をリアルタイムで表示するインジケーターです。複数行のラベルを縦に並べて表示します。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 取引履歴サマリー表示インジケーター                                    |
//+------------------------------------------------------------------+
#property indicator_chart_window

// 3行分のラベル名を定義
string lblLine1 = "TradeSummary_Line1"; // 1行目：タイトル
string lblLine2 = "TradeSummary_Line2"; // 2行目：勝敗数
string lblLine3 = "TradeSummary_Line3"; // 3行目：損益合計

//+------------------------------------------------------------------+
//| 左下基準でラベルを作成する関数                                       |
//| name  : オブジェクト名                                             |
//| yDist : Y方向の距離（ピクセル）                                     |
//| col   : 文字色                                                    |
//| fsize : フォントサイズ                                             |
//+------------------------------------------------------------------+
void CreateBottomLeftLabel(string name, int yDist, color col, int fsize)
{
   // ラベルオブジェクトを作成
   ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
   
   // 左下を基準座標に設定する
   ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_LEFT_LOWER);
   
   // X方向の距離を15ピクセルに固定
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, 15);
   
   // Y方向の距離（行ごとに異なる値を設定）
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yDist);
   
   // フォントサイズを設定
   ObjectSetInteger(0, name, OBJPROP_FONTSIZE, fsize);
   
   // 文字色を設定
   ObjectSetInteger(0, name, OBJPROP_COLOR, col);
}

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // 1行目（最も下から遠い位置）：タイトル行（黄色・大きめ）
   CreateBottomLeftLabel(lblLine1, 75, clrYellow, 11);
   
   // 2行目：勝敗数の表示行（白色）
   CreateBottomLeftLabel(lblLine2, 55, clrWhite, 10);
   
   // 3行目（最も下に近い位置）：損益合計の表示行（白色）
   CreateBottomLeftLabel(lblLine3, 35, clrWhite, 10);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれる関数                                         |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   // 当日の勝ち数・負け数・損益を集計する変数
   int wins   = 0;
   int losses = 0;
   double totalProfit = 0.0;
   
   // 当日の0時0分を取得する（比較用）
   datetime todayStart = StringToTime(TimeToString(TimeCurrent(), TIME_DATE));
   
   // 決済済みの注文履歴をループして集計する
   int totalHistory = OrdersHistoryTotal();
   for(int i = 0; i < totalHistory; i++)
   {
      // 注文履歴を選択する
      if(!OrderSelect(i, SELECT_BY_POS, MODE_HISTORY))
         continue;
      
      // 決済時刻が当日より前の注文はスキップする
      if(OrderCloseTime() < todayStart)
         continue;
      
      // 売買注文のみ対象（残高操作などは除外）
      if(OrderType() != OP_BUY &#038;&#038; OrderType() != OP_SELL)
         continue;
      
      // 損益を取得して集計する
      double profit = OrderProfit() + OrderSwap() + OrderCommission();
      totalProfit += profit;
      
      // 利益がプラスなら勝ち、マイナスなら負けとしてカウント
      if(profit >= 0)
         wins++;
      else
         losses++;
   }
   
   // 1行目：タイトルを設定
   ObjectSetString(0, lblLine1, OBJPROP_TEXT, "== Today's Summary ==");
   
   // 2行目：勝敗数を設定
   ObjectSetString(0, lblLine2, OBJPROP_TEXT,
      "Win: " + IntegerToString(wins) + " / Loss: " + IntegerToString(losses));
   
   // 3行目：損益合計を設定（色を損益に応じて変更）
   ObjectSetString(0, lblLine3, OBJPROP_TEXT,
      "P/L: " + DoubleToString(totalProfit, 2) + " " + AccountCurrency());
   
   // 損益がプラスなら緑色、マイナスなら赤色に変更する
   if(totalProfit >= 0)
      ObjectSetInteger(0, lblLine3, OBJPROP_COLOR, clrLime);
   else
      ObjectSetInteger(0, lblLine3, OBJPROP_COLOR, clrRed);
   
   // チャートを再描画する
   ChartRedraw();
   
   return(rates_total);
}

//+------------------------------------------------------------------+
//| 終了時にすべてのラベルを削除する                                     |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete(0, lblLine1);
   ObjectDelete(0, lblLine2);
   ObjectDelete(0, lblLine3);
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc8">例4：右下にATRベースのリスク管理情報を表示するEA</span></h3>



<p class="wp-block-paragraph">チャートの右下（CORNER_RIGHT_LOWER）を基準座標にして、ATR（Average True Range）に基づくストップロス推奨値と推奨ロットサイズを表示するEAです。裁量トレードの補助ツールとして活用できます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| ATRリスク管理パネルEA                                              |
//+------------------------------------------------------------------+

// 外部パラメータ
extern int    ATR_Period   = 14;    // ATRの計算期間
extern double RiskPercent  = 1.0;   // 1トレードあたりのリスク（口座残高に対する%）
extern double SL_ATR_Multi = 1.5;   // ATRに対するストップロスの倍率

// ラベル名の定義
string lblATR   = "RiskPanel_ATR";    // ATR値の表示
string lblSL    = "RiskPanel_SL";     // ストップロス推奨値の表示
string lblLot   = "RiskPanel_Lot";    // 推奨ロットサイズの表示
string lblTitle = "RiskPanel_Title";  // タイトルの表示

//+------------------------------------------------------------------+
//| 右下基準でラベルを作成する関数                                       |
//| name  : オブジェクト名                                             |
//| yDist : Y方向の距離（ピクセル）                                     |
//+------------------------------------------------------------------+
void CreateRiskLabel(string name, int yDist)
{
   // ラベルオブジェクトを作成
   ObjectCreate(0, name, OBJ_LABEL, 0, 0, 0);
   
   // 右下を基準座標に設定する
   ObjectSetInteger(0, name, OBJPROP_CORNER, CORNER_RIGHT_LOWER);
   
   // X方向の距離を20ピクセルに設定
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, 20);
   
   // Y方向の距離を設定（行ごとに変える）
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, yDist);
   
   // フォントサイズを10に設定
   ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 10);
   
   // 文字色をアクア色に設定
   ObjectSetInteger(0, name, OBJPROP_COLOR, clrAqua);
}

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // タイトル行（一番下から遠い位置）
   CreateRiskLabel(lblTitle, 100);
   ObjectSetInteger(0, lblTitle, OBJPROP_COLOR, clrGold);
   ObjectSetInteger(0, lblTitle, OBJPROP_FONTSIZE, 11);
   
   // ATR値の表示行
   CreateRiskLabel(lblATR, 80);
   
   // ストップロス推奨値の表示行
   CreateRiskLabel(lblSL, 60);
   
   // 推奨ロットサイズの表示行
   CreateRiskLabel(lblLot, 40);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとの処理                                                 |
//+------------------------------------------------------------------+
void OnTick()
{
   // ATRインジケーターの値を取得する（現在の確定足）
   double atrValue = iATR(Symbol(), 0, ATR_Period, 1);
   
   // ATRにSL倍率を掛けてストップロス幅を計算する（価格単位）
   double slDistance = atrValue * SL_ATR_Multi;
   
   // ストップロス幅をポイント単位に変換する
   double slPoints = slDistance / Point;
   
   // 1ロットあたりのストップロス金額を計算する
   double tickValue   = MarketInfo(Symbol(), MODE_TICKVALUE);
   double tickSize    = MarketInfo(Symbol(), MODE_TICKSIZE);
   double lossPerLot  = (slDistance / tickSize) * tickValue;
   
   // 許容損失額を計算する（口座残高 × リスク%）
   double riskAmount = AccountBalance() * RiskPercent / 100.0;
   
   // 推奨ロットサイズを計算する（許容損失額 ÷ 1ロットあたり損失額）
   double recommendedLot = 0.0;
   if(lossPerLot > 0)
      recommendedLot = NormalizeDouble(riskAmount / lossPerLot, 2);
   
   // 最小ロットを下回る場合は最小ロットに調整する
   double minLot = MarketInfo(Symbol(), MODE_MINLOT);
   if(recommendedLot < minLot)
      recommendedLot = minLot;
   
   // タイトルを設定
   ObjectSetString(0, lblTitle, OBJPROP_TEXT,
      "== Risk Panel (ATR " + IntegerToString(ATR_Period) + ") ==");
   
   // ATR値を小数点以下5桁で表示する
   ObjectSetString(0, lblATR, OBJPROP_TEXT,
      "ATR: " + DoubleToString(atrValue, (int)MarketInfo(Symbol(), MODE_DIGITS)));
   
   // ストップロス推奨値を表示する（pips換算）
   // 3桁・5桁のブローカーに対応するため10で割る
   double slPips = slPoints;
   if(Digits == 3 || Digits == 5)
      slPips = slPoints / 10.0;
   ObjectSetString(0, lblSL, OBJPROP_TEXT,
      "SL: " + DoubleToString(slPips, 1) + " pips (x" + DoubleToString(SL_ATR_Multi, 1) + ")");
   
   // 推奨ロットサイズを表示する
   ObjectSetString(0, lblLot, OBJPROP_TEXT,
      "Lot: " + DoubleToString(recommendedLot, 2) + " (Risk " + DoubleToString(RiskPercent, 1) + "%)");
   
   // チャートを再描画する
   ChartRedraw();
}

//+------------------------------------------------------------------+
//| 終了時にすべてのラベルを削除する                                     |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete(0, lblTitle);
   ObjectDelete(0, lblATR);
   ObjectDelete(0, lblSL);
   ObjectDelete(0, lblLot);
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc9">例5：基準座標をボタンで切り替えるデモインジケーター</span></h3>



<p class="wp-block-paragraph">ボタンをクリックするたびに、ラベルの基準座標が左上→右上→右下→左下と順番に切り替わるデモインジケーターです。ENUM_BASE_CORNERの4つの定数がどのように動作するかを視覚的に確認できます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 基準座標切り替えデモインジケーター                                    |
//+------------------------------------------------------------------+
#property indicator_chart_window

// オブジェクト名の定義
string lblDemo   = "CornerDemo_Label";   // 移動するデモラベル
string btnSwitch = "CornerDemo_Button";  // 切り替えボタン

// 現在の基準座標のインデックス（0〜3）
int currentCornerIndex = 0;

// 4つの基準座標を配列で管理する
ENUM_BASE_CORNER corners[4] = {
   CORNER_LEFT_UPPER,   // インデックス0：左上
   CORNER_RIGHT_UPPER,  // インデックス1：右上
   CORNER_RIGHT_LOWER,  // インデックス2：右下
   CORNER_LEFT_LOWER    // インデックス3：左下
};

// 基準座標の名前（表示用）
string cornerNames[4] = {
   "LEFT_UPPER",
   "RIGHT_UPPER",
   "RIGHT_LOWER",
   "LEFT_LOWER"
};

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // デモ用ラベルを作成する
   ObjectCreate(0, lblDemo, OBJ_LABEL, 0, 0, 0);
   ObjectSetInteger(0, lblDemo, OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, lblDemo, OBJPROP_XDISTANCE, 30);
   ObjectSetInteger(0, lblDemo, OBJPROP_YDISTANCE, 60);
   ObjectSetInteger(0, lblDemo, OBJPROP_FONTSIZE, 16);
   ObjectSetInteger(0, lblDemo, OBJPROP_COLOR, clrYellow);
   ObjectSetString(0, lblDemo, OBJPROP_TEXT, "Corner: LEFT_UPPER");
   
   // 切り替えボタンを作成する（左上に固定配置）
   ObjectCreate(0, btnSwitch, OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, btnSwitch, OBJPROP_CORNER, CORNER_LEFT_UPPER);
   ObjectSetInteger(0, btnSwitch, OBJPROP_XDISTANCE, 30);
   ObjectSetInteger(0, btnSwitch, OBJPROP_YDISTANCE, 25);
   
   // ボタンのサイズを設定（幅150、高さ25ピクセル）
   ObjectSetInteger(0, btnSwitch, OBJPROP_XSIZE, 150);
   ObjectSetInteger(0, btnSwitch, OBJPROP_YSIZE, 25);
   
   // ボタンのテキストを設定
   ObjectSetString(0, btnSwitch, OBJPROP_TEXT, "Switch Corner");
   
   // ボタンのフォントサイズを設定
   ObjectSetInteger(0, btnSwitch, OBJPROP_FONTSIZE, 10);
   
   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれる関数（必須だが処理なし）                        |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   return(rates_total);
}

//+------------------------------------------------------------------+
//| チャートイベント処理関数                                            |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
{
   // ボタンクリックイベントを検出する
   if(id == CHARTEVENT_OBJECT_CLICK)
   {
      // クリックされたオブジェクトが切り替えボタンか確認する
      if(sparam == btnSwitch)
      {
         // インデックスを1つ進める（3の次は0に戻る）
         currentCornerIndex++;
         if(currentCornerIndex > 3)
            currentCornerIndex = 0;
         
         // デモラベルの基準座標を新しい値に変更する
         ObjectSetInteger(0, lblDemo, OBJPROP_CORNER, corners[currentCornerIndex]);
         
         // ラベルのテキストを現在の基準座標名に更新する
         ObjectSetString(0, lblDemo, OBJPROP_TEXT, "Corner: " + cornerNames[currentCornerIndex]);
         
         // ボタンの押下状態を解除する
         ObjectSetInteger(0, btnSwitch, OBJPROP_STATE, false);
         
         // チャートを再描画する
         ChartRedraw();
      }
   }
}

//+------------------------------------------------------------------+
//| 終了時にすべてのオブジェクトを削除する                                |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete(0, lblDemo);
   ObjectDelete(0, btnSwitch);
}</code></pre>


<p class="wp-block-paragraph">　</p>
<p>投稿 <a href="https://mql-programing.com/archives/1833/enum_base_corner/">【MQL4定数】チャート基準座標の定数（ENUM_BASE_CORNER​）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】矢印オブジェクトのアンカー定数（ENUM_ARROW_ANCHOR）</title>
		<link>https://mql-programing.com/archives/1825/enum_arrow_anchor/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 06 Oct 2021 01:11:19 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<category><![CDATA[ENUM_ARROW_ANCHOR]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1825</guid>

					<description><![CDATA[<p>矢印オブジェクトのアンカー定数 矢印オブジェクトのアンカー定数は、矢印オブジェクトのアンカーを設定するときに使われます。 矢印オブジェクトのアンカーとは、矢印オブジェクトを表示するときに基準となる座標のことです。 主に、 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1825/enum_arrow_anchor/">【MQL4定数】矢印オブジェクトのアンカー定数（ENUM_ARROW_ANCHOR）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">矢印オブジェクトのアンカー定数</span></h2>



<p class="wp-block-paragraph">矢印オブジェクトのアンカー定数は、矢印オブジェクトのアンカーを設定するときに使われます。</p>



<p class="wp-block-paragraph">矢印オブジェクトのアンカーとは、矢印オブジェクトを表示するときに基準となる座標のことです。</p>



<p class="wp-block-paragraph">主に、ObjectSetInteger関数で使われます。</p>



<p class="wp-block-paragraph">簡単に関数の説明です。</p>



<ul class="wp-block-list"><li><strong>ObjectSetInteger関数：オブジェクトの状態を設定する</strong></li></ul>



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



<p class="wp-block-paragraph">それぞれ、<strong><span class="marker-under-red">OBJPROP_ANCHORの設定値</span></strong>として、矢印オブジェクトのアンカー定数が使われます。</p>



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



<h3 class="wp-block-heading"><span id="toc2">矢印オブジェクトのアンカー定数（ENUM_ARROW_ANCHOR）</span></h3>



<figure class="wp-block-table alignfull is-style-stripes"><table><tbody><tr><td><b>定数</b></td><td><strong>説明</strong></td></tr><tr><td>ANCHOR_TOP</td><td>オブジェクトの上にアンカーを設定</td></tr><tr><td>ANCHOR_BOTTOM</td><td>オブジェクトの下にアンカーを設定</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">矢印オブジェクトのアンカー定数の使い方</span></h2>



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



<p class="wp-block-paragraph"><strong><span class="marker-under-red">それぞれ、OBJPROP_ANCHORの設定値として、矢印オブジェクトのアンカー定数が使われます。</span></strong></p>



<p class="wp-block-paragraph">上記の定数を入力しましょう。</p>



<p class="wp-block-paragraph">すると、その定数に対応したアンカーが設定されます。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //オブジェクトの上を基準座標にする
   bool objectSetInteger = ObjectSetInteger(ChartID(), &quot;自動売買を作ろう！&quot;, OBJPROP_ANCHOR, ANCHOR_TOP);</code></pre></div>



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



<p class="wp-block-paragraph">返り値はbool型です。</p>



<p class="wp-block-paragraph">成功すればture、失敗すればfalseが返ってきます。</p>



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



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



<p class="wp-block-paragraph">ここでは、矢印オブジェクトのアンカー定数を実際のインジケーターやEAで活用する例を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc5">例1：ローソク足の高値・安値に矢印を表示するインジケーター</span></h3>



<p class="wp-block-paragraph">直近のローソク足の高値に下向き矢印、安値に上向き矢印を表示する例です。ANCHOR_TOPとANCHOR_BOTTOMを使い分けることで、矢印がローソク足に重ならず見やすく配置されます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 高値・安値に矢印を表示するインジケーター                            |
//+------------------------------------------------------------------+
#property indicator_chart_window

//+------------------------------------------------------------------+
//| 矢印オブジェクトを作成する関数                                      |
//+------------------------------------------------------------------+
void CreateArrow(string name, datetime time, double price,
                 int arrowCode, color clr, ENUM_ARROW_ANCHOR anchor)
{
   // 既に同名のオブジェクトが存在する場合は削除
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

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

   // 矢印の種類を設定（例：234=下矢印、233=上矢印）
   ObjectSetInteger(0, name, OBJPROP_ARROWCODE, arrowCode);

   // 矢印の色を設定
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);

   // アンカーを設定（矢印の基準位置）
   // ANCHOR_BOTTOM：矢印の下側が座標に来る → 安値の下に矢印が表示される
   // ANCHOR_TOP：矢印の上側が座標に来る → 高値の上に矢印が表示される
   ObjectSetInteger(0, name, OBJPROP_ANCHOR, anchor);

   // 矢印のサイズを設定
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);
}

//+------------------------------------------------------------------+
//| OnCalculate - ティックごとに呼び出される                            |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   // 直近の確定足（1本前）の高値に下向き矢印を表示
   // ANCHOR_BOTTOMを使い、矢印の下端が高値に接するように配置
   CreateArrow("HighArrow", Time[1], High[1],
               234, clrRed, ANCHOR_BOTTOM);

   // 直近の確定足（1本前）の安値に上向き矢印を表示
   // ANCHOR_TOPを使い、矢印の上端が安値に接するように配置
   CreateArrow("LowArrow", Time[1], Low[1],
               233, clrDodgerBlue, ANCHOR_TOP);

   return(rates_total);
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc6">例2：移動平均線のゴールデンクロス・デッドクロスに矢印シグナルを表示</span></h3>



<p class="wp-block-paragraph">短期・長期移動平均線のクロスを検出し、買いシグナル（上矢印）・売りシグナル（下矢印）をチャートに表示する実用的な例です。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| MA クロスシグナル表示インジケーター                                  |
//+------------------------------------------------------------------+
#property indicator_chart_window

input int ShortMAPeriod = 5;   // 短期移動平均の期間
input int LongMAPeriod  = 25;  // 長期移動平均の期間

//+------------------------------------------------------------------+
//| シグナル矢印を作成する関数                                         |
//+------------------------------------------------------------------+
void CreateSignalArrow(string name, datetime time, double price,
                       bool isBuy)
{
   // 既存の同名オブジェクトを削除
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

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

   if(isBuy)
   {
      // 買いシグナル：上向き矢印（Wingdings 233）
      ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 233);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clrLime);
      // 安値の下に表示するため、矢印の上端を基準にする
      ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_TOP);
   }
   else
   {
      // 売りシグナル：下向き矢印（Wingdings 234）
      ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 234);
      ObjectSetInteger(0, name, OBJPROP_COLOR, clrRed);
      // 高値の上に表示するため、矢印の下端を基準にする
      ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_BOTTOM);
   }

   ObjectSetInteger(0, name, OBJPROP_WIDTH, 3);
}

//+------------------------------------------------------------------+
//| OnCalculate                                                       |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   // 計算に必要な最低バー数のチェック
   if(rates_total < LongMAPeriod + 2) return(0);

   int limit = rates_total - prev_calculated;
   if(limit > rates_total - LongMAPeriod - 2)
      limit = rates_total - LongMAPeriod - 2;

   for(int i = limit; i >= 1; i--)
   {
      // 現在のバーと1つ前のバーの移動平均値を取得
      double shortMA_curr = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
      double longMA_curr  = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i);
      double shortMA_prev = iMA(NULL, 0, ShortMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i + 1);
      double longMA_prev  = iMA(NULL, 0, LongMAPeriod, 0, MODE_SMA, PRICE_CLOSE, i + 1);

      // ゴールデンクロス検出（短期MAが長期MAを下から上に抜ける）
      if(shortMA_prev < longMA_prev &#038;&#038; shortMA_curr > longMA_curr)
      {
         string buyName = "BuySignal_" + IntegerToString(i);
         CreateSignalArrow(buyName, Time[i], Low[i], true);
      }

      // デッドクロス検出（短期MAが長期MAを上から下に抜ける）
      if(shortMA_prev > longMA_prev && shortMA_curr < longMA_curr)
      {
         string sellName = "SellSignal_" + IntegerToString(i);
         CreateSignalArrow(sellName, Time[i], High[i], false);
      }
   }

   return(rates_total);
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc7">例3：RSIの買われすぎ・売られすぎで矢印を表示するインジケーター</span></h3>



<p class="wp-block-paragraph">RSI（相対力指数）が買われすぎ水準（70以上）から下がったとき、または売られすぎ水準（30以下）から上がったときに矢印を表示する例です。アンカーの使い分けにより、矢印がローソク足から適切にオフセットされます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| RSI反転シグナル矢印インジケーター                                   |
//+------------------------------------------------------------------+
#property indicator_chart_window

input int    RSIPeriod      = 14;   // RSIの計算期間
input double OverboughtLevel = 70.0; // 買われすぎ水準
input double OversoldLevel   = 30.0; // 売られすぎ水準

//+------------------------------------------------------------------+
//| 矢印オブジェクトを作成する共通関数                                   |
//+------------------------------------------------------------------+
void DrawArrow(string name, datetime time, double price,
               int code, color clr, ENUM_ARROW_ANCHOR anchor)
{
   // 既存オブジェクトがあれば削除
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

   // 矢印オブジェクトを新規作成
   ObjectCreate(0, name, OBJ_ARROW, 0, time, price);
   ObjectSetInteger(0, name, OBJPROP_ARROWCODE, code);
   ObjectSetInteger(0, name, OBJPROP_COLOR, clr);

   // アンカー設定：矢印がローソク足に重ならないように調整
   ObjectSetInteger(0, name, OBJPROP_ANCHOR, anchor);
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);

   // 背面に表示されないよう、前面描画を有効にする
   ObjectSetInteger(0, name, OBJPROP_BACK, false);
}

//+------------------------------------------------------------------+
//| OnCalculate                                                       |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   // 最低限のバー数チェック
   if(rates_total < RSIPeriod + 2) return(0);

   // 処理範囲の決定（初回は全バー、2回目以降は新しいバーのみ）
   int limit = rates_total - prev_calculated;
   if(limit > rates_total - RSIPeriod - 2)
      limit = rates_total - RSIPeriod - 2;

   for(int i = limit; i >= 1; i--)
   {
      // 現在のバーと1つ前のバーのRSI値を取得
      double rsiCurr = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i);
      double rsiPrev = iRSI(NULL, 0, RSIPeriod, PRICE_CLOSE, i + 1);

      // 売られすぎ水準から上抜け → 買いシグナル（上向き矢印）
      if(rsiPrev <= OversoldLevel &#038;&#038; rsiCurr > OversoldLevel)
      {
         string name = "RSI_Buy_" + IntegerToString(i);
         // ANCHOR_TOP：矢印の上端を安値に合わせ、矢印本体は下に伸びる
         DrawArrow(name, Time[i], Low[i], 233, clrDodgerBlue, ANCHOR_TOP);
      }

      // 買われすぎ水準から下抜け → 売りシグナル（下向き矢印）
      if(rsiPrev >= OverboughtLevel && rsiCurr < OverboughtLevel)
      {
         string name = "RSI_Sell_" + IntegerToString(i);
         // ANCHOR_BOTTOM：矢印の下端を高値に合わせ、矢印本体は上に伸びる
         DrawArrow(name, Time[i], High[i], 234, clrOrangeRed, ANCHOR_BOTTOM);
      }
   }

   return(rates_total);
}

//+------------------------------------------------------------------+
//| インジケーター終了時に全矢印オブジェクトを削除                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // "RSI_"で始まるオブジェクトをすべて削除
   for(int i = ObjectsTotal(0) - 1; i >= 0; i--)
   {
      string objName = ObjectName(0, i);
      if(StringFind(objName, "RSI_") == 0)
         ObjectDelete(0, objName);
   }
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc8">例4：EAのエントリー・決済ポイントを矢印で記録するスクリプト</span></h3>



<p class="wp-block-paragraph">EAで実際に注文が約定したタイミングでチャート上に矢印を残す例です。エントリーと決済のポイントを視覚的に確認でき、トレード結果の振り返りに役立ちます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| トレード履歴矢印を表示するEAモジュール                               |
//+------------------------------------------------------------------+

// グローバル変数：矢印の通し番号
int g_arrowCount = 0;

//+------------------------------------------------------------------+
//| トレード矢印をチャートに描画する関数                                 |
//| type: 0=買いエントリー, 1=売りエントリー,                           |
//|       2=買い決済, 3=売り決済                                       |
//+------------------------------------------------------------------+
void DrawTradeArrow(int type, datetime time, double price)
{
   // 矢印名を一意にするため通し番号を付与
   g_arrowCount++;
   string name = "Trade_" + IntegerToString(g_arrowCount);

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

   switch(type)
   {
      case 0: // 買いエントリー：安値付近に上向き矢印
         ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 233);
         ObjectSetInteger(0, name, OBJPROP_COLOR, clrLime);
         // ANCHOR_TOP：矢印の上端が価格に接する → 矢印は下に伸びる
         ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_TOP);
         break;

      case 1: // 売りエントリー：高値付近に下向き矢印
         ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 234);
         ObjectSetInteger(0, name, OBJPROP_COLOR, clrRed);
         // ANCHOR_BOTTOM：矢印の下端が価格に接する → 矢印は上に伸びる
         ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_BOTTOM);
         break;

      case 2: // 買い決済：チェックマークで表示
         ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 252);
         ObjectSetInteger(0, name, OBJPROP_COLOR, clrGold);
         // ANCHOR_BOTTOM：マークの下端を価格に合わせる
         ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_BOTTOM);
         break;

      case 3: // 売り決済：チェックマークで表示
         ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 252);
         ObjectSetInteger(0, name, OBJPROP_COLOR, clrMagenta);
         // ANCHOR_TOP：マークの上端を価格に合わせる
         ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_TOP);
         break;
   }

   // 矢印サイズを大きめに設定して見やすくする
   ObjectSetInteger(0, name, OBJPROP_WIDTH, 3);

   // ツールチップに情報を表示
   string tooltip = "Price: " + DoubleToString(price, Digits);
   ObjectSetString(0, name, OBJPROP_TOOLTIP, tooltip);
}

//+------------------------------------------------------------------+
//| OnTick - EAのメインロジック例                                      |
//+------------------------------------------------------------------+
void OnTick()
{
   // ポジションがない場合のエントリー判定例
   if(OrdersTotal() == 0)
   {
      // 簡易的なエントリー条件（例：終値が始値より高ければ買い）
      if(Close[1] > Open[1])
      {
         int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3,
                                0, 0, "BuyEntry", 0, 0, clrBlue);
         if(ticket > 0)
         {
            // 買いエントリーの矢印をチャートに描画
            DrawTradeArrow(0, TimeCurrent(), Ask);
            Print("買いエントリー：矢印を描画しました");
         }
      }
   }
}

//+------------------------------------------------------------------+
//| EA終了時に全トレード矢印を削除                                      |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   for(int i = ObjectsTotal(0) - 1; i >= 0; i--)
   {
      string objName = ObjectName(0, i);
      if(StringFind(objName, "Trade_") == 0)
         ObjectDelete(0, objName);
   }
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc9">例5：ピンバー（上ヒゲ・下ヒゲ）を自動検出して矢印で強調表示</span></h3>



<p class="wp-block-paragraph">プライスアクションの基本パターンであるピンバー（長い上ヒゲや下ヒゲのローソク足）を自動検出し、該当バーに矢印を表示するインジケーターです。アンカー定数の切り替えによって、矢印がヒゲの先端から適切な方向に描画されます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| ピンバー検出インジケーター                                          |
//+------------------------------------------------------------------+
#property indicator_chart_window

input double PinBarRatio = 2.0;  // ヒゲと実体の比率しきい値

//+------------------------------------------------------------------+
//| OnCalculate                                                       |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
{
   if(rates_total < 3) return(0);

   int limit = rates_total - prev_calculated;
   if(limit > rates_total - 3)
      limit = rates_total - 3;

   for(int i = limit; i >= 1; i--)
   {
      // ローソク足の各部分のサイズを計算
      double bodySize  = MathAbs(Close[i] - Open[i]);        // 実体の大きさ
      double upperWick = High[i] - MathMax(Close[i], Open[i]); // 上ヒゲの長さ
      double lowerWick = MathMin(Close[i], Open[i]) - Low[i];  // 下ヒゲの長さ
      double totalRange = High[i] - Low[i];                   // ローソク足全体の長さ

      // 実体が極端に小さい場合はスキップ（ゼロ除算防止）
      if(bodySize < Point * 2 || totalRange < Point * 5)
         continue;

      // 上ヒゲピンバーの検出：上ヒゲが実体のPinBarRatio倍以上
      if(upperWick > bodySize * PinBarRatio && upperWick > lowerWick * 2.0)
      {
         string name = "PinBar_Bear_" + IntegerToString(i);
         if(ObjectFind(0, name) < 0)
         {
            ObjectCreate(0, name, OBJ_ARROW, 0, Time[i], High[i]);
            // 下向き矢印（売り圧力を示唆）
            ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 234);
            ObjectSetInteger(0, name, OBJPROP_COLOR, clrOrangeRed);
            // ANCHOR_BOTTOM：矢印の下端を高値に合わせる
            // → 矢印本体は高値の上に表示され、ヒゲの先を指す
            ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_BOTTOM);
            ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);
            ObjectSetString(0, name, OBJPROP_TOOLTIP,
                            "上ヒゲピンバー検出 (売り圧力)");
         }
      }

      // 下ヒゲピンバーの検出：下ヒゲが実体のPinBarRatio倍以上
      if(lowerWick > bodySize * PinBarRatio && lowerWick > upperWick * 2.0)
      {
         string name = "PinBar_Bull_" + IntegerToString(i);
         if(ObjectFind(0, name) < 0)
         {
            ObjectCreate(0, name, OBJ_ARROW, 0, Time[i], Low[i]);
            // 上向き矢印（買い圧力を示唆）
            ObjectSetInteger(0, name, OBJPROP_ARROWCODE, 233);
            ObjectSetInteger(0, name, OBJPROP_COLOR, clrDeepSkyBlue);
            // ANCHOR_TOP：矢印の上端を安値に合わせる
            // → 矢印本体は安値の下に表示され、ヒゲの先を指す
            ObjectSetInteger(0, name, OBJPROP_ANCHOR, ANCHOR_TOP);
            ObjectSetInteger(0, name, OBJPROP_WIDTH, 2);
            ObjectSetString(0, name, OBJPROP_TOOLTIP,
                            "下ヒゲピンバー検出 (買い圧力)");
         }
      }
   }

   return(rates_total);
}

//+------------------------------------------------------------------+
//| インジケーター終了時にピンバー矢印をすべて削除                       |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   for(int i = ObjectsTotal(0) - 1; i >= 0; i--)
   {
      string objName = ObjectName(0, i);
      if(StringFind(objName, "PinBar_") == 0)
         ObjectDelete(0, objName);
   }
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc10">例6：アンカー定数の違いを視覚的に比較するスクリプト</span></h3>



<p class="wp-block-paragraph">ANCHOR_TOPとANCHOR_BOTTOMの違いを一目で理解するためのスクリプトです。同じ座標に対して異なるアンカーを設定した矢印を並べて表示し、基準位置がどのように変わるかを確認できます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| アンカー定数の比較スクリプト                                        |
//| 同じ価格座標に異なるアンカーの矢印を表示して違いを確認                |
//+------------------------------------------------------------------+
#property script_show_inputs

void OnStart()
{
   // 基準となる時間と価格を取得（直近の確定足の終値を使用）
   datetime baseTime  = Time[1];
   double   basePrice = Close[1];

   // --- ANCHOR_TOP の矢印 ---
   string nameTop = "Compare_AnchorTop";
   if(ObjectFind(0, nameTop) >= 0)
      ObjectDelete(0, nameTop);

   ObjectCreate(0, nameTop, OBJ_ARROW, 0, baseTime, basePrice);
   ObjectSetInteger(0, nameTop, OBJPROP_ARROWCODE, 233);  // 上向き矢印
   ObjectSetInteger(0, nameTop, OBJPROP_COLOR, clrDodgerBlue);
   // ANCHOR_TOP：矢印の上端が基準座標に来る
   ObjectSetInteger(0, nameTop, OBJPROP_ANCHOR, ANCHOR_TOP);
   ObjectSetInteger(0, nameTop, OBJPROP_WIDTH, 3);
   ObjectSetString(0, nameTop, OBJPROP_TOOLTIP, "ANCHOR_TOP：上端が基準座標");

   // --- ANCHOR_BOTTOM の矢印（1本右のバーに表示して比較しやすくする） ---
   string nameBottom = "Compare_AnchorBottom";
   if(ObjectFind(0, nameBottom) >= 0)
      ObjectDelete(0, nameBottom);

   ObjectCreate(0, nameBottom, OBJ_ARROW, 0, Time[2], basePrice);
   ObjectSetInteger(0, nameBottom, OBJPROP_ARROWCODE, 233);  // 同じ上向き矢印
   ObjectSetInteger(0, nameBottom, OBJPROP_COLOR, clrOrangeRed);
   // ANCHOR_BOTTOM：矢印の下端が基準座標に来る
   ObjectSetInteger(0, nameBottom, OBJPROP_ANCHOR, ANCHOR_BOTTOM);
   ObjectSetInteger(0, nameBottom, OBJPROP_WIDTH, 3);
   ObjectSetString(0, nameBottom, OBJPROP_TOOLTIP, "ANCHOR_BOTTOM：下端が基準座標");

   // チャートを再描画
   ChartRedraw(0);

   Print("アンカー比較矢印を描画しました。青=ANCHOR_TOP、赤=ANCHOR_BOTTOM");
   Print("同じ価格座標でも、アンカーの違いにより矢印の表示位置が変わります。");
}</code></pre>


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



<p class="wp-block-paragraph">このスクリプトを実行すると、同じ価格に対してANCHOR_TOP（青）とANCHOR_BOTTOM（赤）の矢印が並んで表示されます。ANCHOR_TOPでは矢印の上端が基準座標に来るため矢印は下に伸び、ANCHOR_BOTTOMでは矢印の下端が基準座標に来るため矢印は上に伸びることが視覚的に確認できます。</p>
<p>投稿 <a href="https://mql-programing.com/archives/1825/enum_arrow_anchor/">【MQL4定数】矢印オブジェクトのアンカー定数（ENUM_ARROW_ANCHOR）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】アンカーポイントの定数（ENUM_ANCHOR_POINT）</title>
		<link>https://mql-programing.com/archives/1742/enum_anchor_point/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 30 Sep 2021 06:01:05 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[OBJPROP_CORNER]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<category><![CDATA[ENUM_ANCHOR_POINT]]></category>
		<category><![CDATA[OBJPROP_ANCHOR]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1742</guid>

					<description><![CDATA[<p>アンカーポイントの定数 アンカーポイントの定数は、オブジェクトやチャートのアンカーポイントを設定するときに使われます。 アンカーポイントとは、オブジェクトを表示するときに基準となる座標のことです。 主に、ObjectSe [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1742/enum_anchor_point/">【MQL4定数】アンカーポイントの定数（ENUM_ANCHOR_POINT）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">アンカーポイントの定数</span></h2>



<p class="wp-block-paragraph">アンカーポイントの定数は、オブジェクトやチャートのアンカーポイントを設定するときに使われます。</p>



<p class="wp-block-paragraph">アンカーポイントとは、オブジェクトを表示するときに基準となる座標のことです。</p>



<p class="wp-block-paragraph">主に、ObjectSetInteger関数で使われます。</p>



<p class="wp-block-paragraph">簡単に関数の説明です。</p>



<ul class="wp-block-list"><li><strong>ObjectSetInteger関数：オブジェクトの状態を設定する</strong></li></ul>



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



<p class="wp-block-paragraph">それぞれ、<strong><span class="marker-under-red">OBJPROP_ANCHORと、OBJPROP_CORNERの設定値</span></strong>として、アンカーポイントの定数が使われます。</p>



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



<h3 class="wp-block-heading"><span id="toc2">アンカーポイントの定数（ENUM_ANCHOR_POINT）</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>ANCHOR_LEFT_UPPER</td><td>左上を基準</td></tr><tr><td>ANCHOR_LEFT</td><td>中央左を基準</td></tr><tr><td>ANCHOR_LEFT_LOWER</td><td>左下を基準</td></tr><tr><td>ANCHOR_LOWER</td><td>中央下を基準</td></tr><tr><td>ANCHOR_RIGHT_LOWER</td><td>右下を基準</td></tr><tr><td>ANCHOR_RIGHT</td><td>中央右を基準</td></tr><tr><td>ANCHOR_RIGHT_UPPER</td><td>右上を基準</td></tr><tr><td>ANCHOR_UPPER</td><td>中央上を基準</td></tr><tr><td>ANCHOR_CENTER</td><td>中央を基準</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">アンカーポイントの定数の使い方</span></h2>



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



<p class="wp-block-paragraph"><strong><span class="marker-under-red">それぞれ、OBJPROP_ANCHORと、OBJPROP_CORNERの設定値として、アンカーポイントの定数が使われます。</span></strong></p>



<p class="wp-block-paragraph">上記の定数を入力しましょう。</p>



<p class="wp-block-paragraph">すると、その定数に対応したアンカーポイントが設定されます。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //オブジェクトの左上を基準にする
   bool objectSetInteger1 = ObjectSetInteger(ChartID(), &quot;自動売買を作ろう！&quot;, OBJPROP_ANCHOR, ANCHOR_LEFT_UPPER);
   
  //チャートの左上を基準にする
　　bool objectSetInteger2 = ObjectSetInteger(ChartID(), &quot;自動売買を作ろう！&quot;, OBJPROP_CORNER, ANCHOR_LEFT_UPPER);</code></pre></div>



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



<p class="wp-block-paragraph">返り値はbool型です。</p>



<p class="wp-block-paragraph">成功すればture、失敗すればfalseが返ってきます。</p>



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



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



<p class="wp-block-paragraph">ここからは、アンカーポイントの定数を使った実用的なプログラム例を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc5">例1：チャート右上にスプレッド表示ラベルを作成する</span></h3>



<p class="wp-block-paragraph">チャートの右上隅にリアルタイムのスプレッドを表示するインジケーターです。ANCHOR_RIGHT_UPPERを使って、ラベルを右上基準で配置しています。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| SpreadLabel.mq4 - チャート右上にスプレッドを表示するインジケーター
//+------------------------------------------------------------------+
#property indicator_chart_window

// ラベルのオブジェクト名
string labelName = "SpreadLabel";

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // ラベルオブジェクトを作成する
   ObjectCreate(ChartID(), labelName, OBJ_LABEL, 0, 0, 0);

   // チャートの右上隅を基準コーナーに設定する
   ObjectSetInteger(ChartID(), labelName, OBJPROP_CORNER, CORNER_RIGHT_UPPER);

   // オブジェクトのアンカーポイントを右上に設定する
   // これにより、ラベルの右上が指定座標に一致する
   ObjectSetInteger(ChartID(), labelName, OBJPROP_ANCHOR, ANCHOR_RIGHT_UPPER);

   // チャート右上隅からのX方向の距離（ピクセル）
   ObjectSetInteger(ChartID(), labelName, OBJPROP_XDISTANCE, 10);

   // チャート右上隅からのY方向の距離（ピクセル）
   ObjectSetInteger(ChartID(), labelName, OBJPROP_YDISTANCE, 20);

   // フォントサイズを設定する
   ObjectSetInteger(ChartID(), labelName, OBJPROP_FONTSIZE, 14);

   // 文字色を設定する（黄色）
   ObjectSetInteger(ChartID(), labelName, OBJPROP_COLOR, clrYellow);

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれる関数                                        |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &amp;time[],
                const double &amp;open[],
                const double &amp;high[],
                const double &amp;low[],
                const double &amp;close[],
                const long &amp;tick_volume[],
                const long &amp;volume[],
                const int &amp;spread[])
{
   // 現在のスプレッドを取得する（ポイント単位）
   int currentSpread = (int)MarketInfo(Symbol(), MODE_SPREAD);

   // ラベルのテキストにスプレッド値を表示する
   ObjectSetString(ChartID(), labelName, OBJPROP_TEXT,
                   "Spread: " + IntegerToString(currentSpread) + " pts");

   return(rates_total);
}

//+------------------------------------------------------------------+
//| 終了時にオブジェクトを削除する                                    |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete(ChartID(), labelName);
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc6">例2：チャート四隅に情報パネルを表示する</span></h3>



<p class="wp-block-paragraph">チャートの四隅それぞれにラベルを配置し、通貨ペア名・時間足・Bid価格・Ask価格を表示する例です。CORNER定数とANCHOR定数を組み合わせることで、各隅に正しく配置できます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| FourCornerInfo.mq4 - チャート四隅に情報を表示するインジケーター
//+------------------------------------------------------------------+
#property indicator_chart_window

// 4つのラベル名を配列で管理する
string labels[4] = {"LabelLU", "LabelRU", "LabelLB", "LabelRB"};

//+------------------------------------------------------------------+
//| ラベルを1つ作成するヘルパー関数                                    |
//+------------------------------------------------------------------+
void CreateCornerLabel(string name,
                       ENUM_BASE_CORNER corner,
                       ENUM_ANCHOR_POINT anchor,
                       int xDist, int yDist, color clr)
{
   // ラベルオブジェクトを作成する
   ObjectCreate(ChartID(), name, OBJ_LABEL, 0, 0, 0);

   // チャートのどの隅を基準にするかを設定する
   ObjectSetInteger(ChartID(), name, OBJPROP_CORNER, corner);

   // オブジェクトのアンカーポイントを設定する
   ObjectSetInteger(ChartID(), name, OBJPROP_ANCHOR, anchor);

   // X方向の距離（ピクセル）
   ObjectSetInteger(ChartID(), name, OBJPROP_XDISTANCE, xDist);

   // Y方向の距離（ピクセル）
   ObjectSetInteger(ChartID(), name, OBJPROP_YDISTANCE, yDist);

   // フォントサイズを設定する
   ObjectSetInteger(ChartID(), name, OBJPROP_FONTSIZE, 12);

   // 文字色を設定する
   ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
}

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // 左上：通貨ペア名を表示（アンカーポイント＝左上）
   CreateCornerLabel(labels[0], CORNER_LEFT_UPPER, ANCHOR_LEFT_UPPER,
                     10, 20, clrWhite);

   // 右上：時間足情報を表示（アンカーポイント＝右上）
   CreateCornerLabel(labels[1], CORNER_RIGHT_UPPER, ANCHOR_RIGHT_UPPER,
                     10, 20, clrAqua);

   // 左下：Bid価格を表示（アンカーポイント＝左下）
   CreateCornerLabel(labels[2], CORNER_LEFT_LOWER, ANCHOR_LEFT_LOWER,
                     10, 10, clrLime);

   // 右下：Ask価格を表示（アンカーポイント＝右下）
   CreateCornerLabel(labels[3], CORNER_RIGHT_LOWER, ANCHOR_RIGHT_LOWER,
                     10, 10, clrOrange);

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれる関数                                        |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &amp;time[],
                const double &amp;open[],
                const double &amp;high[],
                const double &amp;low[],
                const double &amp;close[],
                const long &amp;tick_volume[],
                const long &amp;volume[],
                const int &amp;spread[])
{
   // 左上に通貨ペア名を表示する
   ObjectSetString(ChartID(), labels[0], OBJPROP_TEXT, Symbol());

   // 右上に現在の時間足を表示する
   ObjectSetString(ChartID(), labels[1], OBJPROP_TEXT,
                   "TF: " + IntegerToString(Period()) + "min");

   // 左下にBid価格を表示する
   ObjectSetString(ChartID(), labels[2], OBJPROP_TEXT,
                   "Bid: " + DoubleToString(Bid, Digits));

   // 右下にAsk価格を表示する
   ObjectSetString(ChartID(), labels[3], OBJPROP_TEXT,
                   "Ask: " + DoubleToString(Ask, Digits));

   return(rates_total);
}

//+------------------------------------------------------------------+
//| 終了時に全ラベルを削除する                                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   for(int i = 0; i < 4; i++)
   {
      ObjectDelete(ChartID(), labels[i]);
   }
}</code></pre>


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



<h3 class="wp-block-heading"><span id="toc7">例3：EAでエントリー時にチャート上に矢印マークを表示する</span></h3>



<p class="wp-block-paragraph">EAで売買が発生したとき、チャート上のエントリーポイントに矢印オブジェクトを配置する例です。OBJ_ARROW_UPやOBJ_ARROW_DOWNではANCHOR_TOPやANCHOR_BOTTOMを指定することで、矢印の先端がエントリー価格に正確に一致するよう調整できます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| EntryArrowEA.mq4 - エントリー位置に矢印を表示するEA              |
//+------------------------------------------------------------------+
#property strict

// 矢印の連番管理用カウンタ
int arrowCount = 0;

//+------------------------------------------------------------------+
//| 買いエントリー矢印を表示する関数                                  |
//+------------------------------------------------------------------+
void DrawBuyArrow(datetime entryTime, double entryPrice)
{
   // ユニークなオブジェクト名を生成する
   string objName = "BuyArrow_" + IntegerToString(arrowCount);
   arrowCount++;

   // 上向き矢印オブジェクトを作成する
   ObjectCreate(ChartID(), objName, OBJ_ARROW_UP, 0, entryTime, entryPrice);

   // アンカーポイントをTOP（上端）に設定する
   // 矢印の先端（上端）がエントリー価格の位置に来る
   ObjectSetInteger(ChartID(), objName, OBJPROP_ANCHOR, ANCHOR_TOP);

   // 矢印の色を青に設定する（買いシグナル）
   ObjectSetInteger(ChartID(), objName, OBJPROP_COLOR, clrDodgerBlue);

   // 矢印の幅を設定する
   ObjectSetInteger(ChartID(), objName, OBJPROP_WIDTH, 2);
}

//+------------------------------------------------------------------+
//| 売りエントリー矢印を表示する関数                                  |
//+------------------------------------------------------------------+
void DrawSellArrow(datetime entryTime, double entryPrice)
{
   // ユニークなオブジェクト名を生成する
   string objName = "SellArrow_" + IntegerToString(arrowCount);
   arrowCount++;

   // 下向き矢印オブジェクトを作成する
   ObjectCreate(ChartID(), objName, OBJ_ARROW_DOWN, 0, entryTime, entryPrice);

   // アンカーポイントをBOTTOM（下端）に設定する
   // 矢印の先端（下端）がエントリー価格の位置に来る
   ObjectSetInteger(ChartID(), objName, OBJPROP_ANCHOR, ANCHOR_BOTTOM);

   // 矢印の色を赤に設定する（売りシグナル）
   ObjectSetInteger(ChartID(), objName, OBJPROP_COLOR, clrRed);

   // 矢印の幅を設定する
   ObjectSetInteger(ChartID(), objName, OBJPROP_WIDTH, 2);
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれる関数                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // 移動平均のゴールデンクロス・デッドクロスで売買判定する例
   double maFast0 = iMA(Symbol(), 0, 5, 0, MODE_SMA, PRICE_CLOSE, 0);
   double maFast1 = iMA(Symbol(), 0, 5, 0, MODE_SMA, PRICE_CLOSE, 1);
   double maSlow0 = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 0);
   double maSlow1 = iMA(Symbol(), 0, 20, 0, MODE_SMA, PRICE_CLOSE, 1);

   // 現在ポジションがない場合のみエントリーする
   if(OrdersTotal() == 0)
   {
      // ゴールデンクロス：短期MAが長期MAを上抜け → 買い
      if(maFast1 <= maSlow1 &#038;&#038; maFast0 > maSlow0)
      {
         int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 3, 0, 0, "BuyEntry", 0, 0, clrBlue);
         if(ticket > 0)
         {
            // 買いエントリー矢印をチャートに描画する
            DrawBuyArrow(TimeCurrent(), Ask);
         }
      }

      // デッドクロス：短期MAが長期MAを下抜け → 売り
      if(maFast1 >= maSlow1 && maFast0 < maSlow0)
      {
         int ticket = OrderSend(Symbol(), OP_SELL, 0.1, Bid, 3, 0, 0, "SellEntry", 0, 0, clrRed);
         if(ticket > 0)
         {
            // 売りエントリー矢印をチャートに描画する
            DrawSellArrow(TimeCurrent(), Bid);
         }
      }
   }
}

//+------------------------------------------------------------------+
//| 終了時に全矢印オブジェクトを削除する                              |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // "BuyArrow_"で始まるオブジェクトを全削除する
   ObjectsDeleteAll(ChartID(), "BuyArrow_");

   // "SellArrow_"で始まるオブジェクトを全削除する
   ObjectsDeleteAll(ChartID(), "SellArrow_");
}</code></pre>


<p class="wp-block-paragraph">OBJ_ARROW_UPにANCHOR_TOPを設定すると矢印の先端がローソク足の安値側に正確に接し、OBJ_ARROW_DOWNにANCHOR_BOTTOMを設定すると矢印の先端が高値側に正確に接します。アンカーポイントを適切に設定しないと、矢印がずれて表示されてしまうので注意しましょう。</p>



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



<h3 class="wp-block-heading"><span id="toc8">例4：チャート左下に取引状況ダッシュボードを表示する</span></h3>



<p class="wp-block-paragraph">EAに組み込んで使える、取引状況をリアルタイム表示するダッシュボードの例です。チャート左下にANCHOR_LEFT_LOWERを使って複数行のラベルを整列配置し、保有ポジション数・含み損益・口座残高を表示します。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| TradeDashboard.mq4 - 取引状況ダッシュボードを表示するEA          |
//+------------------------------------------------------------------+
#property strict

// ダッシュボードのラベル名を定義する
string dashLabels[4] = {"DashTitle", "DashPositions", "DashProfit", "DashBalance"};

// ラベル1行あたりの高さ（ピクセル）
int lineHeight = 22;

//+------------------------------------------------------------------+
//| ダッシュボード用ラベルを1行作成する関数                            |
//+------------------------------------------------------------------+
void CreateDashLabel(string name, int lineIndex, color clr)
{
   // ラベルオブジェクトを作成する
   ObjectCreate(ChartID(), name, OBJ_LABEL, 0, 0, 0);

   // チャートの左下隅を基準にする
   ObjectSetInteger(ChartID(), name, OBJPROP_CORNER, CORNER_LEFT_LOWER);

   // アンカーポイントを左下に設定する
   // これにより、テキストの左下端が指定座標に一致する
   ObjectSetInteger(ChartID(), name, OBJPROP_ANCHOR, ANCHOR_LEFT_LOWER);

   // X方向の距離を設定する（左端から15ピクセル）
   ObjectSetInteger(ChartID(), name, OBJPROP_XDISTANCE, 15);

   // Y方向の距離を設定する（下から行番号に応じて上へずらす）
   // lineIndex=0が一番下、数字が大きいほど上に配置される
   ObjectSetInteger(ChartID(), name, OBJPROP_YDISTANCE, 15 + lineIndex * lineHeight);

   // フォントサイズを設定する
   ObjectSetInteger(ChartID(), name, OBJPROP_FONTSIZE, 11);

   // フォントを等幅フォントに設定する（数値が揃って見やすくなる）
   ObjectSetString(ChartID(), name, OBJPROP_FONT, "Courier New");

   // 文字色を設定する
   ObjectSetInteger(ChartID(), name, OBJPROP_COLOR, clr);
}

//+------------------------------------------------------------------+
//| 保有ポジションの合計損益を計算する関数                            |
//+------------------------------------------------------------------+
double CalcTotalProfit()
{
   double totalProfit = 0.0;

   // 全オーダーをループして含み損益を合計する
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 現在の通貨ペアのポジションのみ集計する
         if(OrderSymbol() == Symbol())
         {
            totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
         }
      }
   }

   return totalProfit;
}

//+------------------------------------------------------------------+
//| 現在の通貨ペアの保有ポジション数を取得する関数                    |
//+------------------------------------------------------------------+
int CountPositions()
{
   int count = 0;

   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol())
         {
            count++;
         }
      }
   }

   return count;
}

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // ダッシュボードの各行を作成する（下から順に配置）
   // 行0（一番下）：口座残高
   CreateDashLabel(dashLabels[3], 0, clrGold);
   // 行1：含み損益
   CreateDashLabel(dashLabels[2], 1, clrWhite);
   // 行2：保有ポジション数
   CreateDashLabel(dashLabels[1], 2, clrWhite);
   // 行3（一番上）：タイトル
   CreateDashLabel(dashLabels[0], 3, clrYellow);

   // タイトル行のテキストを設定する（固定文字列）
   ObjectSetString(ChartID(), dashLabels[0], OBJPROP_TEXT, "== Trade Dashboard ==");

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれる関数                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // 保有ポジション数を更新表示する
   int posCount = CountPositions();
   ObjectSetString(ChartID(), dashLabels[1], OBJPROP_TEXT,
                   "Positions : " + IntegerToString(posCount));

   // 含み損益を計算して更新表示する
   double profit = CalcTotalProfit();
   ObjectSetString(ChartID(), dashLabels[2], OBJPROP_TEXT,
                   "Profit    : " + DoubleToString(profit, 2) + " " + AccountCurrency());

   // 含み損益がプラスなら緑、マイナスなら赤に色を変える
   if(profit >= 0)
      ObjectSetInteger(ChartID(), dashLabels[2], OBJPROP_COLOR, clrLime);
   else
      ObjectSetInteger(ChartID(), dashLabels[2], OBJPROP_COLOR, clrRed);

   // 口座残高を更新表示する
   ObjectSetString(ChartID(), dashLabels[3], OBJPROP_TEXT,
                   "Balance   : " + DoubleToString(AccountBalance(), 2) + " " + AccountCurrency());
}

//+------------------------------------------------------------------+
//| 終了時にダッシュボードのオブジェクトを全削除する                  |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   for(int i = 0; i < 4; i++)
   {
      ObjectDelete(ChartID(), dashLabels[i]);
   }
}</code></pre>


<p class="wp-block-paragraph">ANCHOR_LEFT_LOWERを指定することで、チャート左下から上方向に向かって各行が自然に並びます。もしアンカーポイントをANCHOR_LEFT_UPPERにしてしまうと、テキストの上端が基準になるため、行の重なりや位置のずれが起こります。複数行を並べるときは、アンカーポイントの方向と配置の方向を揃えることが大切です。</p>



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



<h3 class="wp-block-heading"><span id="toc9">例5：チャート中央にトレードシグナルのテキストを表示する</span></h3>



<p class="wp-block-paragraph">チャートの中央にANCHOR_CENTERを使って大きなシグナルテキスト（「BUY」「SELL」「WAIT」）を表示するインジケーターの例です。ANCHOR_CENTERを使うことで、テキストの長さに関係なく常にチャートの真ん中に表示されます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| CenterSignal.mq4 - チャート中央にシグナルを表示するインジケーター |
//+------------------------------------------------------------------+
#property indicator_chart_window
#property strict

// シグナル表示用のラベル名
string signalLabel = "CenterSignalLabel";

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // ラベルオブジェクトを作成する
   ObjectCreate(ChartID(), signalLabel, OBJ_LABEL, 0, 0, 0);

   // チャートの左上隅を基準コーナーに設定する
   ObjectSetInteger(ChartID(), signalLabel, OBJPROP_CORNER, CORNER_LEFT_UPPER);

   // アンカーポイントを中央に設定する
   // テキストの中心が指定座標に一致するようになる
   ObjectSetInteger(ChartID(), signalLabel, OBJPROP_ANCHOR, ANCHOR_CENTER);

   // チャートの幅と高さの中央にラベルを配置する
   // ChartGetInteger関数でチャートの幅・高さをピクセルで取得する
   int chartWidth  = (int)ChartGetInteger(ChartID(), CHART_WIDTH_IN_PIXELS);
   int chartHeight = (int)ChartGetInteger(ChartID(), CHART_HEIGHT_IN_PIXELS);

   // X方向の距離をチャート幅の半分に設定する
   ObjectSetInteger(ChartID(), signalLabel, OBJPROP_XDISTANCE, chartWidth / 2);

   // Y方向の距離をチャート高さの半分に設定する
   ObjectSetInteger(ChartID(), signalLabel, OBJPROP_YDISTANCE, chartHeight / 2);

   // フォントサイズを大きく設定する（目立つように）
   ObjectSetInteger(ChartID(), signalLabel, OBJPROP_FONTSIZE, 32);

   // 初期テキストを設定する
   ObjectSetString(ChartID(), signalLabel, OBJPROP_TEXT, "WAIT");

   // 初期色をグレーに設定する
   ObjectSetInteger(ChartID(), signalLabel, OBJPROP_COLOR, clrGray);

   return(INIT_SUCCEEDED);
}

//+------------------------------------------------------------------+
//| ティックごとに呼ばれる関数                                        |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &amp;time[],
                const double &amp;open[],
                const double &amp;high[],
                const double &amp;low[],
                const double &amp;close[],
                const long &amp;tick_volume[],
                const long &amp;volume[],
                const int &amp;spread[])
{
   // チャートサイズが変わった場合に備えて、毎回中央座標を再計算する
   int chartWidth  = (int)ChartGetInteger(ChartID(), CHART_WIDTH_IN_PIXELS);
   int chartHeight = (int)ChartGetInteger(ChartID(), CHART_HEIGHT_IN_PIXELS);
   ObjectSetInteger(ChartID(), signalLabel, OBJPROP_XDISTANCE, chartWidth / 2);
   ObjectSetInteger(ChartID(), signalLabel, OBJPROP_YDISTANCE, chartHeight / 2);

   // 移動平均を使ったシンプルなシグナル判定
   double maFast = iMA(Symbol(), 0, 10, 0, MODE_SMA, PRICE_CLOSE, 0);
   double maSlow = iMA(Symbol(), 0, 50, 0, MODE_SMA, PRICE_CLOSE, 0);

   // 短期MAが長期MAより上 → 買いシグナル
   if(maFast > maSlow)
   {
      ObjectSetString(ChartID(), signalLabel, OBJPROP_TEXT, "BUY");
      ObjectSetInteger(ChartID(), signalLabel, OBJPROP_COLOR, clrDodgerBlue);
   }
   // 短期MAが長期MAより下 → 売りシグナル
   else if(maFast < maSlow)
   {
      ObjectSetString(ChartID(), signalLabel, OBJPROP_TEXT, "SELL");
      ObjectSetInteger(ChartID(), signalLabel, OBJPROP_COLOR, clrRed);
   }
   // ほぼ同じ → 待機
   else
   {
      ObjectSetString(ChartID(), signalLabel, OBJPROP_TEXT, "WAIT");
      ObjectSetInteger(ChartID(), signalLabel, OBJPROP_COLOR, clrGray);
   }

   return(rates_total);
}

//+------------------------------------------------------------------+
//| 終了時にオブジェクトを削除する                                    |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   ObjectDelete(ChartID(), signalLabel);
}</code></pre>


<p class="wp-block-paragraph">ANCHOR_CENTERを使うことで、テキストが「BUY」「SELL」「WAIT」と変化しても、常にチャートの中央に表示されます。もしANCHOR_LEFT_UPPERを使った場合、テキストの左上端が中央座標に来るため、文字列の長さによって見た目の位置がずれてしまいます。中央配置にはANCHOR_CENTERが最適です。</p>
<p>投稿 <a href="https://mql-programing.com/archives/1742/enum_anchor_point/">【MQL4定数】アンカーポイントの定数（ENUM_ANCHOR_POINT）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】テキスト整列の定数（ENUM_ALIGN_MODE）</title>
		<link>https://mql-programing.com/archives/1693/enum_align_mode/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 30 Sep 2021 02:40:40 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<category><![CDATA[ENUM_ALIGN_MODE]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1693</guid>

					<description><![CDATA[<p>テキスト整列の定数 テキスト整列の定数は、テキストの整列を設定するときに使われます。 主に、ObjectSetInteger関数です。 簡単に関数の説明です。 ObjectSetInteger関数：オブジェクトの状態を設 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1693/enum_align_mode/">【MQL4定数】テキスト整列の定数（ENUM_ALIGN_MODE）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">テキスト整列の定数</span></h2>



<p class="wp-block-paragraph">テキスト整列の定数は、テキストの整列を設定するときに使われます。</p>



<p class="wp-block-paragraph">主に、ObjectSetInteger関数です。</p>



<p class="wp-block-paragraph">簡単に関数の説明です。</p>



<ul class="wp-block-list"><li><strong>ObjectSetInteger関数：オブジェクトの状態を設定する</strong></li></ul>



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



<p class="wp-block-paragraph">それぞれ、OBJPROP_ALIGNの設定値として、テキスト整列の定数が使われます。</p>



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



<h3 class="wp-block-heading"><span id="toc2">テキスト整列の定数（ENUM_ALIGN_MODE）</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>ALIGN_LEFT</td><td>左揃え</td></tr><tr><td>ALIGN_CENTER</td><td>中央揃え</td></tr><tr><td>ALIGN_RIGHT</td><td>右揃え</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">テキスト整列の定数の使い方</span></h2>



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



<p class="wp-block-paragraph"><strong><span class="marker-under-red">それぞれ、OBJPROP_ALIGNの設定値として、テキスト整列の定数が使われます。</span></strong></p>



<p class="wp-block-paragraph">上記の定数を入力しましょう。</p>



<p class="wp-block-paragraph">すると、その定数に対応した整列方法になります。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //テキストを左揃えに設定
   bool objectSetInteger = ObjectSetInteger(ChartID(), &quot;自動売買を作ろう！&quot;, OBJPROP_ALIGN, ALIGN_LEFT);</code></pre></div>



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



<p class="wp-block-paragraph">返り値はbool型です。</p>



<p class="wp-block-paragraph">成功すればture、失敗すればfalseが返ってきます。</p>



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



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



<p class="wp-block-paragraph">ここからは、テキスト整列の定数を使った実用的なプログラム例を紹介します。</p>



<h3 class="wp-block-heading"><span id="toc5">例1：エディットボックスを作成して整列を設定する</span></h3>



<p class="wp-block-paragraph">OBJ_EDITオブジェクト（テキスト入力欄）を作成し、テキストの整列方法を中央揃えに設定する例です。チャート上に入力欄を表示する場面で活用できます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| エディットボックスを作成し、中央揃えに設定するサンプル           |
//+------------------------------------------------------------------+
void OnStart()
  {
   // オブジェクト名を定義
   string objName = "MyEditBox";

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

   // OBJ_EDIT（テキスト入力欄）をチャート上に作成
   // 座標はピクセル指定（左上からX:50, Y:50の位置）
   bool created = ObjectCreate(0, objName, OBJ_EDIT, 0, 0, 0);

   if(created)
     {
      // X座標（ピクセル）を設定
      ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, 50);
      // Y座標（ピクセル）を設定
      ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, 50);
      // 幅を200ピクセルに設定
      ObjectSetInteger(0, objName, OBJPROP_XSIZE, 200);
      // 高さを30ピクセルに設定
      ObjectSetInteger(0, objName, OBJPROP_YSIZE, 30);
      // フォントサイズを設定
      ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, 12);

      // ★テキスト整列を中央揃えに設定★
      ObjectSetInteger(0, objName, OBJPROP_ALIGN, ALIGN_CENTER);

      // テキストの初期値を設定
      ObjectSetString(0, objName, OBJPROP_TEXT, "中央揃えテキスト");

      // チャートを再描画して反映
      ChartRedraw(0);

      Print("エディットボックスを中央揃えで作成しました");
     }
   else
     {
      Print("オブジェクトの作成に失敗しました");
     }
  }</code></pre>


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



<h3 class="wp-block-heading"><span id="toc6">例2：3種類の整列方法を比較表示するスクリプト</span></h3>



<p class="wp-block-paragraph">左揃え・中央揃え・右揃えの3つのエディットボックスを並べて作成し、整列の違いを視覚的に確認できるスクリプトです。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 3種類のテキスト整列を比較表示するスクリプト                      |
//+------------------------------------------------------------------+
void OnStart()
  {
   // オブジェクト名の配列
   string objNames[]  = {"Edit_Left", "Edit_Center", "Edit_Right"};
   // 対応する整列定数の配列
   ENUM_ALIGN_MODE alignModes[] = {ALIGN_LEFT, ALIGN_CENTER, ALIGN_RIGHT};
   // 表示テキストの配列
   string texts[]     = {"左揃え（ALIGN_LEFT）", "中央揃え（ALIGN_CENTER）", "右揃え（ALIGN_RIGHT）"};

   // 3つのエディットボックスを縦に並べて作成
   for(int i = 0; i < 3; i++)
     {
      // 既存のオブジェクトがあれば削除
      if(ObjectFind(0, objNames[i]) >= 0)
         ObjectDelete(0, objNames[i]);

      // OBJ_EDITオブジェクトを作成
      bool created = ObjectCreate(0, objNames[i], OBJ_EDIT, 0, 0, 0);

      if(created)
        {
         // X座標を設定
         ObjectSetInteger(0, objNames[i], OBJPROP_XDISTANCE, 30);
         // Y座標を設定（40ピクセルずつ下にずらす）
         ObjectSetInteger(0, objNames[i], OBJPROP_YDISTANCE, 30 + i * 40);
         // 幅を300ピクセルに設定
         ObjectSetInteger(0, objNames[i], OBJPROP_XSIZE, 300);
         // 高さを30ピクセルに設定
         ObjectSetInteger(0, objNames[i], OBJPROP_YSIZE, 30);
         // フォントサイズを設定
         ObjectSetInteger(0, objNames[i], OBJPROP_FONTSIZE, 10);
         // 背景色を設定（見やすくするため）
         ObjectSetInteger(0, objNames[i], OBJPROP_BGCOLOR, clrWhite);

         // ★テキスト整列の定数を使って整列方法を設定★
         ObjectSetInteger(0, objNames[i], OBJPROP_ALIGN, alignModes[i]);

         // テキストを設定
         ObjectSetString(0, objNames[i], OBJPROP_TEXT, texts[i]);
        }
     }

   // チャートを再描画
   ChartRedraw(0);
   Print("3つの整列方法を比較表示しました");
  }</code></pre>


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



<h3 class="wp-block-heading"><span id="toc7">例3：口座情報パネルをインジケーターで表示する</span></h3>



<p class="wp-block-paragraph">チャート上に口座残高・有効証拠金・スプレッドなどの情報を右揃えで見やすく表示するインジケーターの例です。数値を右揃えにすることで、桁を揃えた見やすい表示になります。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 口座情報パネルを表示するインジケーター                           |
//+------------------------------------------------------------------+
#property indicator_chart_window

// パネルに表示する項目数
#define PANEL_ROWS 4

// オブジェクト名のプレフィックス
string prefix = "InfoPanel_";

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
  {
   // ラベル（項目名）とエディットボックス（値）を作成
   string labels[]  = {"残高：", "有効証拠金：", "スプレッド：", "現在時刻："};

   for(int i = 0; i < PANEL_ROWS; i++)
     {
      // --- 項目名用のラベル（左揃え）を作成 ---
      string labelName = prefix + "Label_" + IntegerToString(i);
      if(ObjectFind(0, labelName) >= 0) ObjectDelete(0, labelName);
      ObjectCreate(0, labelName, OBJ_EDIT, 0, 0, 0);
      ObjectSetInteger(0, labelName, OBJPROP_XDISTANCE, 10);
      ObjectSetInteger(0, labelName, OBJPROP_YDISTANCE, 20 + i * 28);
      ObjectSetInteger(0, labelName, OBJPROP_XSIZE, 120);
      ObjectSetInteger(0, labelName, OBJPROP_YSIZE, 24);
      ObjectSetInteger(0, labelName, OBJPROP_FONTSIZE, 10);
      ObjectSetInteger(0, labelName, OBJPROP_BGCOLOR, clrDarkSlateGray);
      ObjectSetInteger(0, labelName, OBJPROP_COLOR, clrWhite);
      ObjectSetInteger(0, labelName, OBJPROP_READONLY, true);
      // ★項目名は左揃え★
      ObjectSetInteger(0, labelName, OBJPROP_ALIGN, ALIGN_LEFT);
      ObjectSetString(0, labelName, OBJPROP_TEXT, labels[i]);

      // --- 値用のエディットボックス（右揃え）を作成 ---
      string valueName = prefix + "Value_" + IntegerToString(i);
      if(ObjectFind(0, valueName) >= 0) ObjectDelete(0, valueName);
      ObjectCreate(0, valueName, OBJ_EDIT, 0, 0, 0);
      ObjectSetInteger(0, valueName, OBJPROP_XDISTANCE, 130);
      ObjectSetInteger(0, valueName, OBJPROP_YDISTANCE, 20 + i * 28);
      ObjectSetInteger(0, valueName, OBJPROP_XSIZE, 150);
      ObjectSetInteger(0, valueName, OBJPROP_YSIZE, 24);
      ObjectSetInteger(0, valueName, OBJPROP_FONTSIZE, 10);
      ObjectSetInteger(0, valueName, OBJPROP_BGCOLOR, clrBlack);
      ObjectSetInteger(0, valueName, OBJPROP_COLOR, clrLime);
      ObjectSetInteger(0, valueName, OBJPROP_READONLY, true);
      // ★数値は右揃えで桁を揃える★
      ObjectSetInteger(0, valueName, OBJPROP_ALIGN, ALIGN_RIGHT);
      ObjectSetString(0, valueName, OBJPROP_TEXT, "---");
     }

   // タイマーを1秒間隔で設定（値の更新用）
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| タイマーイベントで値を更新                                        |
//+------------------------------------------------------------------+
void OnTimer()
  {
   // 各項目の値を更新
   ObjectSetString(0, prefix + "Value_0", OBJPROP_TEXT,
                   DoubleToString(AccountBalance(), 2));
   ObjectSetString(0, prefix + "Value_1", OBJPROP_TEXT,
                   DoubleToString(AccountEquity(), 2));
   ObjectSetString(0, prefix + "Value_2", OBJPROP_TEXT,
                   IntegerToString(MarketInfo(Symbol(), MODE_SPREAD)));
   ObjectSetString(0, prefix + "Value_3", OBJPROP_TEXT,
                   TimeToString(TimeCurrent(), TIME_SECONDS));

   // チャートを再描画
   ChartRedraw(0);
  }

//+------------------------------------------------------------------+
//| 終了処理                                                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // タイマーを停止
   EventKillTimer();

   // 作成したオブジェクトをすべて削除
   for(int i = 0; i < PANEL_ROWS; i++)
     {
      ObjectDelete(0, prefix + "Label_" + IntegerToString(i));
      ObjectDelete(0, prefix + "Value_" + IntegerToString(i));
     }
  }

//+------------------------------------------------------------------+
//| メイン処理（インジケーターとして必要）                            |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &#038;time[],
                const double &#038;open[],
                const double &#038;high[],
                const double &#038;low[],
                const double &#038;close[],
                const long &#038;tick_volume[],
                const long &#038;volume[],
                const int &#038;spread[])
  {
   return(rates_total);
  }</code></pre>


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



<h3 class="wp-block-heading"><span id="toc8">例4：EAのトレード状況ダッシュボードを表示する</span></h3>



<p class="wp-block-paragraph">EA（エキスパートアドバイザー）内でトレード状況をリアルタイムに表示するダッシュボードの例です。項目名を左揃え、数値を右揃えにすることで、情報を見やすく整理しています。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| EAのトレード状況ダッシュボード                                    |
//+------------------------------------------------------------------+

// ダッシュボードのオブジェクト名プレフィックス
string dashPrefix = "Dash_";

//+------------------------------------------------------------------+
//| ダッシュボード用のエディットボックスを1つ作成する関数             |
//| name : オブジェクト名                                             |
//| x, y : 表示位置（ピクセル）                                      |
//| width : 横幅（ピクセル）                                         |
//| text : 表示テキスト                                              |
//| align : テキスト整列方法                                         |
//| bgColor : 背景色                                                 |
//| textColor : 文字色                                               |
//+------------------------------------------------------------------+
void CreateDashEdit(string name, int x, int y, int width,
                    string text, ENUM_ALIGN_MODE align,
                    color bgColor, color textColor)
  {
   // 既存オブジェクトがあれば削除
   if(ObjectFind(0, name) >= 0)
      ObjectDelete(0, name);

   // OBJ_EDIT（テキスト入力欄）を作成
   ObjectCreate(0, name, OBJ_EDIT, 0, 0, 0);
   ObjectSetInteger(0, name, OBJPROP_XDISTANCE, x);
   ObjectSetInteger(0, name, OBJPROP_YDISTANCE, y);
   ObjectSetInteger(0, name, OBJPROP_XSIZE, width);
   ObjectSetInteger(0, name, OBJPROP_YSIZE, 22);
   ObjectSetInteger(0, name, OBJPROP_FONTSIZE, 9);
   ObjectSetInteger(0, name, OBJPROP_BGCOLOR, bgColor);
   ObjectSetInteger(0, name, OBJPROP_COLOR, textColor);
   // 読み取り専用に設定（ユーザーが編集できないようにする）
   ObjectSetInteger(0, name, OBJPROP_READONLY, true);
   ObjectSetInteger(0, name, OBJPROP_BORDER_COLOR, clrGray);

   // ★テキスト整列の定数を適用★
   ObjectSetInteger(0, name, OBJPROP_ALIGN, align);

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

//+------------------------------------------------------------------+
//| ダッシュボードを初期化して表示する関数                            |
//+------------------------------------------------------------------+
void InitDashboard()
  {
   int startX = 10;   // ダッシュボード左端のX座標
   int startY = 15;   // ダッシュボード上端のY座標
   int rowH   = 26;   // 行の高さ（ピクセル）

   // タイトル行を中央揃えで作成
   CreateDashEdit(dashPrefix + "Title", startX, startY, 280,
                  "== トレード状況 ==", ALIGN_CENTER,
                  clrNavy, clrWhite);

   // 各行の項目名（左揃え）と値（右揃え）を作成
   string items[] = {"通貨ペア", "現在価格", "保有ポジション数",
                     "合計損益", "スプレッド"};

   for(int i = 0; i < 5; i++)
     {
      int y = startY + (i + 1) * rowH;

      // 項目名：左揃えで表示
      CreateDashEdit(dashPrefix + "L" + IntegerToString(i),
                     startX, y, 140,
                     items[i], ALIGN_LEFT,
                     clrDarkSlateGray, clrWhite);

      // 値：右揃えで表示（初期値は「---」）
      CreateDashEdit(dashPrefix + "V" + IntegerToString(i),
                     startX + 140, y, 140,
                     "---", ALIGN_RIGHT,
                     clrBlack, clrAqua);
     }
  }

//+------------------------------------------------------------------+
//| ダッシュボードの値を最新情報に更新する関数                        |
//+------------------------------------------------------------------+
void UpdateDashboard()
  {
   // 保有ポジション数と合計損益を計算
   int posCount = 0;
   double totalProfit = 0.0;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         // 現在の通貨ペアのポジションのみカウント
         if(OrderSymbol() == Symbol())
           {
            posCount++;
            totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
           }
        }
     }

   // 損益に応じて文字色を変更（プラスは緑、マイナスは赤）
   color profitColor = (totalProfit >= 0) ? clrLime : clrRed;

   // 各値を更新
   ObjectSetString(0, dashPrefix + "V0", OBJPROP_TEXT, Symbol());
   ObjectSetString(0, dashPrefix + "V1", OBJPROP_TEXT,
                   DoubleToString(Bid, (int)MarketInfo(Symbol(), MODE_DIGITS)));
   ObjectSetString(0, dashPrefix + "V2", OBJPROP_TEXT,
                   IntegerToString(posCount) + " 件");
   ObjectSetString(0, dashPrefix + "V3", OBJPROP_TEXT,
                   DoubleToString(totalProfit, 2) + " " + AccountCurrency());
   // 損益の文字色を動的に変更
   ObjectSetInteger(0, dashPrefix + "V3", OBJPROP_COLOR, profitColor);
   ObjectSetString(0, dashPrefix + "V4", OBJPROP_TEXT,
                   IntegerToString((int)MarketInfo(Symbol(), MODE_SPREAD)) + " pt");

   // チャートを再描画して反映
   ChartRedraw(0);
  }

//+------------------------------------------------------------------+
//| ダッシュボードのオブジェクトをすべて削除する関数                  |
//+------------------------------------------------------------------+
void RemoveDashboard()
  {
   // プレフィックスが一致するオブジェクトをすべて削除
   int total = ObjectsTotal(0);
   for(int i = total - 1; i >= 0; i--)
     {
      string name = ObjectName(0, i);
      if(StringFind(name, dashPrefix) == 0)
         ObjectDelete(0, name);
     }
  }</code></pre>


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



<h3 class="wp-block-heading"><span id="toc9">例5：ボタンクリックでテキスト整列を切り替えるインジケーター</span></h3>



<p class="wp-block-paragraph">チャート上にボタンとテキスト表示欄を設置し、ボタンをクリックするたびにテキストの整列方法を左揃え→中央揃え→右揃えの順に切り替えるインジケーターです。OnChartEvent関数を使ったイベント処理の参考にもなります。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| ボタンクリックでテキスト整列を切り替えるインジケーター           |
//+------------------------------------------------------------------+
#property indicator_chart_window

// オブジェクト名の定数
#define BTN_NAME   "AlignSwitchBtn"    // ボタンのオブジェクト名
#define EDIT_NAME  "AlignSwitchEdit"   // テキスト表示欄のオブジェクト名
#define INFO_NAME  "AlignSwitchInfo"   // 現在の整列情報を表示するオブジェクト名

// 現在の整列モードを保持する変数（0=左, 1=中央, 2=右）
int currentAlignIndex = 0;

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
  {
   // --- 切り替えボタンを作成 ---
   if(ObjectFind(0, BTN_NAME) >= 0)
      ObjectDelete(0, BTN_NAME);
   ObjectCreate(0, BTN_NAME, OBJ_BUTTON, 0, 0, 0);
   ObjectSetInteger(0, BTN_NAME, OBJPROP_XDISTANCE, 30);
   ObjectSetInteger(0, BTN_NAME, OBJPROP_YDISTANCE, 30);
   ObjectSetInteger(0, BTN_NAME, OBJPROP_XSIZE, 140);
   ObjectSetInteger(0, BTN_NAME, OBJPROP_YSIZE, 30);
   ObjectSetInteger(0, BTN_NAME, OBJPROP_FONTSIZE, 10);
   ObjectSetInteger(0, BTN_NAME, OBJPROP_BGCOLOR, clrSteelBlue);
   ObjectSetInteger(0, BTN_NAME, OBJPROP_COLOR, clrWhite);
   ObjectSetString(0, BTN_NAME, OBJPROP_TEXT, "整列を切り替え");

   // --- テキスト表示欄を作成（初期は左揃え） ---
   if(ObjectFind(0, EDIT_NAME) >= 0)
      ObjectDelete(0, EDIT_NAME);
   ObjectCreate(0, EDIT_NAME, OBJ_EDIT, 0, 0, 0);
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_XDISTANCE, 30);
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_YDISTANCE, 70);
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_XSIZE, 300);
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_YSIZE, 30);
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_FONTSIZE, 11);
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_BGCOLOR, clrWhite);
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_COLOR, clrBlack);
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_READONLY, true);
   // ★初期値は左揃え★
   ObjectSetInteger(0, EDIT_NAME, OBJPROP_ALIGN, ALIGN_LEFT);
   ObjectSetString(0, EDIT_NAME, OBJPROP_TEXT, "サンプルテキスト ABC123");

   // --- 現在の整列状態を表示するラベルを作成 ---
   if(ObjectFind(0, INFO_NAME) >= 0)
      ObjectDelete(0, INFO_NAME);
   ObjectCreate(0, INFO_NAME, OBJ_EDIT, 0, 0, 0);
   ObjectSetInteger(0, INFO_NAME, OBJPROP_XDISTANCE, 30);
   ObjectSetInteger(0, INFO_NAME, OBJPROP_YDISTANCE, 108);
   ObjectSetInteger(0, INFO_NAME, OBJPROP_XSIZE, 300);
   ObjectSetInteger(0, INFO_NAME, OBJPROP_YSIZE, 24);
   ObjectSetInteger(0, INFO_NAME, OBJPROP_FONTSIZE, 9);
   ObjectSetInteger(0, INFO_NAME, OBJPROP_BGCOLOR, clrDarkSlateGray);
   ObjectSetInteger(0, INFO_NAME, OBJPROP_COLOR, clrYellow);
   ObjectSetInteger(0, INFO_NAME, OBJPROP_READONLY, true);
   // ★情報ラベルは中央揃え★
   ObjectSetInteger(0, INFO_NAME, OBJPROP_ALIGN, ALIGN_CENTER);
   ObjectSetString(0, INFO_NAME, OBJPROP_TEXT,
                   "現在の整列: ALIGN_LEFT（左揃え）");

   ChartRedraw(0);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| チャートイベント処理（ボタンクリックを検出）                      |
//+------------------------------------------------------------------+
void OnChartEvent(const int id,
                  const long &lparam,
                  const double &dparam,
                  const string &sparam)
  {
   // オブジェクトクリックイベントかどうかを判定
   if(id == CHARTEVENT_OBJECT_CLICK)
     {
      // クリックされたのが切り替えボタンかどうかを確認
      if(sparam == BTN_NAME)
        {
         // 整列インデックスを次に進める（0→1→2→0のループ）
         currentAlignIndex = (currentAlignIndex + 1) % 3;

         // インデックスに応じた整列定数と表示名を決定
         ENUM_ALIGN_MODE newAlign;
         string alignText;

         switch(currentAlignIndex)
           {
            case 0:
               newAlign  = ALIGN_LEFT;
               alignText = "ALIGN_LEFT（左揃え）";
               break;
            case 1:
               newAlign  = ALIGN_CENTER;
               alignText = "ALIGN_CENTER（中央揃え）";
               break;
            case 2:
               newAlign  = ALIGN_RIGHT;
               alignText = "ALIGN_RIGHT（右揃え）";
               break;
            default:
               newAlign  = ALIGN_LEFT;
               alignText = "ALIGN_LEFT（左揃え）";
               break;
           }

         // ★テキスト表示欄の整列方法を変更★
         ObjectSetInteger(0, EDIT_NAME, OBJPROP_ALIGN, newAlign);

         // 情報ラベルに現在の整列方法を表示
         ObjectSetString(0, INFO_NAME, OBJPROP_TEXT,
                         "現在の整列: " + alignText);

         // ボタンの押下状態を解除
         ObjectSetInteger(0, BTN_NAME, OBJPROP_STATE, false);

         // チャートを再描画して反映
         ChartRedraw(0);

         Print("テキスト整列を変更しました: ", alignText);
        }
     }
  }

//+------------------------------------------------------------------+
//| 終了処理                                                          |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // 作成したオブジェクトを削除
   ObjectDelete(0, BTN_NAME);
   ObjectDelete(0, EDIT_NAME);
   ObjectDelete(0, INFO_NAME);
  }

//+------------------------------------------------------------------+
//| メイン処理（インジケーターとして必要）                            |
//+------------------------------------------------------------------+
int OnCalculate(const int rates_total,
                const int prev_calculated,
                const datetime &time[],
                const double &open[],
                const double &high[],
                const double &low[],
                const double &close[],
                const long &tick_volume[],
                const long &volume[],
                const int &spread[])
  {
   return(rates_total);
  }</code></pre>


<p class="wp-block-paragraph">　</p>
<p>投稿 <a href="https://mql-programing.com/archives/1693/enum_align_mode/">【MQL4定数】テキスト整列の定数（ENUM_ALIGN_MODE）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】オブジェクト枠内の種類の定数（ENUM_BORDER_TYPE）</title>
		<link>https://mql-programing.com/archives/1681/enum_border_type/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 30 Sep 2021 01:46:46 +0000</pubDate>
				<category><![CDATA[定数]]></category>
		<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<category><![CDATA[ENUM_BORDER_TYPE]]></category>
		<category><![CDATA[OBJPROP_BORDER_TYPE]]></category>
		<category><![CDATA[MQL]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1681</guid>

					<description><![CDATA[<p>オブジェクト枠線の種類の定数 オブジェクト枠内の種類の定数は、オブジェクトを表示したときの、枠内の種類を選択するときに使用されます。 主に、ObjectSetInteger関数です。 ObjectSetInteger関数 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1681/enum_border_type/">【MQL4定数】オブジェクト枠内の種類の定数（ENUM_BORDER_TYPE）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">オブジェクト枠線の種類の定数</span></h2>



<p class="wp-block-paragraph">オブジェクト枠内の種類の定数は、オブジェクトを表示したときの、枠内の種類を選択するときに使用されます。</p>



<p class="wp-block-paragraph">主に、ObjectSetInteger関数です。</p>



<p class="wp-block-paragraph">ObjectSetInteger関数で、OBJPROP_BORDER_TYPEを設定するときに、この定数を使います。</p>



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



<h3 class="wp-block-heading"><span id="toc2">オブジェクト枠内の種類の定数（ENUM_BORDER_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>BORDER_FLAT</td><td>枠内を平面にする</td></tr><tr><td>BORDER_RAISED</td><td>枠内を凸らせる</td></tr><tr><td>BORDER_SUNKEN</td><td>枠内を凹ませる</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">オブジェクト枠内の種類の定数の使い方</span></h2>



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



<p class="wp-block-paragraph"><strong><span class="marker-under-red">ObjectSetInteger関数の、OBJPROP_BORDER_TYPEの設定値で使用されます。</span></strong></p>



<p class="wp-block-paragraph">上記の定数を入力しましょう。</p>



<p class="wp-block-paragraph">すると、その定数に対応したオブジェクト枠内の種類が選択されます。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //OBJPROP_BORDER_TYPEの設定値にBORDER_FLATを入れる
  //オブジェクトの枠内を平面に設定
   bool objectSetInteger = ObjectSetInteger(ChartID(), &quot;自動売買を作ろう！&quot;, OBJPROP_BORDER_TYPE, BORDER_FLAT);</code></pre></div>



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



<p class="wp-block-paragraph">返り値はbool型です。</p>



<p class="wp-block-paragraph">成功すればture、失敗すればfalseが返ってきます。</p>



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



<h2 class="wp-block-heading"><span id="toc4">【補足】オブジェクト枠内の種類の定数の列挙型（ENUM_BORDER_TYPE）</span></h2>



<p class="wp-block-paragraph">オブジェクト枠内の種類の定数は、ENUM_BORDER_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_BORDER_TYPE borderType = BORDER_FLAT;</code></pre></div>



<p class="wp-block-paragraph">上記のようにプログラムすると、borderType変数に BORDER_FLATの数値が代入されます。</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/1681/enum_border_type/">【MQL4定数】オブジェクト枠内の種類の定数（ENUM_BORDER_TYPE）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4定数】オブジェクト設定の定数：Integer型（ENUM_OBJECT_PROPERTY_INTEGER）</title>
		<link>https://mql-programing.com/archives/1548/object_property_integer/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 26 Sep 2021 07:44:52 +0000</pubDate>
				<category><![CDATA[【辞書】MQLリファレンス]]></category>
		<category><![CDATA[定数]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[ENUM_OBJECT_PROPERTY_INTEGER]]></category>
		<category><![CDATA[ObjectSetInteger]]></category>
		<category><![CDATA[ObjectGetInteger]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=1548</guid>

					<description><![CDATA[<p>オブジェクト設定の定数（Integer型） オブジェクト設定の定数（Integer型）は、オブジェクト設定関数の引数として使用します。 主に、ObjectSetInteger関数と ObjectGetInteger関数で [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/1548/object_property_integer/">【MQL4定数】オブジェクト設定の定数：Integer型（ENUM_OBJECT_PROPERTY_INTEGER）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<h2 class="wp-block-heading"><span id="toc1">オブジェクト設定の定数（Integer型）</span></h2>



<p class="wp-block-paragraph">オブジェクト設定の定数（Integer型）は、オブジェクト設定関数の引数として使用します。</p>



<p class="wp-block-paragraph">主に、ObjectSetInteger関数と ObjectGetInteger関数です。</p>



<p class="wp-block-paragraph">以下、関数の簡単な説明です。</p>



<ul class="wp-block-list"><li><strong>ObjectSetInteger関数：オブジェクトの状態を設定する</strong></li><li><strong>ObjectGetInteger関数：オブジェクトの状態を取得する</strong></li></ul>



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



<p class="wp-block-paragraph">ここで注意して欲しいのは、定数の数値が直接設定されるのではなく、<strong><span class="marker-under-red">定数の項目に値を設定する</span></strong>ということです。</p>



<p class="wp-block-paragraph">そのため定数の他に、別の値を設定する必要があります。</p>



<p class="wp-block-paragraph"><strong>定数によって、入出力可能な型が決まっている</strong>ので、それも確認しましょう。</p>



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



<p class="wp-block-paragraph">オブジェクト設定の定数には、Integer型の他にも Double型、String型の3種類があります。</p>



<p class="wp-block-paragraph">ここでは、<strong><span class="marker-under-red">Integer型の情報</span></strong>を記載しております。</p>



<p class="wp-block-paragraph">ちなみに Integer型とは、「int型・bool型・color型・datetime型・列挙型」を指します。</p>



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



<h3 class="wp-block-heading"><span id="toc2">オブジェクト設定の定数：Integer型（ENUM_OBJECT_PROPERTY_INTEGER）</span></h3>



<figure class="wp-block-table is-style-stripes"><table><tbody><tr><td><strong>定数</strong></td><td><strong>入出力の型</strong></td><td><strong>設定する項目</strong></td></tr><tr><td>OBJPROP_COLOR</td><td>color</td><td>オブジェクトの色</td></tr><tr><td>OBJPROP_STYLE</td><td><code>ENUM_LINE_STYLE</code></td><td>線の種類</td></tr><tr><td>OBJPROP_WIDTH</td><td>int</td><td>線の幅</td></tr><tr><td>OBJPROP_BACK</td><td>bool</td><td>オブジェクトの背景表示</td></tr><tr><td>OBJPROP_ZORDER</td><td>long</td><td>クリックイベントの優先度<br>大きいオブジェクトからクリックされる<br>参考：CHARTEVENT_CLICK</td></tr><tr><td>OBJPROP_FILL</td><td>bool</td><td>オブジェクトの塗りつぶしの許可</td></tr><tr><td>OBJPROP_HIDDEN</td><td>bool</td><td>オブジェクトリストに表示させない</td></tr><tr><td>OBJPROP_SELECTED</td><td>bool</td><td>オブジェクトの選択状態</td></tr><tr><td>OBJPROP_READONLY</td><td>bool</td><td>テキストを編集させない<br>参考：OBJ_EDIT</td></tr><tr><td>OBJPROP_TYPE</td><td><code>ENUM_OBJECT</code></td><td>オブジェクトの種類</td></tr><tr><td>OBJPROP_TIME</td><td>datetime</td><td>アンカーポイントの位置（時間軸）</td></tr><tr><td>OBJPROP_SELECTABLE</td><td>bool</td><td>オブジェクトの選択の許可</td></tr><tr><td>OBJPROP_CREATETIME</td><td>datetime</td><td>オブジェクトの作成日時</td></tr><tr><td>OBJPROP_LEVELS</td><td>int</td><td>レベルラインの値<br>参考：RSIなど</td></tr><tr><td>OBJPROP_LEVELCOLOR</td><td>color</td><td>レベルラインの色</td></tr><tr><td>OBJPROP_LEVELSTYLE</td><td>ENUM_LINE_STYLE</td><td>レベルラインの線の種類</td></tr><tr><td>OBJPROP_LEVELWIDTH</td><td>int</td><td>レベルラインの太さ</td></tr><tr><td>OBJPROP_ALIGN</td><td>ENUM_ALIGN_MODE</td><td>テキストの左寄せ・中央・右寄せ</td></tr><tr><td>OBJPROP_FONTSIZE</td><td>int</td><td>フォントサイズ</td></tr><tr><td>OBJPROP_RAY_RIGHT</td><td>bool</td><td>線の右端の延長表示</td></tr><tr><td>OBJPROP_ELLIPSE</td><td>bool</td><td>完全な楕円を表示<br>参考：OBJ_FIBOARC</td></tr><tr><td>OBJPROP_ARROWCODE</td><td>char</td><td>矢印コード</td></tr><tr><td>OBJPROP_TIMEFRAMES</td><td>OBJ_PERIOD</td><td>オブジェクトを表示する時間足</td></tr><tr><td>OBJPROP_ANCHOR</td><td>①ENUM_ARROW_ANCHOR<br>②ENUM_ANCHOR_POINT</td><td>アンカーポイントの設定<br>参考①：OBJ_ARROW<br>参考②：OBJ_LABEL, OBJ_BITMAP_LABEL, OBJ_TEXT</td></tr><tr><td>OBJPROP_XDISTANCE</td><td>int</td><td>チャート四隅からのX軸距離（pixel）</td></tr><tr><td>OBJPROP_YDISTANCE</td><td>int</td><td>チャート四隅からのY軸距離（pixel）</td></tr><tr><td>OBJPROP_STATE</td><td>bool</td><td>ボタン押下の状態</td></tr><tr><td>OBJPROP_XSIZE</td><td>int</td><td>オブジェクトの幅（pixel）</td></tr><tr><td>OBJPROP_YSIZE</td><td>int</td><td>オブジェクトの高さ（pixel）</td></tr><tr><td>OBJPROP_XOFFSET</td><td>int</td><td>X軸方向の表示開始位置（pixel）<br>参考：OBJ_BITMAP,OBJ_BITMAP_LABEL</td></tr><tr><td>OBJPROP_YOFFSET</td><td>int</td><td>Y軸方向の表示開始位置（pixel）<br>参考：OBJ_BITMAP,OBJ_BITMAP_LABEL</td></tr><tr><td>OBJPROP_BGCOLOR</td><td>color</td><td>背景色<br>参考：OBJ_EDIT, OBJ_BUTTON, OBJ_RECTANGLE_LABEL</td></tr><tr><td>OBJPROP_CORNER</td><td>ENUM_BASE_CORNER</td><td>アンカーポイントの基準点</td></tr><tr><td>OBJPROP_BORDER_TYPE</td><td>ENUM_BORDER_TYPE</td><td>枠線の種類<br>参考：OBJ_RECTANGLE</td></tr><tr><td>OBJPROP_BORDER_COLOR</td><td>color</td><td>枠線の色<br>参考：OBJ_EDIT , OBJ_BUTTON</td></tr></tbody></table></figure>



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



<h2 class="wp-block-heading"><span id="toc3">オブジェクト設定の定数（Integer型）の使い方</span></h2>



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



<p class="wp-block-paragraph">ObjectSetInteger関数を実行する場合は、定数の他にInteger型の値を入力します。</p>



<p class="wp-block-paragraph">ObjectGetInteger関数を実行する場合は、定数だけで問題ありません。</p>



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>  //ObjectSetInteger関数
  //オブジェクトの線の太さを3に設定
  bool objectSetInteger = ObjectSetInteger(ChartID(),&quot;obj_name&quot;,OBJPROP_WIDTH,3);


  //ObjectGetInteger関数
  //オブジェクトの線の太さを取得
  int objectGetInteger = ObjectGetInteger(ChartID(),&quot;obj_name&quot;,OBJPROP_WIDTH);</code></pre></div>



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



<p class="wp-block-paragraph">返り値はobjectSetInteger関数はbool型で、ObjectGetInteger関数はInteger型です。</p>



<p class="wp-block-paragraph">実際にプログラミングするときは、上記の表にしたがって、正しい変数の型を入力・出力してください。</p>



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



<h2 class="wp-block-heading"><span id="toc4">【補足】オブジェクト設定の定数の列挙型（ENUM_OBJECT_PROPERTY_INTEGER）</span></h2>



<p class="wp-block-paragraph">オブジェクト設定の定数（Integer型）は、ENUM_OBJECT_PROPERTY_INTEGER​という<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_OBJECT_PROPERTY_INTEGER objectPropertyInteger = OBJPROP_WIDTH;</code></pre></div>



<p class="wp-block-paragraph">上記のようにプログラムすると、objectPropertyInteger変数に OBJPROP_WIDTHの数値が代入されます。</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/1548/object_property_integer/">【MQL4定数】オブジェクト設定の定数：Integer型（ENUM_OBJECT_PROPERTY_INTEGER）</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
