<?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>OrderTicket アーカイブ - 自動売買を作ろう！</title>
	<atom:link href="https://mql-programing.com/archives/tag/orderticket/feed/" rel="self" type="application/rss+xml" />
	<link>https://mql-programing.com/archives/tag/orderticket/</link>
	<description>MQLプログラミング学習サイト</description>
	<lastBuildDate>Tue, 31 Mar 2026 12:26:32 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=7.0</generator>

<image>
	<url>https://mql-programing.com/main29/wp-content/uploads/2021/02/cropped-ブログアイコン-32x32.jpg</url>
	<title>OrderTicket アーカイブ - 自動売買を作ろう！</title>
	<link>https://mql-programing.com/archives/tag/orderticket/</link>
	<width>32</width>
	<height>32</height>
</image> 
	<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[MQL]]></category>
		<category><![CDATA[リファレンス]]></category>
		<category><![CDATA[自動売買]]></category>
		<category><![CDATA[注文]]></category>
		<category><![CDATA[OrderTicket]]></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 class="wp-block-paragraph">ポジションのチケット番号を使いたいけど、どうしたら取得できるの？</p>
</div></div>



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



<p class="wp-block-paragraph"><strong>OrderTicket関数は、ポジションのチケット番号を返す関数です。</strong></p>



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



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



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



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



<p class="wp-block-paragraph">OrderTicket関数の使い方は、基本的な関数と同じです。</p>



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



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

<a href="https://mql-programing.com/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 fetchpriority="high" 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="320" height="180" /></figure><div class="blogcard-content external-blogcard-content"><div class="blogcard-title external-blogcard-title">【MQLプログラミング基礎】関数は難しい？関数の使い方を理解しよう！プログラム例あり</div><div class="blogcard-snippet external-blogcard-snippet">関数とは？ 「プログラムは、何度も同じことを書かないといけない」 と思っている方、ぜひ関数を使ってみてください。 関数とは、何度も繰り返すプログラムを、まとめた状態のものです。 事前に、まとまりを作っておくことで、同じプ</div></div><div class="blogcard-footer external-blogcard-footer cf"><div class="blogcard-site external-blogcard-site"><div class="blogcard-favicon external-blogcard-favicon"><img decoding="async" src="https://www.google.com/s2/favicons?domain=https://mql-programing.com/archives/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 class="wp-block-paragraph">　</p>



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



<p class="wp-block-paragraph">OrderTicket関数の基本的な書き方は以下の通りです。</p>



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



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



<p class="wp-block-paragraph">このように返り値は int型で、引数はありません。</p>



<p class="wp-block-paragraph">まずは返り値を見ていきましょう。</p>



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



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



<p class="wp-block-paragraph">OrderTicket関数の返り値は int型です。</p>



<p class="wp-block-paragraph">チケット番号が返ってきます。</p>



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



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



<p class="wp-block-paragraph">複数ポジションを保有している状況で、最初に建てた（最も古い）ポジションだけを決済したいケースがあります。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 class="wp-block-paragraph"><strong>ポイント：</strong>ループの中でOrderOpenTime関数を比較して最も古いポジションのチケット番号を特定し、ループ後にまとめて決済します。探索と決済を分離することで、ループ中のインデックスずれを気にする必要がなくなります。</p>



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



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



<p class="wp-block-paragraph">含み益が伸びたときに、ストップロスを利益方向に引き上げる「トレーリングストップ」は人気の手法です。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 class="wp-block-paragraph"><strong>ポイント：</strong>OrderModify関数の第1引数にはチケット番号が必要です。OrderTicket関数で取得した番号をそのまま渡すことで、ポジションごとに正確なSL更新ができます。Print関数でチケット番号を出力すれば、どのポジションのSLが動いたかログで確認できるので、デバッグにも役立ちます。</p>



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



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



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



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



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



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



<p class="wp-block-paragraph">使い方のポイントをまとめると以下の通りです。</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 class="wp-block-paragraph">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>
	</channel>
</rss>
