<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>注文 アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/%e6%b3%a8%e6%96%87/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/注文/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Tue, 31 Mar 2026 12:51:30 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.9.4</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>注文 アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/注文/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<item>
		<title>【MQL4関数】OrderType関数の使い方！買いと売りを判別しよう</title>
		<link>https://mql-programing.com/archives/2111/ordertype/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 13 Oct 2021 03:12:29 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderType]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=2111</guid>

					<description><![CDATA[<p>OrderType関数とは 「自動売買が買いポジションを決済するタイミングで、売りポジションを決済してしまった！」 そういう方は、買いポジションと売りポジションを、正しく判別できていない可能性があります。 　 買いと売り [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/2111/ordertype/">【MQL4関数】OrderType関数の使い方！買いと売りを判別しよう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>買いポジションを決済するロジックなのに、売りポジションを決済しちゃった！どうすれば防げるんだろう？</p>
</div></div>



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



<p><strong>「自動売買が買いポジションを決済するタイミングで、売りポジションを決済してしまった！」</strong></p>



<p>そういう方は、買いポジションと売りポジションを、正しく判別できていない可能性があります。</p>



<p>　</p>



<p><strong><span class="marker-under-red">買いと売りを正しく判別できていない場合、買いポジションを決済するつもりが、売りポジションを決済</span><span class="marker-under-red">してしまった</span><span class="marker-under-red">ということが起こってしまいます。</span></strong></p>



<p>そこで、OrderType関数を使って、ポジションの種類を判別し、ポジションを正しく決済させましょう！</p>



<p>　</p>



<p><strong>OrderType関数は、ポジションの種類を返す関数です。</strong></p>



<p>ポジションの種類を取得することで、買いと売りの判別ができるようになります。</p>



<p>判別ができることで、自動売買が決済するときに、<strong><span class="marker-under-red">ポジションを間違えずに決済することができます。</span></strong></p>



<p>実行することで、ポジションが「買い」なのか「売り」なのかを判別することができるので、自動売買には必須の関数と言えるでしょう。</p>



<p>　</p>



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



<p>OrderType関数の使い方は、基本的な関数と同じです。</p>



<p>関数をマスターしていない方はこちらの記事が参考になります。</p>



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

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



<p>　</p>



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



<p>OrderType関数はとてもシンプルな関数です。</p>



<p>引数なしで実行できます。</p>



<p><strong>ただし、OrderType関数を実行する前に、ポジションを選択しておく必要があります。</strong></p>



<p>そのため、<a href="https://mql-programing.com/orderselect/" title="【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方">OrderSelect関数</a>を実行してポジションを選択しておきましょう。</p>



<p>　</p>



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



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



<p>　</p>



<p>返り値は int型です。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc4">OrderType関数を実行する前に、ポジションを選択しておく</span></h3>



<p>OrderType関数は、事前にポジションを選択しないと実行することができません。</p>



<p><strong><span class="marker-under-red">そのため、OrderTypeを実行する前に、ポジションを選択しておきましょう。</span></strong></p>



<p>ポジションを選択するには、<a href="https://mql-programing.com/orderselect/" title="【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方">OrderSelect関数</a>を使います。</p>



<p>　</p>



<p><strong>必ず OrderSelect関数 → OrderType関数 の順にプログラムする</strong>ので、以下のようなプログラムになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つ選択
if(OrderSelect(0, SELECT_BY_POS, MODE_TRADES))
   {

   //選択したポジションが、買いポジションなのかチェック
   if(OrderType() == OP_BUY)
   {

      //ここにポジションを決済するプログラムを書く

   }
   }</code></pre></div>



<p>　</p>



<p>このように、OrderType関数を実行する前に、ポジションを選択しておくようにしましょう。</p>



<p>ちなみに if文の条件式に「OP_BUY」と書いていますが、<strong>OP_BUYは買いポジションの定数です。</strong></p>



<p>OrderType関数の返り値は、<a href="https://mql-programing.com/ordertype_op/">OP_BUY</a>のような定数が入っているので、判別ができるというわけですね。</p>



<p>　</p>



<p>OrderSelect関数でポジションを選択し、OrderType関数で選択したポジションの種類を取得します。</p>



<p>ポジションの種類を取得することで、別のポジションを決済してしまうことを防ぐことが可能です。</p>



<p>　</p>



<p>OrderSelect関数は、こちらの記事が参考になります。</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/orderselect/" title="【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方" 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/04/OrderSelect.jpg?fit=1200%2C675&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方</div><div class="blogcard-snippet external-blogcard-snippet">目次 OrderSelect関数とはOrderSelect関数の書き方基本的な書き方返り値（戻り値）引数①index②select③poolOrderSelect関数の具体的な使い方（サンプルあり）まとめ OrderSe</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/712/orderselect/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



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



<p>OrderType関数の返り値は int型です。</p>



<p>返り値には、「買い」なのか「売り」なのかの定数が入っています。</p>



<p>定数は6種類あり、「買い指値」や「売り指値」なども判別することができます。</p>



<p>定数の種類はこちらの記事が参考になります。</p>



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

<a href="https://mql-programing.com/ordertype_op/" title="【MQL4定数】注文種別の定数（OP_BUY ,OP_SELL）" 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/ordertype_op.jpg?fit=1200%2C675&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4定数】注文種別の定数（OP_BUY ,OP_SELL）</div><div class="blogcard-snippet external-blogcard-snippet">目次 注文種別の定数注文種別の定数（OP_BUY ,OP_SELL）注文種別の定数の使い方 注文種別の定数 主にOrderSend関数の引数で使われる定数です。 定数を使わずに数値を入力しても、同様の結果が得られます。</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/1340/ordertype_op/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



<p>基本的には、OP_BUY もしくは OP_SELL を使用することが多いです。</p>



<p>OP_BUY と OP_SELL だけ覚えてしまいましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc6">引数</span></h3>



<p>なし</p>



<p>　</p>



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



<p>先ほど、OrderSelect関数と組み合わせましたが、さらに他の関数とも組み合わせます。</p>



<p>上記の例では、ポジションを１つだけ選択して、ポジションの種類を取得していましたが、全てのポジションの種類を取得してみます。</p>



<p><strong>全てのポジションの種類を取得するためには、for文を使って全てのポジションをチェックします。</strong></p>



<p>そのとき、for文の条件式に保有ポジション数が必要となりますので、<a href="https://mql-programing.com/orderstotal/" title="【MQL4関数】OrdersTotal関数の使い方！保有ポジション数の取得のやり方">OrdersTotal関数</a>と組み合わせて使ってみましょう。</p>



<p>例えば、以下のようなプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つずつチェックしていく
for( int i = OrdersTotal() - 1; i &gt;= 0; i--)
   {

    //保有ポジションを一つ選択
    if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
        {

            //選択したポジションが、買いポジションなのかチェック
            if( OrderType() == OP_BUY)
            {

            //ここにポジションを決済するプログラムを書く

            }
        }
   }</code></pre></div>



<p>　</p>



<p>以下は、上記のロジックを組み込んだサンプルプログラムの全体像です。買いポジションだけを検出してログに出力する例になります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| OrderType関数サンプル                                              |
//+------------------------------------------------------------------+
void OnTick()
{
   //保有ポジションを一つずつチェックしていく
   for( int i = OrdersTotal() - 1; i &gt;= 0; i--)
   {
      //保有ポジションを一つ選択
      if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
      {
         //選択したポジションが、買いポジションなのかチェック
         if( OrderType() == OP_BUY)
         {
            Print("買いポジションを検出しました。チケット番号: ", OrderTicket());

            //ここにポジションを決済するプログラムを書く
         }

         //選択したポジションが、売りポジションなのかチェック
         if( OrderType() == OP_SELL)
         {
            Print("売りポジションを検出しました。チケット番号: ", OrderTicket());

            //ここにポジションを決済するプログラムを書く
         }
      }
   }
}</code></pre></div>



<p>　</p>



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



<p>　</p>



<p>このように書くことで、全てのポジションをチェックし、その中から買いポジションだけを選択することができます。</p>



<p>この書き方は、自動売買を作るときによく使う書き方なので、どこかにコピーしておくと良いでしょう。</p>



<p>　</p>



<p>OrdersTotal関数の使い方は、以下の記事が参考になります。</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/orderstotal/" title="【MQL4関数】OrdersTotal関数の使い方！保有ポジション数の取得のやり方" 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/04/OrdersTotal.jpg?fit=1200%2C675&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4関数】OrdersTotal関数の使い方！保有ポジション数の取得のやり方</div><div class="blogcard-snippet external-blogcard-snippet">目次 OrdersTotal関数とはOrdersTotal関数の使用方法と注意点まとめ OrdersTotal関数とは 自動売買でトレードするとき、保有ポジション数をチェックしたいですよね！ そのときに OrdersTo</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/705/orderstotal/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



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



<p><strong>OrderType関数は、保有ポジションが買いなのか売りなのかを取得する関数です。</strong></p>



<p>自動売買が決済するタイミングで、OrderType関数で買いと売りを判別しないと、間違ったポジションを決済する可能性があります。</p>



<p>使い方としては、OrderSelect関数で事前にポジションを選択する必要がありますので、注意しましょう。</p>



<p>また、上記で紹介したサンプルプログラムは、どの自動売買でも基本となる書き方なので、コピーしておくと良いでしょう。</p>



<p><strong><span class="marker-under-red">「決済するポジションがおかしい」</span></strong>ということが無くなるように、自動売買を作っていきましょう！</p>



<p>　</p>



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

<a href="https://mql-programing.com/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="160" height="90" /></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/?elementor-preview=1202&#038;ver=1634090664#toc78" 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>投稿 <a href="https://mql-programing.com/archives/2111/ordertype/">【MQL4関数】OrderType関数の使い方！買いと売りを判別しよう</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4関数】OrderOpenPrice関数の使い方！エントリーした価格の取得方法</title>
		<link>https://mql-programing.com/archives/950/orderopenprice/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Wed, 22 Sep 2021 06:43:28 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderOpenPrice]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=950</guid>

					<description><![CDATA[<p>OrderOpenPrice関数とは OrderOpenPrice関数は、ポジションの価格を取得する関数です。 基本的に、この関数単体で使うことはなく、OrderClose関数などと組み合わせて使います。 いろんな場面で [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/950/orderopenprice/">【MQL4関数】OrderOpenPrice関数の使い方！エントリーした価格の取得方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>エントリーした価格を取得するにはどうしたらいいの？</p>
</div></div>



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



<p><strong>OrderOpenPrice関数は、ポジションの価格を取得する関数です。</strong></p>



<p>基本的に、この関数単体で使うことはなく、<a href="https://mql-programing.com/orderclose/" title="【MQL4関数】決済注文の出し方（OrderClose関数）とサンプルプログラム">OrderClose関数</a>などと組み合わせて使います。</p>



<p>いろんな場面で使う関数なので、覚えておくと良いでしょう。</p>



<p>　</p>



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



<p>OrderOpenPrice関数の使い方は、基本的な関数と同じです。</p>



<p>関数をマスターしていない方はこちらの記事が参考になります。</p>



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

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



<p>　</p>



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



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double orderOpenPrice = OrderOpenPrice();</code></pre></div>



<p>　</p>



<p>返り値はdouble型で引数はありません。</p>



<p>返り値を見ていきましょう。</p>



<p>　</p>



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



<p><strong>OrderOpenPrice関数の返り値はdouble型です。</strong></p>



<p>具体的には、エントリーしているポジションの価格が返ってきます。</p>



<p>例えば、「105.000円」でエントリーしているポジションの場合、「105.000」が返ってきます。</p>



<p><strong><span class="marker-under-red">そのため、ポジションの価格情報が必要な場合、OrderOpenPrice関数を使うことで、簡単に取得することができます。</span></strong></p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc5">OrderOpenPrice関数の具体的な使い方</span></h2>



<p>それでは、OrderOpenPrice関数の具体的な使い方を見ていきましょう。</p>



<p>OrderOpenPrice関数は、主に <a href="https://mql-programing.com/orderclose/" title="【MQL4関数】決済注文の出し方（OrderClose関数）とサンプルプログラム">OrderClose関数</a>や <a href="https://mql-programing.com/ordermofidy/" title="【MQL4関数】ポジションの変更注文の出し方（OrderModify 関数）">OrderModify関数</a>を実行するときに使います。</p>



<p>具体的には以下のようなプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つ選択
    if(OrderSelect(10, SELECT_BY_POS, MODE_TRADES))
       {

        //ポジションのエントリー価格を取得
        double orderOpenPrice = OrderOpenPrice();

        //変更注文を出す
        bool orderModify = OrderModify(OrderTicket(), orderOpenPrice, OrderStopLoss(), 110.000, OrderExpiration(), clrRed);
       }
   }
</code></pre></div>



<p>　</p>



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



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



<p>　</p>



<p>まずは、OrderSelect関数でポジションを選択します。</p>



<p>その後、OrderOpenPrice関数で、ポジションのエントリー価格を取得します。</p>



<p>最後にOrderModify関数で、変更注文を出すというプログラムです。</p>



<p>このように変更注文（<a href="https://mql-programing.com/ordermofidy/" title="【MQL4関数】ポジションの変更注文の出し方（OrderModify 関数）">OrderModify関数</a>）や決済注文（<a href="https://mql-programing.com/orderclose/" title="【MQL4関数】決済注文の出し方（OrderClose関数）とサンプルプログラム">OrderClose関数</a>）を実行するときに、とても便利な関数なので、覚えておくとスムーズにプログラミングできます。</p>



<p>OrderClose関数でも同じような使い方をしますので、サンプルプログラムを見てみてください。</p>



<p>　</p>



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



<p><strong>OrderOpenPriceはポジションのエントリー価格を取得する関数です。</strong></p>



<p>実行する前に、ポジションを選択する必要があります。（<a href="https://mql-programing.com/orderselect/" title="【MQL4関数】保有ポジションの選択（OrderSelect関数）のやり方">OrderSelect関数</a>）</p>



<p>また、OrderOpenPrice関数は単体で使うことはありません。</p>



<p>変更注文（<a href="https://mql-programing.com/ordermofidy/" title="【MQL4関数】ポジションの変更注文の出し方（OrderModify 関数）">OrderModify関数</a>）や決済注文（<a href="https://mql-programing.com/orderclose/" title="【MQL4関数】決済注文の出し方（OrderClose関数）とサンプルプログラム">OrderClose関数</a>）を実行するときに、組み合わせて使われます。</p>



<p>サンプルプログラムを見ながら、少しづつ関数をマスターしていきましょう！</p>



<p>　</p>



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

<a href="https://mql-programing.com/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="160" height="90" /></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/order-relation/" title="注文関係の記事一覧" class="blogcard-wrap internal-blogcard-wrap a-wrap cf"><div class="blogcard internal-blogcard ib-left cf"><div class="blogcard-label internal-blogcard-label"><span class="fa"></span></div><figure class="blogcard-thumbnail internal-blogcard-thumbnail"><img loading="lazy" decoding="async" width="160" height="90" src="https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-160x90.png" class="blogcard-thumb-image internal-blogcard-thumb-image wp-post-image" alt="" srcset="https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-160x90.png 160w, https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-300x169.png 300w, https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-1024x576.png 1024w, https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-768x432.png 768w, https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-1536x864.png 1536w, https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-2048x1152.png 2048w, https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-120x68.png 120w, https://mql-programing.com/main29/wp-content/uploads/2021/04/order-relation-320x180.png 320w" sizes="(max-width: 160px) 100vw, 160px" /></figure><div class="blogcard-content internal-blogcard-content"><div class="blogcard-title internal-blogcard-title">注文関係の記事一覧</div><div class="blogcard-snippet internal-blogcard-snippet">朝日奈りさこちらは注文関係の記事一覧です。本サイトはサンプルプログラムを公開しております。「実際にプログラムをみたい！」という方にも参考になると思います。サンプルプログラムはこちらからあくまでサンプルプログラムです。ご利用は自己責任でお願い</div></div><div class="blogcard-footer internal-blogcard-footer cf"><div class="blogcard-site internal-blogcard-site"><div class="blogcard-favicon internal-blogcard-favicon"><img loading="lazy" decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com" alt="" class="blogcard-favicon-image internal-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain internal-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>
<p>投稿 <a href="https://mql-programing.com/archives/950/orderopenprice/">【MQL4関数】OrderOpenPrice関数の使い方！エントリーした価格の取得方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4関数】OrderClosePrice関数の使い方！決済価格の取得方法</title>
		<link>https://mql-programing.com/archives/870/ordercloseprice/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 06 May 2021 05:04:09 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderClosePrice]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=870</guid>

					<description><![CDATA[<p>OrderClosePrice関数とは ポジションを決済するときには、OrderClose関数を使います。 OrderClose関数を実行するためには、引数に「希望する決済価格」を設定する必要があります。 そこで Ord [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/870/ordercloseprice/">【MQL4関数】OrderClosePrice関数の使い方！決済価格の取得方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>ポジションを決済するには、希望する決済価格を設定する必要があるよ！</p>
</div></div>



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



<p>ポジションを決済するときには、<a href="https://mql-programing.com/orderclose/">OrderClose関数</a>を使います。</p>



<p>OrderClose関数を実行するためには、引数に<strong>「希望する決済価格」</strong>を設定する必要があります。</p>



<p>そこで OrderClosePrice関数を使いましょう。</p>



<p>　</p>



<p><strong><span class="marker-under-red">OrderClosePrice関数とは、選択したポジションの決済価格を返す関数です。</span></strong></p>



<p>決済価格を返すといっても難しいことはなく、<strong>現在の買値や売値の価格を返してくれます。</strong></p>



<p>このように、ポジションを決済する関数（OrderClose関数）を実行するときに使う関数なので、覚えておくと良いでしょう。</p>



<p>　</p>



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



<p>OrderClosePrice関数の使い方は、基本的な関数と同じです。</p>



<p>関数をマスターしていない方はこちらの記事が参考になります。</p>



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

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



<p>　</p>



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



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double orderClosePrice = OrderClosePrice();</code></pre></div>



<p>　</p>



<p>返り値は double型で、引数は必要ありません。</p>



<p>まずは返り値を見ていきましょう。</p>



<p>　</p>



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



<p><strong>OrderClosePrice関数の返り値は double型です。</strong></p>



<p>具体的には、自動売買を動かしている通貨ペアの価格が返ってきます。</p>



<p>例えばドル円の場合、現在の買値が「105.000円」の時、OrderClosePrice関数は「105.000」を返します。</p>



<p><strong><span class="marker-under-red">ちなみに、売りポジションの場合は買値が返ってきて、買いポジションの場合は売値が返ってきます。</span></strong></p>



<p>そのため、いちいちスプレッドを意識しなくても、決済価格を決めることができます。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc5">OrderClosePrice関数の具体的な使い方</span></h2>



<p>それでは、OrderClosePrice関数の具体的な使い方を見ていきましょう。</p>



<p>OrderClosePrice関数は、主に決済注文（<a href="https://mql-programing.com/orderclose/" title="【MQL4関数】決済注文の出し方（OrderClose関数）とサンプルプログラム">OrderClose関数</a>）を実行するときに使います。</p>



<p>具体的には以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つ選択
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
   {

      //決済価格を取得
      double orderClosePrice = OrderClosePrice();

      //ポジションを決済
      bool orderClose = OrderClose( OrderTicket(), OrderLots(), orderClosePrice, 10, clrNONE);

   }</code></pre></div>



<p>　</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://mql-programing.com/product/file_orderclose/" class="btn btn-m btn-circle" target="_self"><span class="fz-20px">サンプルプログラムはこちらから</span></a></div>



<p>　</p>



<p>初めに、<a href="https://mql-programing.com/orderselect/" title="【MQL4関数】保有ポジションの選択（OrderSelect関数）のやり方">OrderSelect関数</a>でポジションを選択します。</p>



<p>その後 OrderClosePrice関数で、決済価格を取得します。</p>



<p>取得した決済価格を、OrderClose関数の引数として使います。</p>



<p>このように、決済注文（OrderClose関数）を出すときに便利な関数なので、覚えておくと良いでしょう。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc6">OrderClosePrice関数の実用的なプログラム例</span></h2>



<p>ここからは、OrderClosePrice関数を使った実用的なプログラム例を紹介します。実際のEA開発でよく使われるパターンなので、ぜひ参考にしてください。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc7">例1：保有中の全ポジションを一括決済するEA</span></h3>



<p>複数のポジションを保有しているときに、すべてのポジションを一括で決済する処理です。ループの中でOrderClosePriceを使って、各ポジションに合った決済価格を自動で取得しています。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 全ポジション一括決済関数                                           |
//+------------------------------------------------------------------+
void CloseAllPositions()
{
   // ポジション数を取得（後ろからループすることで番号のズレを防ぐ）
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 現在のチャートと同じ通貨ペアのポジションのみ対象
         if(OrderSymbol() == Symbol())
         {
            // OrderClosePriceで決済価格を自動取得（買い/売り問わず正しい価格が返る）
            double closePrice = OrderClosePrice();
            
            // ポジションを決済
            bool result = OrderClose(OrderTicket(), OrderLots(), closePrice, 10, clrRed);
            
            // 決済結果をログに出力
            if(result)
               Print("チケット番号 ", OrderTicket(), " を ", closePrice, " で決済しました");
            else
               Print("チケット番号 ", OrderTicket(), " の決済に失敗しました。エラー: ", GetLastError());
         }
      }
   }
}</code></pre>


<p>ポイントは、<strong>ループを後ろから回す（デクリメント）</strong>ことです。前から回すと、決済時にポジション番号がズレてしまうので注意しましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc8">例2：指定pips以上の利益が出たら利確するEA</span></h3>



<p>保有ポジションの含み益が一定のpips以上になったら、自動で利確する処理です。OrderClosePriceとOrderOpenPriceを組み合わせて、現在の損益pipsを計算しています。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 利確pipsの設定                                                     |
//+------------------------------------------------------------------+
input double TakeProfitPips = 30.0;  // 利確するpips数

//+------------------------------------------------------------------+
//| OnTick関数：ティックごとに利確判定を行う                             |
//+------------------------------------------------------------------+
void OnTick()
{
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 現在のチャートの通貨ペアのみ対象
         if(OrderSymbol() != Symbol()) continue;
         
         // 決済価格を取得（売りならAsk、買いならBidが自動で返る）
         double closePrice = OrderClosePrice();
         
         // エントリー価格を取得
         double openPrice = OrderOpenPrice();
         
         // 含み損益をpipsで計算
         double profitPips = 0;
         
         if(OrderType() == OP_BUY)
         {
            // 買いポジション：決済価格（Bid）- エントリー価格
            profitPips = (closePrice - openPrice) / Point / 10;
         }
         else if(OrderType() == OP_SELL)
         {
            // 売りポジション：エントリー価格 - 決済価格（Ask）
            profitPips = (openPrice - closePrice) / Point / 10;
         }
         
         // 設定したpips以上の利益が出たら決済
         if(profitPips >= TakeProfitPips)
         {
            bool result = OrderClose(OrderTicket(), OrderLots(), closePrice, 10, clrBlue);
            if(result)
               Print("利確決済！ 利益: ", profitPips, " pips");
         }
      }
   }
}</code></pre>


<p>OrderClosePriceが買い・売りに応じて正しい決済価格を返してくれるので、損益計算と決済の両方で活用できます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc9">例3：合計損益がマイナスになったら全決済する損切りEA</span></h3>



<p>複数ポジションの合計損失額が設定値を超えた場合に、全ポジションを一括で損切りする処理です。OrderClosePriceを使って各ポジションのリアルタイムな損益を確認しています。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 最大許容損失額の設定（口座通貨ベース）                               |
//+------------------------------------------------------------------+
input double MaxLossAmount = -10000;  // これ以上の損失で全決済（例：-10,000円）

//+------------------------------------------------------------------+
//| OnTick関数：ティックごとに合計損益をチェック                         |
//+------------------------------------------------------------------+
void OnTick()
{
   double totalProfit = 0;
   
   // 全ポジションの合計損益を計算
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         if(OrderSymbol() == Symbol())
         {
            // OrderProfitで現在の含み損益（口座通貨ベース）を取得
            totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
         }
      }
   }
   
   // 合計損失が許容額を超えたら全決済
   if(totalProfit <= MaxLossAmount)
   {
      Print("合計損失が ", totalProfit, " に達したため、全ポジションを決済します");
      
      for(int i = OrdersTotal() - 1; i >= 0; i--)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            if(OrderSymbol() == Symbol())
            {
               // OrderClosePriceで正しい決済価格を取得
               double closePrice = OrderClosePrice();
               
               bool result = OrderClose(OrderTicket(), OrderLots(), closePrice, 10, clrRed);
               if(result)
                  Print("損切り決済完了：チケット ", OrderTicket());
               else
                  Print("決済失敗：チケット ", OrderTicket(), " エラー: ", GetLastError());
            }
         }
      }
   }
}</code></pre>


<p>合計損益の計算にはOrderProfit関数を使い、決済の実行時にOrderClosePriceで正確な価格を取得しています。<strong>スワップや手数料も含めた判定</strong>にすることで、より実践的な損切りロジックになっています。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc10">例4：トレーリングストップ（利益を追従する決済）EA</span></h3>



<p>一定の利益が出たらストップロスを引き上げ、利益を追従しながら決済を狙うトレーリングストップの処理です。OrderClosePriceで現在の決済価格を取得し、ストップロスの更新判定に活用しています。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| トレーリングストップの設定                                          |
//+------------------------------------------------------------------+
input double TrailingStartPips = 20.0;  // トレーリング開始の利益pips
input double TrailingStopPips  = 10.0;  // ストップロスを何pips離すか

//+------------------------------------------------------------------+
//| OnTick関数：ティックごとにトレーリングストップを判定                  |
//+------------------------------------------------------------------+
void OnTick()
{
   // pipsをポイントに変換する倍率（5桁/3桁ブローカー対応）
   double pipPoint = Point * 10;
   
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 現在のチャートの通貨ペアのみ対象
         if(OrderSymbol() != Symbol()) continue;
         
         // OrderClosePriceで現在の決済価格を取得
         double closePrice = OrderClosePrice();
         double openPrice  = OrderOpenPrice();
         double currentSL  = OrderStopLoss();
         
         // --- 買いポジションのトレーリングストップ ---
         if(OrderType() == OP_BUY)
         {
            // 現在の含み益をpipsで計算
            double profitPips = (closePrice - openPrice) / pipPoint;
            
            // トレーリング開始条件を満たしているか
            if(profitPips >= TrailingStartPips)
            {
               // 新しいストップロス価格を計算
               double newSL = closePrice - TrailingStopPips * pipPoint;
               
               // 現在のSLより高い場合のみ更新（SLを引き上げる）
               if(newSL > currentSL || currentSL == 0)
               {
                  bool result = OrderModify(OrderTicket(), openPrice, 
                                            NormalizeDouble(newSL, Digits), 
                                            OrderTakeProfit(), 0, clrGreen);
                  if(result)
                     Print("トレーリングSL更新：チケット ", OrderTicket(), 
                           " 新SL=", NormalizeDouble(newSL, Digits));
               }
            }
         }
         // --- 売りポジションのトレーリングストップ ---
         else if(OrderType() == OP_SELL)
         {
            // 現在の含み益をpipsで計算
            double profitPips = (openPrice - closePrice) / pipPoint;
            
            // トレーリング開始条件を満たしているか
            if(profitPips >= TrailingStartPips)
            {
               // 新しいストップロス価格を計算
               double newSL = closePrice + TrailingStopPips * pipPoint;
               
               // 現在のSLより低い場合のみ更新（SLを引き下げる）
               if(newSL < currentSL || currentSL == 0)
               {
                  bool result = OrderModify(OrderTicket(), openPrice, 
                                            NormalizeDouble(newSL, Digits), 
                                            OrderTakeProfit(), 0, clrGreen);
                  if(result)
                     Print("トレーリングSL更新：チケット ", OrderTicket(), 
                           " 新SL=", NormalizeDouble(newSL, Digits));
               }
            }
         }
      }
   }
}</code></pre>


<p>OrderClosePriceで取得した決済価格を基準にして、<strong>「今決済したらいくらになるか」</strong>を把握しながらストップロスの位置を計算しています。買い・売りのどちらでも正しい価格が返るため、ロジックがシンプルに書けるのがメリットです。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc11">例5：指定時刻に全ポジションを自動決済するEA</span></h3>



<p>週末や経済指標発表前など、特定の時刻になったら保有中のポジションをすべて自動で決済する処理です。時間管理とOrderClosePriceを組み合わせた、実用的なリスク管理ロジックです。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| 自動決済時刻の設定                                                  |
//+------------------------------------------------------------------+
input int CloseHour   = 23;  // 決済する時（サーバー時間）
input int CloseMinute = 30;  // 決済する分

//+------------------------------------------------------------------+
//| OnTick関数：ティックごとに時刻を判定                                |
//+------------------------------------------------------------------+
void OnTick()
{
   // 現在のサーバー時間を取得
   int currentHour   = Hour();
   int currentMinute = Minute();
   
   // 指定時刻に達したかチェック
   if(currentHour == CloseHour && currentMinute == CloseMinute)
   {
      // 全ポジションを後ろからループして決済
      for(int i = OrdersTotal() - 1; i >= 0; i--)
      {
         if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         {
            // 現在のチャートの通貨ペアのみ対象
            if(OrderSymbol() != Symbol()) continue;
            
            // マジックナンバーで自分のEAのポジションだけ決済する場合
            // if(OrderMagicNumber() != MagicNumber) continue;
            
            // OrderClosePriceで決済価格を取得
            double closePrice = OrderClosePrice();
            
            // 現在の損益情報をログに記録
            double profit = OrderProfit() + OrderSwap() + OrderCommission();
            Print("時刻決済：チケット ", OrderTicket(), 
                  " 損益=", profit, " 決済価格=", closePrice);
            
            // ポジションを決済
            bool result = OrderClose(OrderTicket(), OrderLots(), closePrice, 15, clrYellow);
            
            if(!result)
            {
               // 決済失敗時はエラーコードを記録して再試行の目安にする
               int err = GetLastError();
               Print("時刻決済失敗：チケット ", OrderTicket(), 
                     " エラーコード=", err);
            }
         }
      }
   }
}</code></pre>


<p>週末持ち越しを避けたい場合は「金曜の23:30」などに設定すると便利です。<strong>マジックナンバーによるフィルタリング</strong>のコメント部分を有効にすれば、自分のEAが出したポジションだけを対象にすることもできます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc12">例6：ポジション情報をチャート上に表示するインジケーター</span></h3>



<p>保有中のポジションの決済価格・含み損益をチャート上にリアルタイム表示するインジケーターです。OrderClosePriceを使って各ポジションの現在の決済価格を取得し、一覧として視覚的に確認できます。</p>


<pre><code class="language-mql4">//+------------------------------------------------------------------+
//| ポジション情報表示インジケーター                                     |
//+------------------------------------------------------------------+
#property indicator_chart_window

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

//+------------------------------------------------------------------+
//| 終了処理：オブジェクトを削除                                        |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
{
   // 表示したオブジェクトをすべて削除
   ObjectsDeleteAll(0, "PosInfo_");
}

//+------------------------------------------------------------------+
//| メイン処理：ティックごとにポジション情報を更新                       |
//+------------------------------------------------------------------+
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[])
{
   // 前回の表示をクリア
   ObjectsDeleteAll(0, "PosInfo_");
   
   int displayLine = 0;  // 表示行カウンター
   
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 現在のチャートの通貨ペアのみ対象
         if(OrderSymbol() != Symbol()) continue;
         
         // OrderClosePriceで現在の決済価格を取得
         double closePrice = OrderClosePrice();
         double openPrice  = OrderOpenPrice();
         double profit     = OrderProfit() + OrderSwap() + OrderCommission();
         
         // ポジション種別の文字列を作成
         string typeStr = (OrderType() == OP_BUY) ? "BUY" : "SELL";
         
         // 含み損益のpipsを計算
         double pipPoint = Point * 10;
         double pips = 0;
         if(OrderType() == OP_BUY)
            pips = (closePrice - openPrice) / pipPoint;
         else
            pips = (openPrice - closePrice) / pipPoint;
         
         // 表示する文字列を組み立て
         string info = StringConcatenate(
            "#", OrderTicket(), " ", typeStr, 
            " | Lots:", DoubleToStr(OrderLots(), 2),
            " | Open:", DoubleToStr(openPrice, Digits),
            " | Close:", DoubleToStr(closePrice, Digits),
            " | ", DoubleToStr(pips, 1), "pips",
            " | ", DoubleToStr(profit, 0), "円");
         
         // オブジェクト名を作成
         string objName = "PosInfo_" + IntegerToString(displayLine);
         
         // チャート左上にテキストラベルとして表示
         ObjectCreate(0, objName, OBJ_LABEL, 0, 0, 0);
         ObjectSetInteger(0, objName, OBJPROP_CORNER, CORNER_LEFT_UPPER);
         ObjectSetInteger(0, objName, OBJPROP_XDISTANCE, 10);
         ObjectSetInteger(0, objName, OBJPROP_YDISTANCE, 20 + displayLine * 20);
         ObjectSetString(0, objName, OBJPROP_TEXT, info);
         ObjectSetInteger(0, objName, OBJPROP_FONTSIZE, 10);
         
         // 損益に応じて文字色を変更（プラスなら青、マイナスなら赤）
         color textColor = (profit >= 0) ? clrDodgerBlue : clrRed;
         ObjectSetInteger(0, objName, OBJPROP_COLOR, textColor);
         
         displayLine++;
      }
   }
   
   return(rates_total);
}</code></pre>


<p>OrderClosePriceで取得した決済価格をそのままチャート上に表示しているので、<strong>「今決済したらいくらで約定するか」</strong>をリアルタイムで確認できます。損益がプラスなら青、マイナスなら赤で表示されるため、視覚的にもわかりやすいインジケーターです。</p>



<p>　</p>



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



<p>OrderClosePrice関数は、選択したポジションの決済価格を返す関数です。買いポジションの場合は売値（Bid）、売りポジションの場合は買値（Ask）が自動的に返されるため、スプレッドを意識せずに正しい決済価格を取得できます。</p>



<p>主にOrderClose関数と組み合わせてポジションの決済処理に使いますが、含み損益の計算やトレーリングストップの判定など、幅広い場面で活用できる便利な関数です。</p>
<p>投稿 <a href="https://mql-programing.com/archives/870/ordercloseprice/">【MQL4関数】OrderClosePrice関数の使い方！決済価格の取得方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4関数】OrderModify 関数の使い方！ポジションの変更注文の出し方</title>
		<link>https://mql-programing.com/archives/839/ordermofidy/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 06 May 2021 05:03:56 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderModify]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=839</guid>

					<description><![CDATA[<p>OrderModify関数とは ポジションの損切や利確の価格を変更したいときはありませんか？ 損切りや利確はエントリーするとき（OrderSend関数）に設定するのが一般的ですが、エントリー後でも変更することができます。 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/839/ordermofidy/">【MQL4関数】OrderModify 関数の使い方！ポジションの変更注文の出し方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>自動でポジションの損切りや利確ラインを変更するにはどうしたらいいんだろう？</p>
</div></div>



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



<p>ポジションの損切や利確の価格を変更したいときはありませんか？</p>



<p>損切りや利確はエントリーするとき（<a href="https://mql-programing.com/ordersend/" title="【MQL4関数】OrderSend関数の使い方とトレード注文サンプル">OrderSend関数</a>）に設定するのが一般的ですが、エントリー後でも変更することができます。</p>



<p>自動売買でポジションの変更注文を出すには、<strong>OrderModify関数</strong>を使います。</p>



<p>　</p>



<p><strong><span class="marker-under-red">OrderModify関数は、ポジションの変更注文を出す関数です。</span></strong></p>



<p>変更できるポジションの種類は以下の通りです。</p>



<ul class="wp-block-list"><li><strong>エントリー後のポジション</strong></li><li><strong>予約ポジション</strong>（指値・逆指値）</li></ul>



<p>　</p>



<p>つまりどちらかのポジションであれば、変更注文を出すことができます。</p>



<p>しかし変更できる内容には制限があります。</p>



<p>もちろんロット数や取得価格を変更することはできません。</p>



<p>　</p>



<p>変更できる内容は以下の４つです。</p>



<ul class="wp-block-list"><li><strong>予約ポジションの注文価格</strong></li><li><strong>損切り価格</strong></li><li><strong>利確価格</strong></li><li><strong>予約ポジションの有効期限</strong></li></ul>



<p>　</p>



<p>特に、<strong><span class="marker-under-red">損切り価格や利確価格を変更するとき</span></strong>に、OrderModify関数がよく使われます。</p>



<p>少し上級者向けの関数ですが、OrderModify関数の使い所は多いので、覚えてしまいましょう。</p>



<p>　</p>



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



<p>OrderModify関数の使い方は、基本的な関数と同じです。</p>



<p>関数をマスターしていない方はこちらの記事が参考になります。</p>



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

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



<p>　</p>



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



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



<p>簡単のために引数を省略しています。</p>



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



<p>　</p>



<p>OrderModify関数の<strong><span class="marker-under-red">返り値は bool型で、引数は６つあります。</span></strong></p>



<p>まずは返り値から見ていきましょう。</p>



<p>　</p>



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



<p>OrderModify関数の返り値は bool型です。</p>



<p>「<span class="bold-red">true</span>」や「<span class="bold-blue">false</span>」という値が返ってきます。</p>



<p>数値にすると「１」や「０」です。</p>



<p>true や false が返ってくる条件は以下の通りです。</p>



<ul class="wp-block-list"><li><strong><span class="bold-red">true</span>：変更注文が正常に完了したとき</strong></li><li><strong><span class="bold-blue">false</span>：変更注文が失敗したとき</strong></li></ul>



<p>　</p>



<p>もし、false が返ってきた場合、変更注文が失敗しているため、再度 OrderModify関数を実行する必要があります。</p>



<p>ですが、<strong><span class="marker-under-red">注文の９９％は正常に完了する</span></strong>ため、そこまで気にしなくても大丈夫です。</p>



<p>もし変更注文が失敗していた場合は、手動で変更しましょう。</p>



<p>　</p>



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



<p>OrderModify関数の引数は６つあります。</p>



<p>引数が多いので、一つ一つゆっくり見ていきましょう。</p>



<p>　</p>



<p>まずは一覧で確認します。</p>



<figure class="wp-block-table alignwide"><table><tbody><tr><td><strong>番号</strong></td><td><strong>データ型</strong></td><td><strong>引数名</strong></td><td><strong>内容</strong></td></tr><tr><td>①</td><td>int</td><td>ticket</td><td>変更したいポジションのチケット番号</td></tr><tr><td>②</td><td>double</td><td>price</td><td>変更後の価格</td></tr><tr><td>③</td><td>double</td><td>stoploss</td><td>変更後の損切り価格</td></tr><tr><td>④</td><td>double</td><td>takeprofit</td><td>変更後の利確価格</td></tr><tr><td>⑤</td><td>datetime</td><td>expiration</td><td>変更後の有効期限</td></tr><tr><td>⑥</td><td>color</td><td>arrow_color</td><td>チャート上の矢印の色</td></tr></tbody></table></figure>



<p>　</p>



<p>それぞれ詳しく解説しますので、一緒に OrderModify関数を作っていきましょう。</p>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc6">① ticket</span></h4>



<p><strong>ticket には変更したいポジションのチケット番号を入力します。</strong></p>



<p>ポジションのチケット番号を直接入力しても良いですが、<a href="https://mql-programing.com/orderticket/" title="【MQL4関数】チケット番号の取得方法（OrderTicket関数）">OrderTicket関数</a>という便利な関数があるので、それを使うと良いでしょう。</p>



<p>OrderTicket関数を実行する前に、<a href="https://mql-programing.com/orderselect/" title="【MQL4関数】保有ポジションの選択（OrderSelect関数）のやり方">OrderSelect関数</a>でポジションを選択しておく必要がありますので、注意してください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), ②, ③, ④, ⑤, ⑥)</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc7">② price</span></h4>



<p><strong>price には変更後の取得価格を入力します。</strong></p>



<p>こちらは予約ポジション（指値注文、逆指値注文）の場合のみ変更可能です。</p>



<p><strong><span class="marker-under-red">エントリー後のポジションの場合は、取得価格を変更できないので注意しましょう。</span></strong></p>



<p>エントリー後のポジションを指定する場合は、エントリーしている価格を入力します。</p>



<p>ここでも便利な関数として、OrderOpenPrice関数というものがありますので、利用してみてください。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), ③, ④, ⑤, ⑥)</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc8">③ stoploss</span></h4>



<p><strong>stoploss には、変更後の損切り価格を入力します。</strong></p>



<p>ここで注意していただきたいのは、stoplossの価格は、現在の価格より下に設定する事です。</p>



<p>もし現在の価格より、有利な価格を入力すると、注文が通りません。</p>



<p>エラーにはなりませんが、「変更注文を出したのに、処理されてない！」ということになる可能性もあるので、stoplossの価格設定には注意しましょう。</p>



<p>　</p>



<p>stoplossで設定できるのは以下の３通りです。</p>



<ul class="wp-block-list"><li>0</li><li>損切り価格</li><li>OrderStopLoss関数</li></ul>



<p>　</p>



<p>0の場合は、損切りなしに設定します。</p>



<p>損切り価格を入力した場合は、その価格に損切りが入ります。</p>



<p>OrderStopLoss関数を利用した場合は、変更前の損切り価格が設定されます。</p>



<p>もし損切り価格を変更せずに、他の項目を変更したい場合は、OrderStopLoss関数を使うと良いでしょう。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), ④, ⑤, ⑥)</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc9">④ takeprofit</span></h4>



<p><strong>takeprofitには変更後の利確価格を入力します。</strong></p>



<p>stoplossの入力と同じように、現在の価格より上でなければ注文が通りません。</p>



<p>　</p>



<p>takeprofitで設定できるのは以下の３通りです。</p>



<ul class="wp-block-list"><li>0</li><li>利確価格</li><li>OrderTakeProfit関数</li></ul>



<p>　</p>



<p>0の場合は、利確なしに設定します。</p>



<p>利確価格を入力した場合は、その価格に利確が入ります。</p>



<p>OrderTakeProfit関数を利用した場合は、変更前の利確価格が設定されます。</p>



<p>他の項目を変更する場合は、OrderTakeProfit関数を利用すると良いでしょう。</p>



<p>ここでは、利確価格を変更するため、以下のように入力します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 110.000, ⑤, ⑥)</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc10">⑤ expiration</span></h4>



<p><strong>expirationには、ポジションの有効期限を入力します。</strong></p>



<p>この引数はほとんど使わないので、読み飛ばしていただいても大丈夫です。</p>



<p>expirationは予約ポジションのみ設定が可能です。</p>



<p>エントリー後のポジションには使えませんので、ご注意ください。</p>



<p>　</p>



<p>expirationはdatetime型の変数なので、datetime型の形式に合わせないとエラーが出ます。</p>



<p>例えば、以下のような形式です。2021年9月22日00時00分00秒まで有効という設定です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>datetime expiration = D'2021.09.22 00:00:00';</code></pre></div>



<p>　</p>



<p>このように少し厄介な引数なので、基本的に OrderExpiration関数を使用すればOKです。</p>



<p>OrderExpiration関数は、変更前の有効期限を返す関数です。</p>



<p>そのため、有効期限を変更しない場合は、この関数を使用すれば問題ありません。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 110.000, OrderExpiration(), ⑥)</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc11">⑥ arrow_color</span></h4>



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



<p>こちらは、変更注文を出した位置に印がつくのですが、その色を設定します。</p>



<p>色をつけなくても良い場合は、「０」または、clrNONEと入力してください。</p>



<p>透明になりますので、チャート分析の邪魔にならないかと思います。</p>



<p>もし色をつけたい場合は、「clr○○」という特殊な変数がありますので、そちらを利用すると良いでしょう。</p>



<p>私は、clrRedが好きなので、clrRedを設定しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 110.000, OrderExpiration(), clrRed)</code></pre></div>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc12">OrderModify関数の引数のまとめ</span></h3>



<p>ここまでOrderModify関数の引数を、ざっと見てきました。</p>



<p>stoplossやtakeprofitの価格設定には気をつけるようにしてください。</p>



<p>また、両方同時に変更することもできるので、両方変更したい場合は、価格を入力すると変更できます。</p>



<p>　</p>



<p>変更する前の情報を取得するには、以下の関数が便利です。</p>



<ul class="wp-block-list"><li>OrderStopLoss関数</li><li>OrderTakeProfit関数</li><li>OrderExpiration関数</li></ul>



<p>　</p>



<p>以下のプログラムはOrderModify関数の完成例です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool orderModify = OrderModify(OrderTicket(), OrderOpenPrice(), OrderStopLoss(), 110.000, OrderExpiration(), clrRed)</code></pre></div>



<p>これで基本的な書き方はマスターできたと思いますので、具体的な使い方も見ていきましょう。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc13">OrderModify関数の実用的なプログラム例</span></h2>



<p>ここからは、実際のEAで使える実用的なプログラム例を紹介していきます。</p>



<p>OrderModify関数の基本的な書き方がわかったら、ぜひこれらの応用例も参考にしてみてください。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc14">例１：トレーリングストップEA</span></h3>



<p>最も実用的な使い方が<strong>トレーリングストップ</strong>です。価格が有利な方向に動いたら、損切りラインを自動で引き上げ（引き下げ）て利益を確保する手法です。</p>



<p>以下のEAは、保有中の全ポジションに対してトレーリングストップを適用します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| トレーリングストップEA                                              |
//| 価格が有利に動いたら損切りラインを自動で追従させる                      |
//+------------------------------------------------------------------+
input int TrailingStopPips = 30;  // トレーリングストップ幅（pips）
input int TrailingStartPips = 20; // トレーリング開始条件（pips利益が出てから）

void OnTick()
{
   // ポイント値を取得（5桁ブローカー対応）
   double pip = Point;
   if(Digits == 3 || Digits == 5)
      pip = Point * 10;

   // 保有中の全ポジションをループ
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 自分のEAの通貨ペアが一致するか確認
      if(OrderSymbol() != Symbol())
         continue;

      // 買いポジションのトレーリングストップ
      if(OrderType() == OP_BUY)
      {
         // 現在の利益がトレーリング開始条件を超えているか
         double buyProfit = Bid - OrderOpenPrice();
         if(buyProfit >= TrailingStartPips * pip)
         {
            // 新しい損切り価格を計算
            double newSL = Bid - TrailingStopPips * pip;
            // 現在のSLより有利（高い）場合のみ変更
            if(newSL > OrderStopLoss() || OrderStopLoss() == 0)
            {
               bool result = OrderModify(
                  OrderTicket(),       // チケット番号
                  OrderOpenPrice(),    // 取得価格はそのまま
                  NormalizeDouble(newSL, Digits), // 新しい損切り価格
                  OrderTakeProfit(),   // 利確はそのまま
                  OrderExpiration(),   // 有効期限はそのまま
                  clrBlue             // 矢印の色（青）
               );
               if(result)
                  Print("買いトレーリングストップ更新: SL=", newSL);
               else
                  Print("トレーリングストップ更新失敗: エラー=", GetLastError());
            }
         }
      }

      // 売りポジションのトレーリングストップ
      if(OrderType() == OP_SELL)
      {
         // 現在の利益がトレーリング開始条件を超えているか
         double sellProfit = OrderOpenPrice() - Ask;
         if(sellProfit >= TrailingStartPips * pip)
         {
            // 新しい損切り価格を計算
            double newSL = Ask + TrailingStopPips * pip;
            // 現在のSLより有利（低い）場合のみ変更
            if(newSL < OrderStopLoss() || OrderStopLoss() == 0)
            {
               bool result = OrderModify(
                  OrderTicket(),       // チケット番号
                  OrderOpenPrice(),    // 取得価格はそのまま
                  NormalizeDouble(newSL, Digits), // 新しい損切り価格
                  OrderTakeProfit(),   // 利確はそのまま
                  OrderExpiration(),   // 有効期限はそのまま
                  clrRed              // 矢印の色（赤）
               );
               if(result)
                  Print("売りトレーリングストップ更新: SL=", newSL);
               else
                  Print("トレーリングストップ更新失敗: エラー=", GetLastError());
            }
         }
      }
   }
}</code></pre></div>



<p>　</p>



<p>このEAのポイントは以下の通りです。</p>



<ul class="wp-block-list"><li><strong>TrailingStartPips</strong>で指定したpips分の利益が出てからトレーリングを開始します</li><li><strong>TrailingStopPips</strong>で指定したpips幅で損切りラインを追従させます</li><li>現在の損切りラインより有利な場合のみ変更するので、損切りが不利な方向に動くことはありません</li><li><strong>NormalizeDouble関数</strong>で価格を正規化しているため、小数点エラーを防げます</li></ul>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc15">例２：建値ストップ（ブレイクイーブン）</span></h3>



<p>一定の利益が出たら、損切りラインをエントリー価格に移動させる<strong>建値ストップ</strong>も非常に人気があります。</p>



<p>これにより、最低でも損失ゼロ（スプレッド分を除く）を保証できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 建値ストップ（ブレイクイーブン）の例                                  |
//| 一定利益が出たらSLをエントリー価格に移動                              |
//+------------------------------------------------------------------+
input int BreakevenPips = 20; // 建値ストップ発動条件（pips）

void SetBreakeven()
{
   double pip = Point;
   if(Digits == 3 || Digits == 5)
      pip = Point * 10;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      if(OrderSymbol() != Symbol())
         continue;

      // 買いポジション
      if(OrderType() == OP_BUY)
      {
         // 条件を満たし、かつSLがまだエントリー価格以下の場合
         if(Bid - OrderOpenPrice() >= BreakevenPips * pip)
         {
            if(OrderStopLoss() < OrderOpenPrice() || OrderStopLoss() == 0)
            {
               bool result = OrderModify(
                  OrderTicket(),
                  OrderOpenPrice(),
                  OrderOpenPrice(),    // SLをエントリー価格に設定
                  OrderTakeProfit(),
                  OrderExpiration(),
                  clrGreen
               );
               if(result)
                  Print("建値ストップ設定完了: チケット=", OrderTicket());
            }
         }
      }

      // 売りポジション
      if(OrderType() == OP_SELL)
      {
         if(OrderOpenPrice() - Ask >= BreakevenPips * pip)
         {
            if(OrderStopLoss() > OrderOpenPrice() || OrderStopLoss() == 0)
            {
               bool result = OrderModify(
                  OrderTicket(),
                  OrderOpenPrice(),
                  OrderOpenPrice(),    // SLをエントリー価格に設定
                  OrderTakeProfit(),
                  OrderExpiration(),
                  clrGreen
               );
               if(result)
                  Print("建値ストップ設定完了: チケット=", OrderTicket());
            }
         }
      }
   }
}</code></pre></div>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc16">例３：利確価格を段階的に変更する</span></h3>



<p>利確価格を状況に応じて変更したい場合の例です。</p>



<p>例えば、エントリー後に相場の勢いが強い場合、利確ラインをさらに遠くに設定し直すことで、利益の最大化を狙えます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 利確価格を段階的に変更する例                                        |
//+------------------------------------------------------------------+
input int InitialTPPips = 50;   // 初期利確幅（pips）
input int ExtendedTPPips = 100; // 拡張利確幅（pips）
input int ExtendTriggerPips = 30; // 拡張トリガー（pips利益）

void AdjustTakeProfit()
{
   double pip = Point;
   if(Digits == 3 || Digits == 5)
      pip = Point * 10;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      if(OrderSymbol() != Symbol())
         continue;

      // 買いポジションの利確拡張
      if(OrderType() == OP_BUY)
      {
         double currentProfit = Bid - OrderOpenPrice();
         double initialTP = OrderOpenPrice() + InitialTPPips * pip;
         double extendedTP = OrderOpenPrice() + ExtendedTPPips * pip;

         // トリガー条件を満たし、TPがまだ初期値の場合
         if(currentProfit >= ExtendTriggerPips * pip)
         {
            if(NormalizeDouble(OrderTakeProfit(), Digits) == NormalizeDouble(initialTP, Digits))
            {
               bool result = OrderModify(
                  OrderTicket(),
                  OrderOpenPrice(),
                  OrderStopLoss(),
                  NormalizeDouble(extendedTP, Digits), // 利確を拡張
                  OrderExpiration(),
                  clrYellow
               );
               if(result)
                  Print("利確拡張完了: 新TP=", extendedTP);
            }
         }
      }

      // 売りポジションの利確拡張
      if(OrderType() == OP_SELL)
      {
         double currentProfit = OrderOpenPrice() - Ask;
         double initialTP = OrderOpenPrice() - InitialTPPips * pip;
         double extendedTP = OrderOpenPrice() - ExtendedTPPips * pip;

         if(currentProfit >= ExtendTriggerPips * pip)
         {
            if(NormalizeDouble(OrderTakeProfit(), Digits) == NormalizeDouble(initialTP, Digits))
            {
               bool result = OrderModify(
                  OrderTicket(),
                  OrderOpenPrice(),
                  OrderStopLoss(),
                  NormalizeDouble(extendedTP, Digits), // 利確を拡張
                  OrderExpiration(),
                  clrYellow
               );
               if(result)
                  Print("利確拡張完了: 新TP=", extendedTP);
            }
         }
      }
   }
}</code></pre></div>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc17">OrderModify関数を使うときの注意点</span></h2>



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



<p>　</p>



<h3 class="wp-block-heading"><span id="toc18">注意点１：OrderSelect関数を事前に実行する</span></h3>



<p>OrderModify関数を使う前に、必ず<strong>OrderSelect関数</strong>でポジションを選択しておきましょう。</p>



<p>OrderTicket関数やOrderOpenPrice関数などは、OrderSelect関数で選択されたポジションの情報を返すため、選択を忘れるとエラーの原因になります。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc19">注意点２：NormalizeDouble関数で価格を正規化する</span></h3>



<p>価格を計算で求める場合は、<strong>NormalizeDouble関数</strong>で小数点以下の桁数を揃えましょう。</p>



<p>桁数が合わないと注文が通らないことがあります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>// 正しい例
double newSL = NormalizeDouble(Bid - 30 * Point, Digits);

// 間違いやすい例（正規化なし）
double newSL = Bid - 30 * Point; // 桁数がずれる可能性あり</code></pre></div>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc20">注意点３：変更内容がない場合はエラーになる</span></h3>



<p>OrderModify関数は、<strong><span class="marker-under-red">何も変更がない状態で実行するとエラー（エラーコード1）が発生します。</span></strong></p>



<p>損切り価格が同じなのに変更注文を出すと失敗するため、変更前と変更後の値が異なることを確認してから実行しましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc21">注意点４：ストップレベルに注意する</span></h3>



<p>ブローカーによっては、現在価格から一定距離以内にSL/TPを設定できない<strong>ストップレベル</strong>が設けられています。</p>



<p>ストップレベルは<strong>MarketInfo関数</strong>で取得できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>// ストップレベルの取得
double stopLevel = MarketInfo(Symbol(), MODE_STOPLEVEL) * Point;
Print("ストップレベル: ", stopLevel);</code></pre></div>



<p>　</p>



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



<p>今回は、OrderModify関数の使い方を解説しました。</p>



<p>　</p>



<p>OrderModify関数を使えば、エントリー後のポジションの損切りや利確を自動で変更できます。</p>



<p>特に<strong>トレーリングストップ</strong>や<strong>建値ストップ</strong>は実際のEAでも非常によく使われるテクニックです。</p>



<p>　</p>



<p>大切なポイントをおさらいしましょう。</p>



<ul class="wp-block-list"><li>OrderModify関数の<strong>返り値はbool型</strong>（true：成功、false：失敗）</li><li><strong>引数は６つ</strong>（チケット番号、価格、損切り、利確、有効期限、矢印の色）</li><li>変更しない項目には、<strong>OrderStopLoss関数やOrderTakeProfit関数</strong>で現在の値を設定する</li><li>事前に<strong>OrderSelect関数</strong>でポジションを選択しておくことを忘れずに</li><li>価格は<strong>NormalizeDouble関数</strong>で正規化する</li></ul>



<p>　</p>



<p>OrderModify関数をマスターすれば、より柔軟で高度な自動売買プログラムを作成できるようになります。</p>



<p>ぜひ今回の記事を参考に、OrderModify関数を使ったEA開発に挑戦してみてください。</p>
<p>投稿 <a href="https://mql-programing.com/archives/839/ordermofidy/">【MQL4関数】OrderModify 関数の使い方！ポジションの変更注文の出し方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4関数】OrderLots関数の使い方！ポジションのロット数の取得方法</title>
		<link>https://mql-programing.com/archives/871/orderlots/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 06 May 2021 05:03:35 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderLots]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=871</guid>

					<description><![CDATA[<p>OrderLots関数とは OrderLots関数とは、選択したポジションのロット数を取得する関数です。 OrderLots関数を実行する前に、ポジションを選択する必要があるので、OrderSelect関数と組み合わせて [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/871/orderlots/">【MQL4関数】OrderLots関数の使い方！ポジションのロット数の取得方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>ポジションを決済したいとき、ロット数を取得しないとね！</p>
</div></div>



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



<p><strong>OrderLots関数とは、選択したポジションのロット数を取得する関数です。</strong></p>



<p>OrderLots関数を実行する前に、ポジションを選択する必要があるので、<a href="https://mql-programing.com/orderselect/">OrderSelect関数</a>と組み合わせて使います。</p>



<p>使う場面は限られていますが、ポジションを決済するときに使う重要な関数なので、覚えておきましょう。</p>



<p>　</p>



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



<p>OrderLots関数の使い方は、基本的な関数と同じです。</p>



<p>関数をマスターしていない方はこちらの記事が参考になります。</p>



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

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



<p>　</p>



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



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>double lots = OrderLots();</code></pre></div>



<p>　</p>



<p>このように返り値は double型で、引数は必要ありません。</p>



<p>まずは返り値から見ていきましょう。</p>



<p>　</p>



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



<p><strong>OrderLots関数の返り値は double型です。</strong></p>



<p>選択したポジションのロット数が返ってきます。</p>



<p>注意することは１つです。</p>



<p><strong><span class="marker-under-red">ロット数は、全てのポジションの合計値ではなく、１つのポジションのロット数が返ってきます。</span></strong></p>



<p>そのため、全てのポジションの合計値を使いたい場合は、<a href="https://mql-programing.com/repeat-for-while/" title="【MQLプログラミング基礎】繰り返し文を書いてみよう！プログラム例あり">for文</a>で OrderLots関数の返り血を合計すると良いでしょう。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc5">OrderLots関数の具体的な使い方</span></h2>



<p>それでは、OrderLots関数の具体的な使い方を見ていきましょう。</p>



<p>OrderLots関数は、主に決済注文（<a href="https://mql-programing.com/orderclose/" title="【MQL4関数】決済注文の出し方（OrderClose関数）とサンプルプログラム">OrderClose関数</a>）を出すときに使用します。</p>



<p>具体的には以下のようなプログラムを使います。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つ選択
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
   {

      //ロット数を取得
      double lots = OrderLots();

      //ポジションを決済
      bool orderClose = OrderClose( OrderTicket(), lots, OrderClosePrice(), 10, clrNONE);

   }</code></pre></div>



<p>　</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://mql-programing.com/product/file_orderclose/" class="btn btn-m btn-circle" target="_self"><span class="fz-20px">サンプルプログラムはこちらから</span></a></div>



<p>　</p>



<p>初めに、<a href="https://mql-programing.com/orderselect/" title="【MQL4関数】保有ポジションの選択（OrderSelect関数）のやり方">OrderSelect関数</a>で決済したいポジションを選択します。</p>



<p>その後にOrderLots関数で、ポジションのロット数を取得し、OrderClose関数の引数に書いています。</p>



<p>このように、決済注文（OrderClose関数）を出すときに便利な関数なので、覚えておくと良いでしょう。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc6">OrderLots関数の実用的なプログラム例</span></h2>



<p>ここからは、OrderLots関数を使った実用的なプログラム例を紹介します。実際のEA開発でよく使うパターンばかりなので、ぜひ参考にしてください。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc7">例1：全ポジションの合計ロット数を計算する</span></h3>



<p>ナンピンEAやマーチンゲールEAでは、保有中の全ポジションの合計ロット数を把握することが重要です。以下のプログラムでは、現在の通貨ペアの合計ロット数を計算しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-mql4" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 現在の通貨ペアの合計ロット数を計算する関数                         |
//+------------------------------------------------------------------+
double GetTotalLots(int magicNumber)
  {
   double totalLots = 0.0; // 合計ロット数を格納する変数

   // 全ポジションをループで確認
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      // ポジションを選択
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         // 通貨ペアとマジックナンバーが一致するか確認
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == magicNumber)
           {
            // OrderLots関数でロット数を取得し、合計に加算
            totalLots += OrderLots();
           }
        }
     }

   return totalLots; // 合計ロット数を返す
  }

//+------------------------------------------------------------------+
//| 使用例：OnTick内で合計ロット数を確認                              |
//+------------------------------------------------------------------+
void OnTick()
  {
   int myMagic = 12345;

   // 合計ロット数を取得
   double total = GetTotalLots(myMagic);

   // 合計ロット数が上限を超えていたら新規注文を出さない
   double maxLots = 1.0; // 最大合計ロット数
   if(total >= maxLots)
     {
      Comment("合計ロット数が上限に達しています: ", DoubleToString(total, 2), " lots");
      return; // 新規注文を行わない
     }

   // ここに通常のエントリーロジックを記述
   Comment("現在の合計ロット数: ", DoubleToString(total, 2), " lots");
  }</code></pre></div>



<p>このように、for文でOrderLots関数の戻り値を合計することで、リスク管理に役立てることができます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc8">例2：全ポジションを一括決済するEA</span></h3>



<p>複数のポジションをまとめて決済する場面は非常に多いです。以下のプログラムでは、自分のEAが出した全ポジションをOrderLots関数で取得したロット数を使って一括決済しています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-mql4" data-lang="MQL4"><code>#define MAGIC_NUMBER 12345 // マジックナンバーの定義

//+------------------------------------------------------------------+
//| 全ポジションを一括決済する関数                                     |
//+------------------------------------------------------------------+
void CloseAllPositions()
  {
   // ポジション数が0になるまで繰り返す（逆順ループ）
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      // ポジションを選択できるか確認
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 自分のEAのポジションかつ、現在の通貨ペアか確認
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC_NUMBER)
         continue;

      // OrderLots関数でロット数を取得
      double lots = OrderLots();

      // 注文タイプに応じて決済価格を設定
      double closePrice = 0;
      if(OrderType() == OP_BUY)
         closePrice = Bid;  // 買いポジションはBidで決済
      else if(OrderType() == OP_SELL)
         closePrice = Ask;  // 売りポジションはAskで決済
      else
         continue; // 指値・逆指値注文はスキップ

      // ポジションを決済（取得したロット数を使用）
      bool result = OrderClose(OrderTicket(), lots, closePrice, 10, clrRed);

      // 決済結果をログに出力
      if(result)
         Print("決済成功 チケット:", OrderTicket(), " ロット:", DoubleToString(lots, 2));
      else
         Print("決済失敗 チケット:", OrderTicket(), " エラー:", GetLastError());
     }
  }

//+------------------------------------------------------------------+
//| OnTick - 利益が一定額を超えたら全決済する例                       |
//+------------------------------------------------------------------+
void OnTick()
  {
   double totalProfit = 0.0;

   // 全ポジションの損益を合計
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
        {
         if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC_NUMBER)
           {
            totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
           }
        }
     }

   // 利益が10,000円を超えたら全決済
   if(totalProfit >= 10000)
     {
      Print("利益目標達成！全ポジション決済開始 利益:", DoubleToString(totalProfit, 0), "円");
      CloseAllPositions();
     }

   Comment("現在の合計損益: ", DoubleToString(totalProfit, 0), "円");
  }</code></pre></div>



<p>一括決済は、利益確定や損切りの自動化で非常によく使うパターンです。OrderLots関数でロット数を正しく取得できないと決済が失敗するので、必ずセットで覚えておきましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc9">例3：ポジションの半分だけ部分決済するEA</span></h3>



<p>利益が出たポジションの半分だけを決済して利益を確保し、残りのポジションで利益を伸ばす「部分決済」は、裁量トレーダーにも人気のテクニックです。OrderLots関数で取得したロット数を半分にすることで実現できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-mql4" data-lang="MQL4"><code>#define MAGIC_NUMBER 12345 // マジックナンバー
input double PartialCloseProfit = 50.0; // 部分決済を行う利益pips

//+------------------------------------------------------------------+
//| ポジションの半分を部分決済する関数                                 |
//+------------------------------------------------------------------+
bool PartialClose(int ticket)
  {
   // チケット番号でポジションを選択
   if(!OrderSelect(ticket, SELECT_BY_TICKET))
     {
      Print("ポジション選択失敗 チケット:", ticket);
      return false;
     }

   // OrderLots関数で現在のロット数を取得
   double currentLots = OrderLots();

   // 半分のロット数を計算（最小ロット数以上になるよう調整）
   double halfLots = NormalizeDouble(currentLots / 2.0, 2);
   double minLot   = MarketInfo(Symbol(), MODE_MINLOT); // 最小ロット数を取得

   // 半分のロット数が最小ロット未満なら部分決済できない
   if(halfLots < minLot)
     {
      Print("ロット数が小さすぎるため部分決済できません。現在:", 
            DoubleToString(currentLots, 2), " 半分:", DoubleToString(halfLots, 2));
      return false;
     }

   // 決済価格を注文タイプに応じて設定
   double closePrice = 0;
   if(OrderType() == OP_BUY)
      closePrice = MarketInfo(Symbol(), MODE_BID);
   else if(OrderType() == OP_SELL)
      closePrice = MarketInfo(Symbol(), MODE_ASK);
   else
      return false;

   // 半分のロット数だけ決済を実行
   bool result = OrderClose(ticket, halfLots, closePrice, 10, clrBlue);

   if(result)
      Print("部分決済成功 チケット:", ticket, 
            " 決済ロット:", DoubleToString(halfLots, 2),
            " 残りロット:", DoubleToString(currentLots - halfLots, 2));
   else
      Print("部分決済失敗 チケット:", ticket, " エラー:", GetLastError());

   return result;
  }

//+------------------------------------------------------------------+
//| OnTick - 利益が一定pipsを超えたら半分決済                         |
//+------------------------------------------------------------------+
void OnTick()
  {
   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 自分のEAかつ現在の通貨ペアのポジションか確認
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC_NUMBER)
         continue;

      // 現在の利益pipsを計算
      double profitPips = 0;
      if(OrderType() == OP_BUY)
         profitPips = (Bid - OrderOpenPrice()) / Point / 10;
      else if(OrderType() == OP_SELL)
         profitPips = (OrderOpenPrice() - Ask) / Point / 10;

      // OrderLots関数でロット数を確認し、初期ロットから減っていなければ部分決済
      double initialLot = 0.10; // 初期エントリーロット数
      double currentLots = OrderLots();

      // 利益が目標に達し、かつまだ部分決済していない場合
      if(profitPips >= PartialCloseProfit && currentLots >= initialLot)
        {
         PartialClose(OrderTicket());
        }
     }
  }</code></pre></div>



<p>部分決済では、OrderLots関数で取得したロット数を元に「半分のロット数」を計算しています。ブローカーの最小ロット数を下回らないようチェックすることがポイントです。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc10">例4：ポジション情報をチャート上に一覧表示するインジケーター</span></h3>



<p>デバッグや運用監視に便利な、保有中のポジション情報をチャート上に表示するインジケーターです。OrderLots関数を使ってロット数を取得し、各ポジションの詳細を一覧で確認できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-mql4" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| ポジション情報一覧表示インジケーター                               |
//+------------------------------------------------------------------+
#property indicator_chart_window // チャートウィンドウに表示

//+------------------------------------------------------------------+
//| カスタムインジケーター初期化関数                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
   // 表示更新用のタイマーを1秒ごとに設定
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
  }

//+------------------------------------------------------------------+
//| カスタムインジケーター終了処理                                     |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
   // チャートのコメントをクリア
   Comment("");
   EventKillTimer();
  }

//+------------------------------------------------------------------+
//| タイマーイベントで定期的に情報を更新                               |
//+------------------------------------------------------------------+
void OnTimer()
  {
   DisplayPositionInfo();
  }

//+------------------------------------------------------------------+
//| メインの計算関数（インジケーター必須）                             |
//+------------------------------------------------------------------+
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 DisplayPositionInfo()
  {
   string info = "===== ポジション情報一覧 =====\n"; // 表示用文字列
   double totalLots   = 0.0; // 合計ロット数
   double totalProfit = 0.0; // 合計損益
   int    posCount    = 0;   // ポジション数カウンター

   // 全ポジションをループ
   for(int i = 0; i < OrdersTotal(); i++)
     {
      // ポジションを選択
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 現在の通貨ペアのポジションのみ対象
      if(OrderSymbol() != Symbol())
         continue;

      // 成行注文（BUYまたはSELL）のみ対象
      if(OrderType() != OP_BUY &#038;&#038; OrderType() != OP_SELL)
         continue;

      posCount++; // ポジション数をカウント

      // OrderLots関数でロット数を取得
      double lots   = OrderLots();
      double profit = OrderProfit() + OrderSwap() + OrderCommission();

      // 注文タイプを文字列に変換
      string typeStr = (OrderType() == OP_BUY) ? "BUY" : "SELL";

      // 各ポジションの情報を1行ずつ追加
      info += StringFormat("#%d | %s | %.2f lots | 建値:%.5f | 損益:%.0f円 | Magic:%d\n",
                           OrderTicket(),           // チケット番号
                           typeStr,                  // 売買方向
                           lots,                     // ロット数（OrderLots関数）
                           OrderOpenPrice(),         // エントリー価格
                           profit,                   // 損益
                           OrderMagicNumber());      // マジックナンバー

      // 合計値を加算
      totalLots   += lots;
      totalProfit += profit;
     }

   // 合計情報を追加
   info += "==============================\n";
   info += StringFormat("ポジション数: %d\n", posCount);
   info += StringFormat("合計ロット数: %.2f lots\n", totalLots);
   info += StringFormat("合計損益: %.0f円\n", totalProfit);

   // チャートに表示
   Comment(info);
  }</code></pre></div>



<p>このインジケーターをチャートにセットすると、保有中の全ポジションのロット数・損益・チケット番号などがリアルタイムで一覧表示されます。複数のEAを同時に稼働させているときの状況把握に非常に役立ちます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc11">例5：ナンピンEAで前回ロットの倍でエントリーする</span></h3>



<p>マーチンゲール戦略のナンピンEAでは、前回のポジションのロット数を取得して、次のエントリーを倍のロット数で行います。OrderLots関数を使って最新ポジションのロット数を確認する実用的なパターンです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-mql4" data-lang="MQL4"><code>#define MAGIC_NUMBER 99999 // マジックナンバー
input double BaseLot       = 0.01; // 基本ロット数
input double LotMultiplier = 2.0;  // ロット倍率（マーチンゲール係数）
input double MaxLot        = 1.0;  // 最大ロット数（安全上限）
input int    NanpinPips    = 30;   // ナンピン間隔（pips）

//+------------------------------------------------------------------+
//| 最新ポジションのロット数を取得する関数                             |
//+------------------------------------------------------------------+
double GetLastPositionLots()
  {
   datetime latestTime = 0; // 最新のオープン時間を保持
   double   lastLots   = 0; // 最新ポジションのロット数

   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 自分のEAかつ現在の通貨ペアか確認
      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC_NUMBER)
         continue;

      // 成行注文のみ対象
      if(OrderType() != OP_BUY && OrderType() != OP_SELL)
         continue;

      // より新しいポジションを見つけたら更新
      if(OrderOpenTime() > latestTime)
        {
         latestTime = OrderOpenTime();
         // OrderLots関数で最新ポジションのロット数を取得
         lastLots = OrderLots();
        }
     }

   return lastLots; // 最新ポジションのロット数を返す
  }

//+------------------------------------------------------------------+
//| 最新ポジションの建値を取得する関数                                 |
//+------------------------------------------------------------------+
double GetLastPositionPrice()
  {
   datetime latestTime  = 0;
   double   lastPrice   = 0;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      if(OrderSymbol() != Symbol() || OrderMagicNumber() != MAGIC_NUMBER)
         continue;

      if(OrderType() != OP_BUY && OrderType() != OP_SELL)
         continue;

      if(OrderOpenTime() > latestTime)
        {
         latestTime = OrderOpenTime();
         lastPrice  = OrderOpenPrice();
        }
     }

   return lastPrice;
  }

//+------------------------------------------------------------------+
//| 保有ポジション数を取得する関数                                     |
//+------------------------------------------------------------------+
int CountPositions()
  {
   int count = 0;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
     {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      if(OrderSymbol() == Symbol() && OrderMagicNumber() == MAGIC_NUMBER)
        {
         if(OrderType() == OP_BUY || OrderType() == OP_SELL)
            count++;
        }
     }

   return count;
  }

//+------------------------------------------------------------------+
//| OnTick - ナンピン買いのロジック例                                  |
//+------------------------------------------------------------------+
void OnTick()
  {
   int posCount = CountPositions();

   // ポジションが0のとき：基本ロットで初回エントリー
   if(posCount == 0)
     {
      // ここにエントリー条件を記述（例として常にBUY）
      int ticket = OrderSend(Symbol(), OP_BUY, BaseLot, Ask, 10, 0, 0,
                             "Nanpin EA", MAGIC_NUMBER, 0, clrBlue);
      if(ticket > 0)
         Print("初回エントリー成功 ロット:", DoubleToString(BaseLot, 2));
      return;
     }

   // ポジションが1つ以上あるとき：ナンピン条件を確認
   double lastPrice = GetLastPositionPrice();
   double lastLots  = GetLastPositionLots();

   // 最新ポジションからナンピン間隔分だけ逆行したか確認
   double nanpinDistance = NanpinPips * Point * 10;

   if(Ask <= lastPrice - nanpinDistance)
     {
      // OrderLots関数で取得した前回ロットに倍率をかける
      double nextLot = NormalizeDouble(lastLots * LotMultiplier, 2);

      // 最大ロット数を超えないよう制限
      if(nextLot > MaxLot)
         nextLot = MaxLot;

      // ナンピンエントリー
      int ticket = OrderSend(Symbol(), OP_BUY, nextLot, Ask, 10, 0, 0,
                             "Nanpin EA", MAGIC_NUMBER, 0, clrGreen);
      if(ticket > 0)
         Print("ナンピンエントリー成功 ロット:", DoubleToString(nextLot, 2),
               " 前回ロット:", DoubleToString(lastLots, 2));
     }

   // チャートに情報を表示
   Comment("ポジション数: ", posCount,
           "\n最新ロット: ", DoubleToString(lastLots, 2),
           "\n最新建値: ", DoubleToString(lastPrice, 5));
  }</code></pre></div>



<p>このプログラムでは、GetLastPositionLots関数の中でOrderLots関数を使い、最新ポジションのロット数を取得しています。そのロット数に倍率をかけることで、マーチンゲール方式のナンピンを実現しています。MaxLotで上限を設けることで、ロット数が際限なく増えることを防いでいる点もポイントです。</p>



<p>　</p>



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



<p>OrderLots関数は、選択したポジションのロット数を取得するシンプルな関数ですが、EA開発では非常に多くの場面で活躍します。</p>



<p>特に以下の3つの場面で使うことが多いので、しっかり覚えておきましょう。</p>



<ol class="wp-block-list"><li><strong>ポジションの決済時</strong>：OrderClose関数の引数としてロット数を指定する</li><li><strong>リスク管理</strong>：合計ロット数を計算して、上限を超えないよう制御する</li><li><strong>ナンピン・マーチンゲール</strong>：前回のロット数を基に次のエントリーロットを計算する</li></ol>



<p>OrderLots関数を使う前には、必ずOrderSelect関数でポジションを選択することを忘れないようにしましょう。</p>
<p>投稿 <a href="https://mql-programing.com/archives/871/orderlots/">【MQL4関数】OrderLots関数の使い方！ポジションのロット数の取得方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4関数】OrderTicket関数の使い方！チケット番号の取得方法</title>
		<link>https://mql-programing.com/archives/869/orderticket/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Thu, 06 May 2021 05:03:10 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderTicket]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=869</guid>

					<description><![CDATA[<p>OrderTicket関数とは OrderTicket関数は、ポジションのチケット番号を返す関数です。 ポジションを選択した後に使う関数なので、OrderSelect関数の後に使用します。 OrderTicket関数を使 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/869/orderticket/">【MQL4関数】OrderTicket関数の使い方！チケット番号の取得方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>ポジションのチケット番号を使いたいけど、どうしたら取得できるの？</p>
</div></div>



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



<p><strong>OrderTicket関数は、ポジションのチケット番号を返す関数です。</strong></p>



<p>ポジションを選択した後に使う関数なので、<a href="https://mql-programing.com/orderselect/">OrderSelect関数</a>の後に使用します。</p>



<p>OrderTicket関数を使う場面は少ないですが、決済注文を出すときに使う関数なので、「そういえばチケット番号を取得する関数があったよなぁ」程度に覚えておきましょう。</p>



<p>　</p>



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



<p>OrderTicket関数の使い方は、基本的な関数と同じです。</p>



<p>関数をマスターしていない方はこちらの記事が参考になります。</p>



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

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



<p>　</p>



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



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



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



<p>　</p>



<p>このように返り値は int型で、引数はありません。</p>



<p>まずは返り値を見ていきましょう。</p>



<p>　</p>



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



<p>OrderTicket関数の返り値は int型です。</p>



<p>チケット番号が返ってきます。</p>



<p><strong><span class="marker-under-red">FX会社にもよりますが、具体的には６〜１０桁の番号です。</span></strong></p>



<p>　</p>



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



<p>OrderTicket関数は、主に <a href="https://mql-programing.com/orderclose/" title="【MQL4関数】決済注文の出し方（OrderClose関数）とサンプルプログラム">OrderClose関数</a>（決済注文を出す関数）を使うときに使います。</p>



<p>具体的には以下のようなプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つ選択
if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
   {

      //チケット番号を取得
      int ticketNum = OrderTicket();

      //ポジションを決済
      bool orderClose = OrderClose( ticketNum, OrderLots(), OrderClosePrice(), 10, clrNONE);

   }</code></pre></div>



<p>　</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://mql-programing.com/product/file_orderclose/" class="btn btn-m btn-circle" target="_self"><span class="fz-20px">サンプルプログラムはこちらから</span></a></div>



<p>　</p>



<p>初めに、<a href="https://mql-programing.com/orderselect/">OrderSelect関数</a>でポジションを選択し、OrderTicket関数でチケット番号を取得します。</p>



<p>その後にチケット番号を利用して、OrderClose関数を実行します。</p>



<p>　</p>



<p><strong><span class="marker-under-red">OrderTicket関数は、このように他の関数と組み合わせて使うことが多いです。</span></strong></p>



<p>決済注文（OrderClose関数）を出すときに、覚えておくと便利な関数なので、覚えておくと良いでしょう。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc6">OrderTicket関数の実用的なプログラム例</span></h2>



<p>ここからは、OrderTicket関数を活用した実用的なプログラム例をいくつか紹介します。実際のEA開発で役立つパターンばかりなので、ぜひ参考にしてください。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc7">例1：自分のEAのポジションだけを全決済する</span></h3>



<p>複数のEAを同時に稼働させている場合、マジックナンバーを使って自分のEAが建てたポジションだけを決済する必要があります。OrderTicket関数でチケット番号を取得し、該当するポジションのみを決済するプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 自分のEAのポジションだけを全決済する関数                          |
//+------------------------------------------------------------------+
#define MAGIC_NUMBER 12345  // このEA固有のマジックナンバー

void CloseAllMyPositions()
{
   // ポジション数の後ろから順にループ（決済するとインデックスがずれるため）
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 自分のEAのマジックナンバーかチェック
      if(OrderMagicNumber() != MAGIC_NUMBER)
         continue;

      // 対象通貨ペアかチェック
      if(OrderSymbol() != Symbol())
         continue;

      // チケット番号を取得
      int ticket = OrderTicket();

      // 決済処理を実行
      bool result = OrderClose(ticket, OrderLots(), OrderClosePrice(), 10, clrNONE);

      if(result)
         Print("チケット番号 ", ticket, " の決済に成功しました");
      else
         Print("チケット番号 ", ticket, " の決済に失敗。エラー: ", GetLastError());
   }
}</code></pre></div>



<p><strong>ポイント：</strong>ポジションを決済するとインデックス番号がずれるため、<strong>後ろから順にループする</strong>のが重要です。OrderTicket関数で取得したチケット番号をPrint関数に渡せば、ログにどのポジションを処理したか記録できます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc8">例2：チケット番号を配列に保存して管理する</span></h3>



<p>ナンピンEAなどでは、複数のポジションを建てて管理する必要があります。チケット番号を配列に保存しておけば、後からポジションごとの損益確認や部分決済に活用できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| チケット番号を配列に保存して保有ポジションを管理する例            |
//+------------------------------------------------------------------+
#define MAGIC_NUMBER 12345

// チケット番号を格納する配列
int g_tickets[];

//+------------------------------------------------------------------+
//| 自分のEAの全チケット番号を配列に取得する関数                      |
//+------------------------------------------------------------------+
int GetMyTickets(int &tickets[])
{
   int count = 0;
   // まず配列を空にする
   ArrayResize(tickets, 0);

   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // マジックナンバーと通貨ペアでフィルタ
      if(OrderMagicNumber() != MAGIC_NUMBER)
         continue;
      if(OrderSymbol() != Symbol())
         continue;

      // 配列を1つ拡張してチケット番号を格納
      count++;
      ArrayResize(tickets, count);
      tickets[count - 1] = OrderTicket();
   }

   return count;  // 保有ポジション数を返す
}

//+------------------------------------------------------------------+
//| OnTick内での使用例                                                |
//+------------------------------------------------------------------+
void OnTick()
{
   // 全チケット番号を取得
   int posCount = GetMyTickets(g_tickets);

   // 合計損益を計算
   double totalProfit = 0;
   for(int i = 0; i < posCount; i++)
   {
      // チケット番号で直接ポジションを選択
      if(OrderSelect(g_tickets[i], SELECT_BY_TICKET))
      {
         totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
      }
   }

   // 合計利益が一定額を超えたら全決済
   if(totalProfit > 5000)  // 5000円以上の利益で全決済
   {
      for(int i = posCount - 1; i >= 0; i--)
      {
         if(OrderSelect(g_tickets[i], SELECT_BY_TICKET))
         {
            OrderClose(g_tickets[i], OrderLots(), OrderClosePrice(), 10, clrNONE);
         }
      }
   }
}</code></pre></div>



<p><strong>ポイント：</strong>OrderSelect関数はSELECT_BY_TICKETを指定すると、チケット番号で直接ポジションを選択できます。配列にチケット番号を保存しておけば、いつでも特定のポジションにアクセスできるので便利です。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc9">例3：新規注文後にチケット番号でSL/TPを変更する</span></h3>



<p>OrderSend関数の返り値もチケット番号です。注文後にOrderTicket関数と組み合わせて、ストップロスやテイクプロフィットを後から変更（OrderModify）する実用的なパターンを紹介します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 新規注文後にチケット番号でSL/TPを変更するEA例                    |
//+------------------------------------------------------------------+
#define MAGIC_NUMBER 12345

//+------------------------------------------------------------------+
//| 自分のEAのポジション数をカウントする関数                          |
//+------------------------------------------------------------------+
int CountMyOrders()
{
   int count = 0;
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;
      if(OrderMagicNumber() == MAGIC_NUMBER &#038;&#038; OrderSymbol() == Symbol())
         count++;
   }
   return count;
}

//+------------------------------------------------------------------+
//| メイン処理                                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // すでにポジションがあれば何もしない
   if(CountMyOrders() > 0) return;

   // 移動平均のゴールデンクロスでエントリー
   double maFast     = iMA(Symbol(), 0, 10, 0, MODE_SMA, PRICE_CLOSE, 1);
   double maSlow     = iMA(Symbol(), 0, 50, 0, MODE_SMA, PRICE_CLOSE, 1);
   double maFastPrev = iMA(Symbol(), 0, 10, 0, MODE_SMA, PRICE_CLOSE, 2);
   double maSlowPrev = iMA(Symbol(), 0, 50, 0, MODE_SMA, PRICE_CLOSE, 2);

   // ゴールデンクロス発生時に買い注文
   if(maFastPrev < maSlowPrev &#038;&#038; maFast > maSlow)
   {
      // まずSL/TPなしで注文を送信
      int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 10,
                             0, 0, "GoldenCross EA", MAGIC_NUMBER, 0, clrBlue);

      if(ticket > 0)
      {
         Print("注文成功！チケット番号: ", ticket);

         // チケット番号でポジションを選択してSL/TPを設定
         if(OrderSelect(ticket, SELECT_BY_TICKET))
         {
            double openPrice = OrderOpenPrice();
            double sl = openPrice - 500 * Point;  // 50pipsのストップロス
            double tp = openPrice + 1000 * Point;  // 100pipsのテイクプロフィット

            bool modified = OrderModify(ticket, openPrice, sl, tp, 0, clrBlue);

            if(modified)
               Print("チケット番号 ", ticket, " のSL/TP設定に成功");
            else
               Print("SL/TP設定に失敗。エラー: ", GetLastError());
         }
      }
      else
      {
         Print("注文失敗。エラー: ", GetLastError());
      }
   }
}</code></pre></div>



<p><strong>ポイント：</strong>OrderSend関数の返り値は成功時にチケット番号を返します。このチケット番号をそのままSELECT_BY_TICKETで選択すれば、すぐにOrderModify関数でSL/TPを追加設定できます。ECN口座などSL/TP同時指定ができないブローカーでは、この方法が必須になります。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc10">例4：最も古いポジションだけを決済する</span></h3>



<p>複数ポジションを保有している状況で、最初に建てた（最も古い）ポジションだけを決済したいケースがあります。OrderTicket関数とOrderOpenTime関数を組み合わせることで実現できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 最も古いポジションだけを決済する関数                              |
//+------------------------------------------------------------------+
#define MAGIC_NUMBER 12345

bool CloseOldestPosition()
{
   int    oldestTicket = -1;        // 最も古いポジションのチケット番号
   datetime oldestTime = TimeCurrent(); // 比較用の時刻（現在時刻で初期化）

   // 全ポジションをループして最も古いものを探す
   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // マジックナンバーと通貨ペアでフィルタ
      if(OrderMagicNumber() != MAGIC_NUMBER)
         continue;
      if(OrderSymbol() != Symbol())
         continue;

      // オープン時刻が最も古いポジションを記録
      if(OrderOpenTime() < oldestTime)
      {
         oldestTime   = OrderOpenTime();
         oldestTicket = OrderTicket();  // チケット番号を保存
      }
   }

   // 対象ポジションが見つかった場合に決済
   if(oldestTicket > 0)
   {
      if(OrderSelect(oldestTicket, SELECT_BY_TICKET))
      {
         bool result = OrderClose(oldestTicket, OrderLots(), OrderClosePrice(), 10, clrRed);

         if(result)
         {
            Print("最も古いポジション（チケット番号: ", oldestTicket, "）を決済しました");
            return true;
         }
         else
         {
            Print("決済失敗。チケット番号: ", oldestTicket, " エラー: ", GetLastError());
         }
      }
   }

   return false;
}</code></pre></div>



<p><strong>ポイント：</strong>ループの中でOrderOpenTime関数を比較して最も古いポジションのチケット番号を特定し、ループ後にまとめて決済します。探索と決済を分離することで、ループ中のインデックスずれを気にする必要がなくなります。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc11">例5：トレーリングストップをチケット番号で管理する</span></h3>



<p>含み益が伸びたときに、ストップロスを利益方向に引き上げる「トレーリングストップ」は人気の手法です。OrderTicket関数で各ポジションを識別しながら、ポジションごとにSLを更新するプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| チケット番号を使ったトレーリングストップ処理                      |
//+------------------------------------------------------------------+
#define MAGIC_NUMBER 12345

input int TrailingStartPips = 30;  // トレーリング開始pips
input int TrailingStopPips  = 20;  // トレーリング幅pips

void TrailingStopByTicket()
{
   double trailingStart = TrailingStartPips * Point * 10; // pipsをポイントに変換（5桁対応）
   double trailingStop  = TrailingStopPips  * Point * 10;

   for(int i = 0; i < OrdersTotal(); i++)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 自分のEAかつ対象通貨ペアかチェック
      if(OrderMagicNumber() != MAGIC_NUMBER) continue;
      if(OrderSymbol() != Symbol())          continue;

      // チケット番号を取得（ログ出力やデバッグに使用）
      int ticket = OrderTicket();

      // 買いポジションのトレーリングストップ
      if(OrderType() == OP_BUY)
      {
         // 現在の含み益がトレーリング開始条件を満たしているか
         double profit = Bid - OrderOpenPrice();
         if(profit >= trailingStart)
         {
            // 新しいSL = 現在のBid - トレーリング幅
            double newSL = NormalizeDouble(Bid - trailingStop, Digits);

            // 現在のSLより高い場合のみ更新（SLは上方向にのみ移動）
            if(newSL > OrderStopLoss() || OrderStopLoss() == 0)
            {
               bool modified = OrderModify(ticket, OrderOpenPrice(), newSL, OrderTakeProfit(), 0, clrBlue);
               if(modified)
                  Print("チケット ", ticket, " のSLを ", newSL, " に更新しました");
               else
                  Print("チケット ", ticket, " のSL更新失敗。エラー: ", GetLastError());
            }
         }
      }

      // 売りポジションのトレーリングストップ
      if(OrderType() == OP_SELL)
      {
         // 現在の含み益がトレーリング開始条件を満たしているか
         double profit = OrderOpenPrice() - Ask;
         if(profit >= trailingStart)
         {
            // 新しいSL = 現在のAsk + トレーリング幅
            double newSL = NormalizeDouble(Ask + trailingStop, Digits);

            // 現在のSLより低い場合のみ更新（SLは下方向にのみ移動）
            if(newSL < OrderStopLoss() || OrderStopLoss() == 0)
            {
               bool modified = OrderModify(ticket, OrderOpenPrice(), newSL, OrderTakeProfit(), 0, clrRed);
               if(modified)
                  Print("チケット ", ticket, " のSLを ", newSL, " に更新しました");
               else
                  Print("チケット ", ticket, " のSL更新失敗。エラー: ", GetLastError());
            }
         }
      }
   }
}</code></pre></div>



<p><strong>ポイント：</strong>OrderModify関数の第1引数にはチケット番号が必要です。OrderTicket関数で取得した番号をそのまま渡すことで、ポジションごとに正確なSL更新ができます。Print関数でチケット番号を出力すれば、どのポジションのSLが動いたかログで確認できるので、デバッグにも役立ちます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc12">例6：待機注文（指値・逆指値）をチケット番号で削除する</span></h3>



<p>OrderTicket関数は成行注文だけでなく、待機注文（ペンディングオーダー）にも使えます。一定時間が経過した待機注文を自動削除するプログラムを紹介します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="MQL4"><code>//+------------------------------------------------------------------+
//| 期限切れの待機注文をチケット番号で削除する関数                    |
//+------------------------------------------------------------------+
#define MAGIC_NUMBER 12345

input int PendingExpireMinutes = 60;  // 待機注文の有効期限（分）

void DeleteExpiredPendingOrders()
{
   // 有効期限の基準時刻を計算
   datetime expireTime = TimeCurrent() - PendingExpireMinutes * 60;

   // 後ろから順にループ（削除するとインデックスがずれるため）
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 自分のEAかつ対象通貨ペアかチェック
      if(OrderMagicNumber() != MAGIC_NUMBER) continue;
      if(OrderSymbol() != Symbol())          continue;

      // 待機注文かどうかを判定（OP_BUYLIMITからOP_SELLSTOPまで）
      int type = OrderType();
      if(type != OP_BUYLIMIT && type != OP_SELLLIMIT &&
         type != OP_BUYSTOP  && type != OP_SELLSTOP)
         continue;  // 成行ポジションはスキップ

      // 注文時刻が有効期限を過ぎているかチェック
      if(OrderOpenTime() < expireTime)
      {
         // チケット番号を取得して待機注文を削除
         int ticket = OrderTicket();
         bool result = OrderDelete(ticket, clrNONE);

         if(result)
            Print("期限切れの待機注文を削除。チケット番号: ", ticket,
                  " 注文時刻: ", TimeToStr(OrderOpenTime()));
         else
            Print("待機注文の削除に失敗。チケット番号: ", ticket,
                  " エラー: ", GetLastError());
      }
   }
}</code></pre></div>



<p><strong>ポイント：</strong>OrderDelete関数もOrderClose関数と同様に、第1引数にチケット番号が必要です。OrderType関数で注文の種類を判定し、待機注文（OP_BUYLIMIT・OP_SELLLIMIT・OP_BUYSTOP・OP_SELLSTOP）だけを対象にしています。成行ポジションを誤って処理しないよう、タイプのチェックを忘れないようにしましょう。</p>



<p>　</p>



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



<p>OrderTicket関数は、ポジションや待機注文のチケット番号を取得するためのシンプルな関数です。</p>



<p>使い方のポイントをまとめると以下の通りです。</p>



<ul class="wp-block-list">
<li><strong>OrderSelect関数の後に使う</strong>：ポジションを選択してから呼び出す</li>
<li><strong>OrderClose関数やOrderModify関数の引数として使う</strong>：決済やSL/TP変更に必須</li>
<li><strong>OrderDelete関数にも使える</strong>：待機注文の削除にもチケット番号が必要</li>
<li><strong>配列に保存して管理できる</strong>：複数ポジションの管理に便利</li>
<li><strong>Print関数と組み合わせてデバッグに活用</strong>：どのポジションを処理したかログに記録できる</li>
</ul>



<p>OrderTicket関数単体では使う場面が少ないですが、決済や注文変更には必ず必要になる関数です。他の注文関連の関数とセットで覚えておきましょう。</p>
<p>投稿 <a href="https://mql-programing.com/archives/869/orderticket/">【MQL4関数】OrderTicket関数の使い方！チケット番号の取得方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4関数】OrderMagicNumber関数の使い方！マジックナンバーとは？ポジション管理のやり方</title>
		<link>https://mql-programing.com/archives/802/ordermagicnumber/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Fri, 30 Apr 2021 03:16:06 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[OrderMagicNumber]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[注文]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=802</guid>

					<description><![CDATA[<p>マジックナンバーとは 裁量のときは、「自分がエントリーしたポジションは、自分で決済」していたと思います。 自動売買を使うからには、「自動売買がエントリーしたポジションは、自動売買で決済」して欲しいですよね！ そこで、マジ [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/802/ordermagicnumber/">【MQL4関数】OrderMagicNumber関数の使い方！マジックナンバーとは？ポジション管理のやり方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>マジックナンバーって何？裁量のときは聞いたことがないけど、自動売買では重要なの？</p>
</div></div>



<h2 class="wp-block-heading"><span id="toc1">マジックナンバーとは</span></h2>



<p>裁量のときは、<strong>「自分がエントリーしたポジションは、自分で決済」</strong>していたと思います。</p>



<p>自動売買を使うからには、<strong>「自動売買がエントリーしたポジションは、自動売買で決済」</strong>して欲しいですよね！</p>



<p>そこで、マジックナンバーを使ってみましょう！</p>



<p>　</p>



<p><strong><span class="marker-under-red">マジックナンバーとは、自動売買がポジションを管理するための番号です。</span></strong></p>



<p>具体的には、「１０」とか「２０」とか、好きな数字を設定することができます。</p>



<p>設定することで、自動売買がエントリーしたポジションに、マジックナンバーが付きます。</p>



<p><strong>マジックナンバーが付いていると、その自動売買がエントリーしたポジションなのかを、自動売買が判別することができるようになります。</strong></p>



<p><strong><span class="marker-under-red">判別できる</span><span class="marker-under-red">ようになる</span><span class="marker-under-red">と、別の自動売買が決済してしまうことや、裁量のポジションを決済してしまうことを防ぐことができるようになるのです。</span></strong></p>



<p>　</p>



<p>例えば、自動売買①と自動売買②を同時に動かしている場合を考えてみましょう。</p>



<ul class="wp-block-list"><li><strong>マジックナンバーが付いていない場合</strong></li></ul>



<pre class="wp-block-preformatted"><span class="marker-under">自動売買は、どちらの自動売買でエントリーしたポジションなのか判別できません。
</span>そのため、自動売買①でエントリーしたのに、自動売買②が決済してしまうことが起こる可能性があります。</pre>



<ul class="wp-block-list"><li><strong>マジックナンバーが付いている場合</strong></li></ul>



<pre class="wp-block-preformatted"><span class="marker-under">自動売買は、どちらの自動売買でエントリーしたポジションなのか判別できます。
</span>そのため、自動売買①でエントリーしたのに、自動売買②が決済してしまうことは起こりません。</pre>



<p>　</p>



<p>このように、マジックナンバーを設定しておくことで、別の自動売買が決済してしまうことを防ぐことができます。</p>



<p>　</p>



<p>ちなみにマジックナンバーは、エントリーするときに設定します。</p>



<p>OrderSend関数の９番目の引数（⑨magic）でマジックナンバーを設定できます。</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/ordersend/" title="【MQL4関数】OrderSend関数の使い方！エントリー注文の出し方とサンプルプログラム" 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/04/OrderSend.jpg?fit=1200%2C675&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4関数】OrderSend関数の使い方！エントリー注文の出し方とサンプルプログラム</div><div class="blogcard-snippet external-blogcard-snippet">目次 OrderSend関数とはOrderSend関数の書き方基本的な書き方OrderSend関数の返り値（戻り値）OrderSend関数の引数①symbol②cmd③volume④price⑤slippage⑥stop</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/550/ordersend/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc2">マジックナンバーを設定する方法</span></h3>



<p>「マジックナンバーを設定したいけどどうしたらいいの？」という方が多いと思います。</p>



<p><strong>マジックナンバーは、自動売買プログラムに直接書いてしまうと良いでしょう。</strong></p>



<p>例えば、以下のように書きます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//大域変数にマジックナンバーの数値を書く
int magicNumber = 10;

//エントリーするときに、マジックナンバーを設定する
//OrderSend関数の９番目の引数に設定
int ticketNum = OrderSend( NULL, OP_BUY, 0.1, Ask, 20, 105.000, 110.000, &quot;自動売買の注文&quot;, magicNumber, 0, clrRed);
</code></pre></div>



<p>　</p>



<p>プログラムを省略していますが、上記のようにマジックナンバーを設定します。</p>



<p><strong><span class="marker-under-red">大域変数にマジックナンバー用の変数を準備し、好きな数値を代入します。</span></strong></p>



<p><strong>そして、エントリーするときにマジックナンバーを設定します。</strong></p>



<p>このような流れで、マジックナンバーを設定すると良いでしょう。</p>



<p>　</p>



<p><strong>ちなみに裁量でエントリーしたポジションには、マジックナンバーを付けることができませんので、ご注意ください。</strong></p>



<p>　</p>



<p>ここまでは、マジックナンバーを設定する方法を解説しました。</p>



<p>ここからはマジックナンバーを使う方法を見ていきましょう。</p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc3">マジックナンバーを使う方法（OrderMagicNumber関数）</span></h2>



<p>マジックナンバーを設定するだけではなく、使うことで力を発揮します。</p>



<p>マジックナンバーを使うには、<strong>OrderMagicNumber関数</strong>を使います。</p>



<p>　</p>



<p><strong><span class="marker-under-red">OrderMagicNumber関数は、ポジションに付いているマジックナンバーを取得する関数です。</span></strong></p>



<p>マジックナンバーを取得することで、自動売買に設定しているマジックナンバーと、ポジションのマジックナンバーが同じかどうか、判別できます。</p>



<p>例えば、ポジションのマジックナンバーが「１０」で、自動売買のマジックナンバーが「１０」の時、数値が同じなので、自動売買が決済することができます。</p>



<p><strong>マジックナンバーが異なっている場合は、自動売買は決済することができません。</strong></p>



<p>このように、マジックナンバーとOrderMagicNumber関数を使うことで、想定外のポジションを決済してしまうことを防ぐことができます。</p>



<p>　</p>



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



<p>OrderMagicNumber関数の使い方は、基本的な関数と同じです。</p>



<p>関数をマスターしていない方はこちらの記事が参考になります。</p>



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

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



<p>　</p>



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



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



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



<p>　</p>



<p>返り値は int型で、引数はありません。</p>



<p>ポジションのマジックナンバーは、返り値として取得することができます。</p>



<p>具体的には「１０」や「２０」など、エントリーするときに設定した数値が返ってきます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc6">事前にポジションを選択しておく</span></h3>



<p>OrderMagicNumber関数は、引数が無いため、どのポジションのマジックナンバーを取得すれば良いのか、判断することができません。</p>



<p><strong><span class="marker-under-red">そのため、事前にポジションを選択しておく必要があります。</span></strong></p>



<p>ポジションを選択するには、<strong><a href="https://mql-programing.com/orderselect/">OrderSelect関数</a></strong>を使います。</p>



<p>　</p>



<p>必ず <strong>OrderSelect関数 → OrderMagicNumber関数</strong> の順にプログラムするので、以下のようなプログラムになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//大域変数にマジックナンバーの数値を書く
int magicNumber = 10;

//保有ポジションを一つ選択
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
{
   //選択したポジションのマジックナンバーが
   //自動売買のマジックナンバーと同じかどうかチェック
   if(OrderMagicNumber() == magicNumber)
   {
      //ここにポジションを決済するプログラムを書く
   }
}</code></pre></div>



<p>　</p>



<p>OrderMagicNumber関数を実行する前に、OrderSelect関数でポジションを選択しておきましょう。</p>



<p>もう少し詳しく解説します。</p>



<p>上記のプログラムの 10行目を見てください。</p>



<ul class="wp-block-list"><li>「OrderMagicNumber( )」はポジションのマジックナンバーです</li><li>「magicNumber」は自動売買のマジックナンバーです</li></ul>



<p>ふたつとも必ず一緒じゃないの？ と思うかもしれませんが、別物です。</p>



<p>自動売買を複数起動している場合、両者は異なります。</p>



<p><strong>というより、異なるようにマジックナンバーを設定してください。</strong></p>



<p><strong><span class="marker-under-red">異なるマジックナンバーを設定することで、別のポジションを決済してしまうことを防いでいます。</span></strong></p>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc7">OrderMagicNumber関数の具体的な使い方</span></h2>



<p>マジックナンバーを設定する方法と、マジックナンバーを使う方法を解説しました。</p>



<p>ここからは、エントリーしてからマジックナンバーを使うところまで、具体的にプログラムを見てみましょう。</p>



<p>早速ですが、プログラムは以下の通りです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//大域変数にマジックナンバーの数値を書く
int magicNumber = 10;

void OnTick()
{
//---

   //エントリーするときに、マジックナンバーを設定する
   //OrderSend関数の９番目の引数に設定
   int ticketNum = OrderSend(NULL, OP_BUY, 0.1, Ask, 20, 105.000, 110.000, &quot;自動売買の注文&quot;, magicNumber, 0, clrRed);

   //保有ポジションを一つずつチェックしていく
   for(int i = OrdersTotal() - 1; i &gt;= 0; i--)
   {
      //保有ポジションを一つ選択
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         //選択したポジションが、実行されている通貨ペアと同じかどうかチェック
         if(OrderSymbol() == Symbol())
         {
            //選択したポジションが、この自動売買のマジックナンバーと同じかチェック
            if(OrderMagicNumber() == magicNumber)
            {
               //ここにポジションを決済するプログラムを書く
               //わかりやすいようにprintしておきます。
               Print(&quot;OrderSymbol : &quot; + OrderSymbol());
               Print(&quot;Symbol : &quot; + Symbol());
               Print(&quot;OrderMagicNumber : &quot; + IntegerToString(OrderMagicNumber()));
            }
         }
      }
   }

}</code></pre></div>



<p>　</p>



<p>注文関係の関数をたくさん使用しています。</p>



<p>簡単に解説すると、以下の通りです。</p>



<ul class="wp-block-list"><li>２行目で、マジックナンバーを決めています。</li><li>１０行目で、マジックナンバーが付いたポジションをエントリーしています。</li><li>２６行目で、ポジションのマジックナンバーをチェックしています。</li></ul>



<p>このように書くことで、全てのポジションをチェックし、その中から自動売買のマジックナンバーと同じポジションだけを、決済することができます。</p>



<p><strong>この書き方は、自動売買を作るときによく使う書き方なので、どこかにコピーしておくと良いでしょう。</strong></p>



<p>　</p>



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



<p>ここからは、OrderMagicNumber関数を使った実用的なプログラム例をいくつかご紹介します。</p>



<p>実際のEA開発でよく使う場面を想定していますので、ぜひ参考にしてください。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc9">応用例１：マジックナンバーで自分のポジション数をカウントする</span></h3>



<p>EAを作るとき、「今、自分のEAが何個ポジションを持っているか？」を知りたい場面は非常に多いです。</p>



<p>例えば、「ポジションが0個のときだけエントリーする」という条件を作るには、まずポジション数を数える必要があります。</p>



<p>以下のプログラムでは、マジックナンバーと通貨ペアを使って、自分のEAのポジション数をカウントしています。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// マジックナンバーの定義
int magicNumber = 12345;

//+------------------------------------------------------------------+
//| 自分のEAが保有しているポジション数をカウントする関数              |
//+------------------------------------------------------------------+
int CountMyPositions()
{
   int count = 0; // カウント用の変数を初期化

   // 全ポジションをループでチェック
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択（選択に失敗したらスキップ）
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 通貨ペアが一致するかチェック
      if(OrderSymbol() != Symbol())
         continue;

      // マジックナンバーが一致するかチェック
      if(OrderMagicNumber() != magicNumber)
         continue;

      // すべての条件を満たしたらカウントを増やす
      count++;
   }

   return count; // ポジション数を返す
}

//+------------------------------------------------------------------+
//| OnTick関数                                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // 自分のEAのポジション数を取得
   int myPositions = CountMyPositions();

   // ポジションが0個のときだけエントリーする
   if(myPositions == 0)
   {
      // ここにエントリー条件を書く
      // 例：買いエントリー
      int ticket = OrderSend(Symbol(), OP_BUY, 0.1, Ask, 20, 0, 0,
                             "MyEA", magicNumber, 0, clrBlue);

      if(ticket > 0)
         Print("エントリー成功！チケット番号: ", ticket);
      else
         Print("エントリー失敗。エラーコード: ", GetLastError());
   }
   else
   {
      Print("既にポジションを ", myPositions, " 個保有中です。");
   }
}</code></pre></div>



<p>　</p>



<p>ポイントは、<strong>CountMyPositions関数</strong>を作っている点です。</p>



<p>この関数は、通貨ペアとマジックナンバーの両方が一致するポジションだけをカウントします。</p>



<p>こうすることで、「ポジションが無いときだけエントリー」という制御が簡単にできるようになります。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc10">応用例２：マジックナンバーを使って自分のポジションだけを全決済する</span></h3>



<p>「特定のEAが持っているポジションだけを全部決済したい」という場面もよくあります。</p>



<p>例えば、損失が一定額を超えたときに、そのEAのポジションだけをすべて閉じるといった使い方です。</p>



<p>以下のプログラムは、マジックナンバーが一致するポジションだけを全決済します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// マジックナンバーの定義
int magicNumber = 12345;

//+------------------------------------------------------------------+
//| 自分のEAのポジションを全決済する関数                              |
//+------------------------------------------------------------------+
void CloseAllMyPositions()
{
   // 後ろからループすることで、決済後のインデックスずれを防ぐ
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      // 通貨ペアが一致するかチェック
      if(OrderSymbol() != Symbol())
         continue;

      // マジックナンバーが一致するかチェック
      if(OrderMagicNumber() != magicNumber)
         continue;

      // ポジションの種類に応じて決済する
      bool result = false;

      if(OrderType() == OP_BUY)
      {
         // 買いポジションの決済（決済価格はBid）
         result = OrderClose(OrderTicket(), OrderLots(), Bid, 20, clrRed);
      }
      else if(OrderType() == OP_SELL)
      {
         // 売りポジションの決済（決済価格はAsk）
         result = OrderClose(OrderTicket(), OrderLots(), Ask, 20, clrBlue);
      }

      // 決済結果をログに出力
      if(result)
         Print("決済成功！チケット番号: ", OrderTicket());
      else
         Print("決済失敗。チケット番号: ", OrderTicket(),
               " エラーコード: ", GetLastError());
   }
}

//+------------------------------------------------------------------+
//| OnTick関数                                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // 例：合計損益が -10000円を下回ったら全決済する
   double totalProfit = 0;

   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;
      if(OrderSymbol() != Symbol())
         continue;
      if(OrderMagicNumber() != magicNumber)
         continue;

      // そのポジションの損益を合計に加算
      totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
   }

   // 合計損益が -10000 を下回ったら全決済
   if(totalProfit < -10000)
   {
      Print("合計損益が ", totalProfit, " 円のため、全決済を実行します。");
      CloseAllMyPositions();
   }
}</code></pre></div>



<p>　</p>



<p>このプログラムのポイントは２つあります。</p>



<ul class="wp-block-list"><li><strong>ループを後ろから回している</strong>：ポジションを決済するとインデックスがずれるため、後ろから処理することでエラーを防ぎます。</li><li><strong>買いと売りで決済価格が異なる</strong>：買いポジションはBidで、売りポジションはAskで決済します。</li></ul>



<p>マジックナンバーでフィルタリングしているので、他のEAや裁量のポジションに影響を与えることはありません。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc11">応用例３：外部パラメータでマジックナンバーを変更できるようにする</span></h3>



<p>同じEAを複数のチャートに適用する場合、それぞれ異なるマジックナンバーを設定する必要があります。</p>



<p>そのようなとき、外部パラメータ（extern や input）を使うと、チャートに適用するときにマジックナンバーを自由に変更できるようになります。</p>



<p>以下のプログラムは、外部パラメータでマジックナンバーを設定する例です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// 外部パラメータとしてマジックナンバーを定義
// EAをチャートに適用するときに、数値を変更できる
input int MagicNumber = 12345;

//+------------------------------------------------------------------+
//| OnTick関数                                                        |
//+------------------------------------------------------------------+
void OnTick()
{
   // 保有ポジションをチェック
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
         continue;

      if(OrderSymbol() != Symbol())
         continue;

      // 外部パラメータのマジックナンバーと比較
      if(OrderMagicNumber() != MagicNumber)
         continue;

      // マジックナンバーが一致するポジションの情報を表示
      Print("チケット番号: ", OrderTicket(),
            " マジックナンバー: ", OrderMagicNumber(),
            " 損益: ", OrderProfit());
   }
}</code></pre></div>



<p>　</p>



<p><strong>input</strong> を使って宣言することで、EAをチャートに適用するときのパラメータ画面で数値を変更できます。</p>



<p>例えば、USDJPYのチャートではマジックナンバーを「12345」に、EURUSDのチャートでは「12346」に設定するといった使い方ができます。</p>



<p><strong><span class="marker-under-red">同じEAでもマジックナンバーが異なれば、お互いのポジションに干渉しないため、安全に運用できます。</span></strong></p>



<p>　</p>



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



<p>今回は、マジックナンバーとOrderMagicNumber関数について解説しました。</p>



<p>ポイントをまとめると以下の通りです。</p>



<ul class="wp-block-list"><li><strong>マジックナンバー</strong>は、自動売買がポジションを管理するための番号です。</li><li>マジックナンバーは、<strong>OrderSend関数の９番目の引数</strong>で設定します。</li><li><strong>OrderMagicNumber関数</strong>で、ポジションに付いているマジックナンバーを取得できます。</li><li>OrderMagicNumber関数を使う前に、<strong>OrderSelect関数</strong>でポジションを選択しておく必要があります。</li><li>複数のEAを同時に動かす場合は、<strong>異なるマジックナンバー</strong>を設定しましょう。</li><li>外部パラメータ（<strong>input</strong>）を使うと、マジックナンバーを柔軟に変更できます。</li></ul>



<p>　</p>



<p>マジックナンバーは、EA開発において必須の知識です。</p>



<p>正しく設定・活用することで、安全にポジションを管理できるようになりますので、ぜひ今回の内容を参考にしてみてください。</p>
<p>投稿 <a href="https://mql-programing.com/archives/802/ordermagicnumber/">【MQL4関数】OrderMagicNumber関数の使い方！マジックナンバーとは？ポジション管理のやり方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4関数】OrderSymbol関数の使い方！正しくポジションを決済する方法</title>
		<link>https://mql-programing.com/archives/775/ordersymbol/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sun, 25 Apr 2021 05:28:19 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderSymbol]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=775</guid>

					<description><![CDATA[<p>OrderSymbol関数とは 自動売買が勝手に別のポジションを決済することはありませんか？ そういうときは、自動売買のプログラム内で、通貨ペアの設定ができていない可能性があります。 　 通貨ペアの設定ができていない場合 [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/775/ordersymbol/">【MQL4関数】OrderSymbol関数の使い方！正しくポジションを決済する方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>別の通貨ペアのポジションを、自動売買が勝手に決済しちゃった！どうしたら防げるの？</p>
</div></div>



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



<p>自動売買が勝手に別のポジションを決済することはありませんか？</p>



<p><strong>そういうときは、自動売買のプログラム内で、通貨ペアの設定ができていない可能性があります。</strong></p>



<p>　</p>



<p>通貨ペアの設定ができていない場合、別の通貨ペアのポジションを決済してしまうことがあります。</p>



<p><strong><span class="marker-under-red">例えば、自動売買を「USDJPY」で動かしているのに、「EURUSD」のポジションを決済してしまったり、「AUDJPY」のポジションを決済してしまったりします。</span></strong></p>



<p>そこで、別のポジションを決済してしまうことを防ぐために、<strong>OrderSymbol関数</strong>を使いましょう。</p>



<p>　</p>



<p>OrderSymbol関数とは、保有ポジションの通貨ペアの情報を取得する関数です。</p>



<p><strong>保有ポジションの通貨ペアを取得することで、正しい通貨ペアのポジションだけを決済させることができます。</strong></p>



<p>例えば、自動売買が「USDJPY」で動いているなら、<strong><span class="marker-under-red">「USDJPY」のポジションだけを決済させる</span></strong>ことができます。</p>



<p>このように OrderSymbol関数を使って正しい通貨ペアを設定することで、別の通貨ペアのポジションを勝手に決済してしまうことを防ぐことができます。</p>



<p>　</p>



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



<p>OrderSymbol関数の書き方は、関数の書き方と同じです。</p>



<p>もし関数の使い方をマスターしていない方は、こちらの記事が参考になります。</p>



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

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



<p><br>　</p>



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



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>string orderSymbol = OrderSymbol();</code></pre></div>



<p>　</p>



<p>返り値は string型で、引数はありません。</p>



<p>　</p>



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



<p>OrderSymbol関数の返り値は、string型です。</p>



<p><strong><span class="marker-under-red">保有ポジションの通貨ペア名が返ってきます。</span></strong></p>



<p>　</p>



<p>例えば、保有ポジションがドル円の場合、<strong>「USDJPY」</strong>という値が返ってきます。</p>



<p>　</p>



<p>このように OrderSymbol関数は、string型が返り値となっていて、保有ポジションの通貨ペア名が返ってきます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc5">事前にポジションを選択しておく</span></h3>



<p>OrderSymbol関数は、<strong>ポジションを選択しないと使うことができません。</strong></p>



<p><strong><span class="marker-under-red">そのため OrderSymbol関数を実行する前に、ポジションを選択しておきましょう。</span></strong></p>



<p>ポジションを選択するには、<strong><a href="https://mql-programing.com/orderselect/">OrderSelect関数</a></strong>を使います。</p>



<p>　</p>



<p><strong>必ず OrderSelect関数 → OrderSymbol関数 の順にプログラムする</strong>ので、以下のようなプログラムになります。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つ選択
if(OrderSelect(0,SELECT_BY_POS,MODE_TRADES))
   {

   //選択したポジションが、実行されている通貨ペアと同じかどうかチェック
   if(OrderSymbol() == Symbol())
   {

      //ここにポジションを決済するプログラムを書く

   }
}</code></pre></div>



<p>　</p>



<p>このように、OrderSymbol関数を実行する前に、ポジションを選択しておくようにしましょう。</p>



<p>ちなみに if文の条件式に「Symbol( )」と書いていますが、Symbol関数は<strong>自動売買が動いている通貨ペアの情報</strong>が返ってきます。</p>



<p><strong><span class="marker-under-red">OrderSymbol関数でポジションの通貨ペアを取得し、Symbol関数で自動売買が動いている通貨ペアを取得します。</span></strong></p>



<p>通貨ペアを一致させることで、別のポジションを決済してしまうことを防いでいます。</p>



<p>　</p>



<p>OrderSelect関数は、こちらの記事が参考になります。</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/orderselect/" title="【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方" 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/04/OrderSelect.jpg?fit=1200%2C675&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方</div><div class="blogcard-snippet external-blogcard-snippet">目次 OrderSelect関数とはOrderSelect関数の書き方基本的な書き方返り値（戻り値）引数①index②select③poolOrderSelect関数の具体的な使い方（サンプルあり）まとめ OrderSe</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/712/orderselect/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



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



<p>先ほど、OrderSelect関数と組み合わせましたが、さらに他の関数とも組み合わせます。</p>



<p>上記の例では、ポジションを１つだけ選択して、通貨ペアを取得していましたが、全てのポジションの情報を取得してみます。</p>



<p>全てのポジションの情報を取得するためには、<a href="https://mql-programing.com/repeat-for-while/">for文</a>を使って全てのポジションをチェックします。</p>



<p>そのとき、for分の条件式に保有ポジション数が必要となりますので、<a href="https://mql-programing.com/orderstotal/">OrdersTotal関数</a>と組み合わせて使ってみましょう。</p>



<p>例えば、以下のようなプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つずつチェックしていく
  for( int i = OrdersTotal() - 1; i &gt;= 0; i--)
     {

      //保有ポジションを一つ選択
      if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
          {

              //選択したポジションが、実行されている通貨ペアと同じかどうかチェック
              if( OrderSymbol() == Symbol())
              {

              //ここにポジションを決済するプログラムを書く

              }
          }
     }</code></pre></div>



<p>　</p>



<div class="wp-block-cocoon-blocks-button-1 aligncenter button-block"><a href="https://mql-programing.com/product/file_ordersymbol/" class="btn btn-m btn-circle" target="_self"><span class="fz-20px">サンプルプログラムはこちらから</span></a></div>



<p>　</p>



<p>このように書くことで、全てのポジションをチェックし、その中から自動売買が動いている通貨ペアだけを選択することができます。</p>



<p><strong>この書き方は、自動売買を作るときによく使う書き方なので、どこかにコピーしておくと良いでしょう。</strong></p>



<p>　</p>



<p>OrdersTotal関数の使い方は、以下の記事が参考になります。</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/orderstotal/" title="【MQL4関数】OrdersTotal関数の使い方！保有ポジション数の取得のやり方" 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/04/OrdersTotal.jpg?fit=1200%2C675&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4関数】OrdersTotal関数の使い方！保有ポジション数の取得のやり方</div><div class="blogcard-snippet external-blogcard-snippet">目次 OrdersTotal関数とはOrdersTotal関数の使用方法と注意点まとめ OrdersTotal関数とは 自動売買でトレードするとき、保有ポジション数をチェックしたいですよね！ そのときに OrdersTo</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/705/orderstotal/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc7">OrderSymbol関数の実用的なプログラム例</span></h2>



<p>ここからは、OrderSymbol関数を使った実用的なプログラム例を紹介します。</p>



<p><strong>実際のEA（自動売買）で使える形になっていますので、ぜひ参考にしてください。</strong></p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc8">例1：自分の通貨ペアの買いポジションだけを全決済するEA</span></h3>



<p>OrderSymbol関数とOrderType関数を組み合わせることで、特定の通貨ペアの買いポジションだけを決済することができます。</p>



<p>以下の例では、ボタンを押す代わりにOnTick内で条件を満たしたときに、買いポジションだけを全決済します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| 自分の通貨ペアの買いポジションだけを全決済する関数               |
//+------------------------------------------------------------------+
void CloseAllBuyPositions()
{
   // 保有ポジションを後ろからループ（決済するとインデックスがずれるため）
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 通貨ペアが一致しているかチェック
         if(OrderSymbol() == Symbol())
         {
            // 買いポジション（OP_BUY）かどうかチェック
            if(OrderType() == OP_BUY)
            {
               // 買いポジションを決済（Bid価格で決済する）
               bool result = OrderClose(OrderTicket(), OrderLots(), MarketInfo(OrderSymbol(), MODE_BID), 10, clrRed);

               // 決済結果をログに出力
               if(result)
                  Print("買いポジション決済成功: チケット=", OrderTicket());
               else
                  Print("買いポジション決済失敗: エラー=", GetLastError());
            }
         }
      }
   }
}

//+------------------------------------------------------------------+
//| OnTick関数での使用例                                              |
//+------------------------------------------------------------------+
void OnTick()
{
   // 例：RSIが70を超えたら買いポジションを全決済する
   double rsi = iRSI(Symbol(), 0, 14, PRICE_CLOSE, 0);

   if(rsi > 70)
   {
      CloseAllBuyPositions();
   }
}</code></pre></div>



<p>このように、OrderSymbol関数で通貨ペアをチェックし、さらにOrderType関数で売買の種類をチェックすることで、<strong>買いポジションだけを狙って決済する</strong>ことができます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc9">例2：自分の通貨ペアのポジション数をカウントする</span></h3>



<p>自動売買では、「今いくつポジションを持っているか」を確認したい場面がよくあります。</p>



<p>OrderSymbol関数を使えば、<strong>自分のEAが動いている通貨ペアのポジション数だけを正確にカウント</strong>できます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| 自分の通貨ペアのポジション数をカウントする関数                   |
//| buyCount: 買いポジション数（参照渡しで返す）                     |
//| sellCount: 売りポジション数（参照渡しで返す）                    |
//+------------------------------------------------------------------+
void CountMyPositions(int &amp;buyCount, int &amp;sellCount)
{
   // カウンターを初期化
   buyCount  = 0;
   sellCount = 0;

   // 全ポジションをループしてチェック
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 自分の通貨ペアかどうかチェック
         if(OrderSymbol() == Symbol())
         {
            // 買いポジションならbuyCountを加算
            if(OrderType() == OP_BUY)
               buyCount++;

            // 売りポジションならsellCountを加算
            if(OrderType() == OP_SELL)
               sellCount++;
         }
      }
   }
}

//+------------------------------------------------------------------+
//| OnTick関数での使用例                                              |
//+------------------------------------------------------------------+
void OnTick()
{
   int buyCount, sellCount;

   // 自分の通貨ペアのポジション数を取得
   CountMyPositions(buyCount, sellCount);

   // ポジション数をログに出力
   Print("買いポジション数=", buyCount, " 売りポジション数=", sellCount);

   // 例：買いポジションが0のときだけ新規エントリーする
   if(buyCount == 0)
   {
      // ここに新規注文のプログラムを書く
   }
}</code></pre></div>



<p>このように参照渡しを使うことで、<strong>買いと売りのポジション数を一度に取得</strong>できます。</p>



<p>ポジション数を管理することで、「最大○個までしかポジションを持たない」といったルールも簡単に実装できます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc10">例3：マジックナンバーとOrderSymbolを組み合わせて安全に決済するEA</span></h3>



<p>実際のEA開発では、OrderSymbol関数だけでなく<strong>マジックナンバー（OrderMagicNumber関数）</strong>も組み合わせることで、より安全にポジションを管理できます。</p>



<p><strong><span class="marker-under-red">同じ通貨ペアで複数のEAを動かす場合、マジックナンバーで自分のEAが建てたポジションだけを識別する必要があります。</span></strong></p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| マジックナンバーの設定                                           |
//+------------------------------------------------------------------+
#define MAGIC_NUMBER 123456  // このEA専用のマジックナンバー

//+------------------------------------------------------------------+
//| 通貨ペア＋マジックナンバーで自分のポジションだけを全決済する関数 |
//+------------------------------------------------------------------+
void CloseMyAllPositions()
{
   // 保有ポジションを後ろからループ
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 通貨ペアが一致しているかチェック
         if(OrderSymbol() != Symbol()) continue;

         // マジックナンバーが一致しているかチェック（自分のEAが建てたポジションか）
         if(OrderMagicNumber() != MAGIC_NUMBER) continue;

         // 決済価格を決定（買いならBid、売りならAsk）
         double closePrice = 0;
         if(OrderType() == OP_BUY)
            closePrice = MarketInfo(OrderSymbol(), MODE_BID);
         else if(OrderType() == OP_SELL)
            closePrice = MarketInfo(OrderSymbol(), MODE_ASK);
         else
            continue;  // 指値・逆指値注文はスキップ

         // ポジションを決済
         bool result = OrderClose(OrderTicket(), OrderLots(), closePrice, 10, clrYellow);

         // 決済結果をログに出力
         if(result)
            Print("決済成功: チケット=", OrderTicket(), " 通貨ペア=", OrderSymbol());
         else
            Print("決済失敗: チケット=", OrderTicket(), " エラー=", GetLastError());
      }
   }
}

//+------------------------------------------------------------------+
//| OnTick関数での使用例                                              |
//+------------------------------------------------------------------+
void OnTick()
{
   // 例：金曜日の22時を過ぎたら週末リスク回避のため全決済する
   if(DayOfWeek() == 5 &amp;&amp; Hour() >= 22)
   {
      CloseMyAllPositions();
      return;  // 決済後は新規エントリーしない
   }

   // ここに通常のエントリーロジックを書く
}</code></pre></div>



<p>このように、OrderSymbol関数とOrderMagicNumber関数を<strong>ダブルチェック</strong>することで、他のEAが建てたポジションを誤って決済してしまうことを完全に防ぐことができます。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc11">例4：自分の通貨ペアの合計損益をリアルタイムで表示するインジケーター</span></h3>



<p>OrderSymbol関数は、EAだけでなく<strong>インジケーター</strong>でも活用できます。</p>



<p>以下の例では、自分の通貨ペアの保有ポジションの合計損益をチャート上にリアルタイム表示します。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//+------------------------------------------------------------------+
//| 自分の通貨ペアの合計損益をチャートに表示するインジケーター       |
//+------------------------------------------------------------------+
#property indicator_chart_window  // チャートウィンドウに表示

//+------------------------------------------------------------------+
//| 初期化関数                                                        |
//+------------------------------------------------------------------+
int OnInit()
{
   // タイマーを1秒間隔で設定（リアルタイム更新用）
   EventSetTimer(1);
   return(INIT_SUCCEEDED);
}

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

   // 表示したオブジェクトを削除
   ObjectDelete(0, "ProfitLabel");
   ObjectDelete(0, "ProfitValue");
}

//+------------------------------------------------------------------+
//| 自分の通貨ペアの合計損益を計算する関数                           |
//+------------------------------------------------------------------+
double CalcMyProfit()
{
   double totalProfit = 0;

   // 全ポジションをループ
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // 自分の通貨ペアのポジションだけを合計する
         if(OrderSymbol() == Symbol())
         {
            // OrderProfit()で損益、OrderSwap()でスワップ、OrderCommission()で手数料を取得
            totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
         }
      }
   }

   return(totalProfit);
}

//+------------------------------------------------------------------+
//| タイマーイベント（1秒ごとに実行）                                |
//+------------------------------------------------------------------+
void OnTimer()
{
   // 自分の通貨ペアの合計損益を計算
   double profit = CalcMyProfit();

   // 損益の文字列を作成
   string profitText = Symbol() + " 合計損益: " + DoubleToString(profit, 2) + " " + AccountCurrency();

   // 損益に応じて色を変える（プラスなら青、マイナスなら赤）
   color textColor = (profit >= 0) ? clrDodgerBlue : clrRed;

   // チャート左上にテキストを表示
   if(ObjectFind(0, "ProfitValue") &lt; 0)
   {
      // オブジェクトが存在しない場合は新規作成
      ObjectCreate(0, "ProfitValue", OBJ_LABEL, 0, 0, 0);
      ObjectSetInteger(0, "ProfitValue", OBJPROP_CORNER, CORNER_LEFT_UPPER);
      ObjectSetInteger(0, "ProfitValue", OBJPROP_XDISTANCE, 20);
      ObjectSetInteger(0, "ProfitValue", OBJPROP_YDISTANCE, 30);
      ObjectSetInteger(0, "ProfitValue", OBJPROP_FONTSIZE, 14);
   }

   // テキストと色を更新
   ObjectSetString(0, "ProfitValue", OBJPROP_TEXT, profitText);
   ObjectSetInteger(0, "ProfitValue", OBJPROP_COLOR, textColor);

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

//+------------------------------------------------------------------+
//| OnCalculate関数（インジケーターに必須）                           |
//+------------------------------------------------------------------+
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[])
{
   return(rates_total);
}</code></pre></div>



<p>このインジケーターでは、OrderSymbol関数を使って<strong>自分の通貨ペアのポジションだけの損益を合計</strong>しています。</p>



<p>スワップや手数料も含めた正確な損益を表示できるので、<strong>複数の通貨ペアでポジションを持っている場合でも、通貨ペアごとの損益を把握</strong>することができます。</p>



<p>　</p>



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



<p>今回は、OrderSymbol関数の使い方について解説しました。</p>



<p>　</p>



<p>OrderSymbol関数のポイントをまとめると、以下の通りです。</p>



<ul class="wp-block-list">
<li><strong>OrderSymbol関数</strong>は、保有ポジションの通貨ペア名を取得する関数</li>
<li>返り値は<strong>string型</strong>で、引数はない</li>
<li>使用する前に必ず<strong>OrderSelect関数</strong>でポジションを選択しておく</li>
<li><strong>Symbol関数</strong>と組み合わせることで、自動売買が動いている通貨ペアのポジションだけを操作できる</li>
<li><strong>OrderMagicNumber関数</strong>と組み合わせることで、さらに安全にポジションを管理できる</li>
</ul>



<p>　</p>



<p><strong><span class="marker-under-red">OrderSymbol関数を正しく使うことで、別の通貨ペアのポジションを誤って決済してしまうトラブルを防ぐことができます。</span></strong></p>



<p>自動売買を作るときは、必ずOrderSymbol関数で通貨ペアのチェックを入れるようにしましょう。</p>
<p>投稿 <a href="https://mql-programing.com/archives/775/ordersymbol/">【MQL4関数】OrderSymbol関数の使い方！正しくポジションを決済する方法</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
		<item>
		<title>【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方</title>
		<link>https://mql-programing.com/archives/712/orderselect/</link>
		
		<dc:creator><![CDATA[朝日奈りさ]]></dc:creator>
		<pubDate>Sat, 24 Apr 2021 06:05:08 +0000</pubDate>
				<category><![CDATA[【中級編】MQLプログラムの読み方・書き方]]></category>
		<category><![CDATA[注文関係]]></category>
		<category><![CDATA[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderSelect]]></category>
		<guid isPermaLink="false">https://mql-programing.com/?p=712</guid>

					<description><![CDATA[<p>OrderSelect関数とは 自動売買システムに保有ポジションを決済させたいですよね！ 決済するためには、保有ポジションを選択する必要があります。 そこで OrderSelect関数を使いましょう。 　 OrderSe [&#8230;]</p>
<p>投稿 <a href="https://mql-programing.com/archives/712/orderselect/">【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></description>
										<content:encoded><![CDATA[
<div class="wp-block-cocoon-blocks-balloon-ex-box-1 speech-wrap sb-id-11 sbs-stn sbp-l sbis-cb cf block-box"><div class="speech-person"><figure class="speech-icon"><img decoding="async" src="https://mql-programing.com/main29/wp-content/uploads/2021/10/アイコン.png" alt="朝日奈りさ" class="speech-icon-image"/></figure><div class="speech-name">朝日奈りさ</div></div><div class="speech-balloon">
<p>自動売買で保有ポジションを選択するにはどうしたらいいの？</p>
</div></div>



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



<p>自動売買システムに保有ポジションを決済させたいですよね！</p>



<p>決済するためには、保有ポジションを<strong>選択する</strong>必要があります。</p>



<p>そこで OrderSelect関数を使いましょう。</p>



<p>　</p>



<p><strong><span class="marker-under-red">OrderSelect関数は、保有ポジションを１つ選択する関数です。</span></strong></p>



<p>選択することで、そのポジションの情報を取得することができます。</p>



<p>例えば、以下の情報を取得できます。</p>



<p>・注文種別<br>・ロット数<br>・チケット番号<br>・注文日時　　　etc&#8230;</p>



<p>　</p>



<p>ちなみに OrderSelect関数は、あくまで保有ポジションを選択するだけの関数です。</p>



<p>OrderSelect関数を使って、情報を取得することはできないので、ご注意ください。</p>



<p>　</p>



<p>またOrderSelect関数は、保有ポジションの情報を取得するだけでなく、<strong><span class="marker-under-red">決済するときにも必ず使用する関数</span></strong>です。</p>



<p>自動売買ではトレードの基本となる関数なので、基本的な書き方をマスターしましょう。</p>



<p>　</p>



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



<p>OrderSelect関数の書き方は、関数の書き方と同じです。</p>



<p>もし関数の使い方をマスターしていない方は、こちらの記事が参考になります。</p>



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

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



<p>　</p>



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



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



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



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool  OrderSelect( ①, ②, ③);</code></pre></div>



<p>　</p>



<p>返り値は bool型で、引数は３つあります。</p>



<p>まずは返り値から見ていきましょう。</p>



<p>　</p>



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



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



<p>「true」または「false」が返ってきます。</p>



<p>数値にすると「１」または「０」が返ってきます。</p>



<p>　</p>



<p><strong>正常にポジションを選択できた場合は、「<span class="red">true</span>」が返ってきます。</strong></p>



<p><strong>正常にポジションを選択できなかった場合は、「<span class="blue">false</span>」が返ってきます。</strong></p>



<p>　</p>



<p>このように OrderSelect関数は、bool型が返り値となっています。</p>



<p>　</p>



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



<p>OrderSelect関数の引数は３つです。</p>



<p>まずは一覧で見てみましょう。</p>



<figure class="wp-block-table"><table><tbody><tr><td><strong>番号</strong></td><td><strong>データ型</strong></td><td><strong>引数名</strong></td><td><strong>内容</strong></td></tr><tr><td>①</td><td>int</td><td>index</td><td>以下のどちらかを設定<br>・インデックス<br>・チケット番号</td></tr><tr><td>②</td><td>int</td><td>select</td><td>以下から選択方法を設定（上記のindexに合わせる）<br>・インデックス<br>・チケット番号</td></tr><tr><td>③</td><td>int</td><td>pool</td><td>以下のどちらかを設定<br>・現在保有しているポジション<br>・過去保有していたポジション</td></tr></tbody></table></figure>



<p>　</p>



<p>１つ１つ見ていきながら、一緒に OrderSelect関数を作っていきましょう。</p>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc6">①index</span></h4>



<p>indexは、ポジションを選択するために、<strong><span class="marker-under-red">ポジションの番号を設定します。</span></strong></p>



<p>番号には以下の２種類があります。</p>



<p><strong>・インデックス<br>・チケット番号</strong></p>



<p>　</p>



<p><strong>インデックスとは、注文するときに自動的に割り振られた<span class="marker-under">識別番号</span>です。</strong></p>



<p>保有しているポジションが１つの場合、「０」が割り振られます。</p>



<p>その後、ポジションが増えるごとに １、２、３・・・と順番に割り振られる番号になります。</p>



<p>　</p>



<p><strong>チケット番号とは、現在・過去に関わらず、ポジションに自動的に割り振られた<span class="marker-under">固有番号</span>です。</strong></p>



<p>チケット番号は、ポジションによって全て異なっているため、同じ番号のポジションはありません。</p>



<p>そのため桁数が多く、FX会社によって異なりますが、８桁くらいの番号になります。</p>



<p>　</p>



<p><strong><span class="marker-under-red">たいていの自動売買システムは、インデックスを使用しています。</span></strong></p>



<p>インデックスの方が分かりやすいので、インデックスを使用すると良いでしょう。</p>



<p>　</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool select = OrderSelect( 0, ②, ③);</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc7">②select</span></h4>



<p>selectは OrderSelect関数がポジションを選択するときの、選択方法を設定します。</p>



<p>こちらも以下の２つから選びます。</p>



<p><strong>・インデックス（SELECT_BY_POS）<br>・チケット番号（SELECT_BY_TICKET）</strong></p>



<p>　</p>



<p>もし ①index の引数で、インデックス番号を設定している場合、<strong>「SELECT_BY_POS」</strong>を選択します。</p>



<p>チケット番号を設定している場合、<strong>「SELECT_BY_TICKET」</strong>を選択します。</p>



<p>　</p>



<p><strong><span class="marker-under-red">このように ①index の設定内容によって決まるので、してほしい選択方法を設定しましょう。</span></strong></p>



<p>ここでは、インデックス番号を設定しますので、以下のように書きます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool select = OrderSelect( 0, SELECT_BY_POS, ③);</code></pre></div>



<p>　</p>



<h4 class="wp-block-heading"><span id="toc8">③pool</span></h4>



<p>poolは、どんな状態のポジションから選択したいのかを設定します。</p>



<p>設定値は以下の２つです。</p>



<p><strong>・現在のポジションから選択（MODE_TRADES）<br>・過去のポジションから選択（MODE_HISTORY）</strong></p>



<p>　</p>



<p>例えば、現在保有しているポジションまたは、予約しているポジションから選択したい場合は、<strong>「MODE_TRADES」</strong>を設定します。</p>



<p>過去に決済したポジションまたは、キャンセルしたポジションから選択したい場合は、<strong>「MODE_HISTORY」</strong>を設定します。</p>



<p>　</p>



<p>ここでは、保有ポジションから選択したいので、以下のように書きます。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>bool select = OrderSelect( 0, SELECT_BY_POS, MODE_TRADES);</code></pre></div>



<p>　</p>



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



<p>OrderSelect関数の基本的な書き方を解説しましたが、ここからは具体的な使い方について解説していきます。</p>



<p>OrderSelect関数はポジションを１つだけ選択する関数なので、<strong>for文を使って全てのポジションを選択する方法</strong>がよく使われます。</p>



<p>そのとき、for分の条件式に保有ポジション数が必要となりますので、<strong>OrdersTotal関数と組み合わせて使う</strong>場合が多いです。</p>



<p>例えば以下のようなプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>//保有ポジションを一つずつチェックしていく
for( int i = OrdersTotal() - 1; i &gt;= 0; i--)
{
   //保有ポジションを一つ選択
   if( OrderSelect( i, SELECT_BY_POS, MODE_TRADES))
   {
      //ここにポジションを操作するプログラムを書く
   }
}</code></pre></div>



<p><a href="https://mql-programing.com/main29/wp-content/uploads/2022/01/orderSelect-sample.txt">サンプルプログラムはこちら</a></p>



<p>　</p>



<p>上記のように、for文で１つずつポジションを選択し、ポジションを決済させたり、情報を取得したりします。</p>



<p>この書き方は、自動売買を作るときによく使う書き方なので、どこかにコピーしておくと良いでしょう。</p>



<p>　</p>



<p>OrdersTotal関数の詳しい使い方は、こちらの記事が参考になります。</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/orderstotal/" title="【MQL4関数】OrdersTotal関数の使い方！保有ポジション数の取得のやり方" 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/04/OrdersTotal.jpg?fit=1200%2C675&#038;ssl=1" alt="" class="blogcard-thumb-image external-blogcard-thumb-image" width="160" height="90" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQL4関数】OrdersTotal関数の使い方！保有ポジション数の取得のやり方</div><div class="blogcard-snippet external-blogcard-snippet">目次 OrdersTotal関数とはOrdersTotal関数の使用方法と注意点まとめ OrdersTotal関数とは 自動売買でトレードするとき、保有ポジション数をチェックしたいですよね！ そのときに OrdersTo</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/705/orderstotal/" alt="" class="blogcard-favicon-image external-blogcard-favicon-image" width="16" height="16" /></div><div class="blogcard-domain external-blogcard-domain">mql-programing.com</div></div></div></div></a>
</div></figure>



<p>　</p>



<h2 class="wp-block-heading"><span id="toc10">OrderSelect関数の実用的なプログラム例</span></h2>



<p>ここからは、OrderSelect関数を使った実用的なプログラム例をいくつかご紹介します。</p>



<p>実際のEA開発でよく使うパターンなので、ぜひ参考にしてみてください。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc11">例１：自分のEAのポジションだけを選択する</span></h3>



<p>複数のEAを同時に稼働させている場合、自分のEAが出した注文だけを対象にしたいですよね。</p>



<p>そんなときは、<strong>マジックナンバーと通貨ペアで絞り込む方法</strong>が定番です。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// マジックナンバーの定義（EAごとに固有の番号を設定する）
#define MAGIC_NUMBER 12345

//+------------------------------------------------------------------+
//| 自分のEAが保有しているポジション数をカウントする関数             |
//+------------------------------------------------------------------+
int CountMyPositions()
{
   int count = 0; // カウント用の変数を初期化

   // 保有ポジションを後ろから順にチェックしていく
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを1つ選択する
      if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
      {
         // マジックナンバーが自分のEAのものかチェック
         if(OrderMagicNumber() != MAGIC_NUMBER) continue;

         // 通貨ペアが現在のチャートと一致しているかチェック
         if(OrderSymbol() != Symbol()) continue;

         // 両方一致した場合のみカウントを増やす
         count++;
      }
   }

   return count; // 自分のEAのポジション数を返す
}

//+------------------------------------------------------------------+
//| OnTick：ティックごとに呼ばれる関数                               |
//+------------------------------------------------------------------+
void OnTick()
{
   // 自分のEAのポジション数を取得
   int myPositions = CountMyPositions();

   // ログに出力して確認する
   Print("自分のEAの保有ポジション数: ", myPositions);

   // ポジションがなければ新規注文を検討する、など
   if(myPositions == 0)
   {
      // ここにエントリー条件を書く
   }
}</code></pre></div>



<p>　</p>



<p>このように<strong>マジックナンバー</strong>と<strong>通貨ペア</strong>の2つでフィルタリングすることで、他のEAや手動トレードのポジションを誤って操作するのを防ぐことができます。</p>



<p>EA開発では必須テクニックなので、覚えておきましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc12">例２：保有ポジションをすべて決済する</span></h3>



<p>特定の条件になったときに、自分のEAの保有ポジションを<strong>すべて一括決済</strong>したい場面はよくあります。</p>



<p>以下は、OrderSelect関数とOrderClose関数を組み合わせた全決済のプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// マジックナンバーの定義
#define MAGIC_NUMBER 12345

//+------------------------------------------------------------------+
//| 自分のEAの保有ポジションをすべて決済する関数                     |
//+------------------------------------------------------------------+
void CloseAllMyPositions()
{
   // 後ろから順にループする（決済するとインデックスがずれるため）
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを1つ選択する
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

      // 自分のEAのマジックナンバーでなければスキップ
      if(OrderMagicNumber() != MAGIC_NUMBER) continue;

      // 現在のチャートの通貨ペアでなければスキップ
      if(OrderSymbol() != Symbol()) continue;

      // 注文種別を取得する
      int type = OrderType();

      // 買いポジション（OP_BUY）の場合
      if(type == OP_BUY)
      {
         // Bid価格で決済する
         bool result = OrderClose(
            OrderTicket(),   // チケット番号
            OrderLots(),     // ロット数
            MarketInfo(Symbol(), MODE_BID), // 現在のBid価格
            3,               // スリッページ（3ポイント）
            clrRed           // チャート上の矢印の色
         );

         // 決済結果をログに出力
         if(result)
            Print("買いポジション決済成功: チケット=", OrderTicket());
         else
            Print("買いポジション決済失敗: エラー=", GetLastError());
      }
      // 売りポジション（OP_SELL）の場合
      else if(type == OP_SELL)
      {
         // Ask価格で決済する
         bool result = OrderClose(
            OrderTicket(),   // チケット番号
            OrderLots(),     // ロット数
            MarketInfo(Symbol(), MODE_ASK), // 現在のAsk価格
            3,               // スリッページ（3ポイント）
            clrBlue          // チャート上の矢印の色
         );

         // 決済結果をログに出力
         if(result)
            Print("売りポジション決済成功: チケット=", OrderTicket());
         else
            Print("売りポジション決済失敗: エラー=", GetLastError());
      }
   }
}

//+------------------------------------------------------------------+
//| OnTick：ティックごとに呼ばれる関数                               |
//+------------------------------------------------------------------+
void OnTick()
{
   // 例：金曜日の22時以降になったら全決済する（週末持ち越し防止）
   if(DayOfWeek() == 5 && Hour() >= 22)
   {
      CloseAllMyPositions();
   }
}</code></pre></div>



<p>　</p>



<p><strong><span class="marker-under-red">ポイントは、for文を後ろから回している点です。</span></strong></p>



<p>決済するとインデックス番号がずれるため、前から回すとポジションを飛ばしてしまう場合があります。</p>



<p>必ず後ろから（OrdersTotal() &#8211; 1 から 0 に向かって）ループさせましょう。</p>



<p>　</p>



<h3 class="wp-block-heading"><span id="toc13">例３：保有ポジションの合計損益を計算する</span></h3>



<p>自分のEAの<strong>保有ポジション全体の損益</strong>を把握して、一定の利益・損失に達したら全決済する──そんなロジックを組むときに使えるプログラムです。</p>



<div class="hcb_wrap"><pre class="prism line-numbers lang-cpp" data-lang="C++"><code>// マジックナンバーの定義
#define MAGIC_NUMBER 12345

//+------------------------------------------------------------------+
//| 自分のEAの保有ポジション合計損益を取得する関数                   |
//| 戻り値：合計損益（通貨単位。例：ドル口座なら米ドル）             |
//+------------------------------------------------------------------+
double GetTotalProfit()
{
   double totalProfit = 0.0; // 合計損益を格納する変数

   // 保有ポジションを後ろから順にチェック
   for(int i = OrdersTotal() - 1; i >= 0; i--)
   {
      // ポジションを選択する
      if(!OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) continue;

      // マジックナンバーが異なればスキップ
      if(OrderMagicNumber() != MAGIC_NUMBER) continue;

      // 通貨ペアが異なればスキップ
      if(OrderSymbol() != Symbol()) continue;

      // 買い or 売りポジションのみ対象（待機注文は除外する）
      if(OrderType() != OP_BUY && OrderType() != OP_SELL) continue;

      // OrderProfit()で含み損益、OrderSwap()でスワップ、
      // OrderCommission()で手数料を取得し、すべて合算する
      totalProfit += OrderProfit() + OrderSwap() + OrderCommission();
   }

   return totalProfit; // 合計損益を返す
}

//+------------------------------------------------------------------+
//| OnTick：ティックごとに呼ばれる関数                               |
//+------------------------------------------------------------------+
void OnTick()
{
   // 合計損益を取得
   double profit = GetTotalProfit();

   // チャート左上にコメントとして表示
   Comment("合計損益: ", DoubleToString(profit, 2), " ", AccountCurrency());

   // 例：合計利益が5000円以上になったら全決済
   if(profit >= 5000.0)
   {
      Print("目標利益に到達！全決済を実行します。合計損益=", profit);
      // ここで全決済関数（例２のCloseAllMyPositions）を呼び出す
      // CloseAllMyPositions();
   }

   // 例：合計損失が-3000円以下になったら損切り全決済
   if(profit <= -3000.0)
   {
      Print("損切りラインに到達！全決済を実行します。合計損益=", profit);
      // ここで全決済関数（例２のCloseAllMyPositions）を呼び出す
      // CloseAllMyPositions();
   }
}</code></pre></div>



<p>　</p>



<p><strong>OrderProfit()</strong>で含み損益、<strong>OrderSwap()</strong>でスワップポイント、<strong>OrderCommission()</strong>で取引手数料を取得できます。</p>



<p>これら3つを合算することで、<strong><span class="marker-under-red">実質的な損益</span></strong>を正確に把握することができます。</p>



<p>　</p>



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



<p>OrderSelect関数は、保有ポジションを１つ選択する関数です。</p>



<p>選択したポジションの情報取得や決済を行うために、必ず使用する重要な関数です。</p>



<p>　</p>



<p>今回のポイントをまとめると以下の通りです。</p>



<p><strong>・OrderSelect関数は保有ポジションを１つ選択する関数</strong><br><strong>・返り値はbool型（true / false）</strong><br><strong>・引数は「インデックスまたはチケット番号」「選択方法」「ポジションの状態」の３つ</strong><br><strong>・for文とOrdersTotal関数を組み合わせて使うのが基本</strong><br><strong>・マジックナンバーと通貨ペアでフィルタリングするのが実践的</strong><br><strong>・ループは必ず後ろから回す（決済時のインデックスずれ防止）</strong></p>



<p>　</p>



<p>OrderSelect関数は自動売買の基本中の基本となる関数です。</p>



<p>ぜひ今回ご紹介したサンプルコードを参考に、実際にプログラムを書いて動かしてみてください。</p>
<p>投稿 <a href="https://mql-programing.com/archives/712/orderselect/">【MQL4関数】OrderSelect関数の使い方！保有ポジションの選択のやり方</a> は <a href="https://mql-programing.com">自動売買を作ろう！</a> に最初に表示されました。</p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
