English Deutsch
preview
MQL5取引ツールキット(第7回):直近でキャンセルされた予約注文に関する関数で履歴管理EX5ライブラリを拡張

MQL5取引ツールキット(第7回):直近でキャンセルされた予約注文に関する関数で履歴管理EX5ライブラリを拡張

MetaTrader 5 | 3 6月 2025, 08:08
41 0
Wanateki Solutions LTD
Kelvin Muturi Muigua

はじめに

本連載を通じて、私たちは包括的な取引用EX5ライブラリ群の構築に注力してきました。これらのライブラリはMQL5アプリケーションの開発を効率化し、取引操作や注文・取引・ポジションの履歴データ管理にかかる時間と労力を大幅に削減します。適切に構造化された直感的な関数を提供することで、複雑な処理を簡素化し、開発者が取引履歴を正確かつ効率的にシームレスに扱えるよう支援します。

今回の記事では、履歴管理EX5ライブラリの最後のモジュール開発を完了させます。このモジュールは、直近でキャンセルされた予約注文に関連するプロパティの取得および格納を扱うもので、MQL5言語においてこうした履歴データを単純な1行の関数で扱う仕組みがないという制約に対応しています。このギャップを埋めることで、キャンセル済みの予約注文情報を効率的に扱える、開発者にとって使いやすいソリューションを提供できます。

このモジュールの目的は、キャンセルされた予約注文の銘柄、始値、pips単位のストップロスやテイクプロフィット、時間に関する期間情報など重要な情報を簡潔かつ効果的に取得・保存できるようにすることです。こうした機能を使いやすい関数群にまとめることで、最小限の手間で必要なデータにアクセス可能となり、取引履歴データを正確に扱うMQL5アプリケーションを開発する際の必須ツールとなります。取引パフォーマンスの分析に興味がある方にも、このモジュールは処理を大幅に簡略化し、本質的な分析に集中できる環境を提供します。

まずは、前回の記事で作成したHistoryManager.mq5ファイルを開いてください。そこでは、直近で約定された予約注文を扱う関数群を実装しました。今回からは、キャンセルされた予約注文の処理の中核を担うGetLastCanceledPendingOrderData関数の実装を開始します。作業に入る前に、前回の記事末尾に添付されているHistoryManager.mq5のソースファイルをダウンロード済みであることを必ず確認してください

ファイルの準備ができたら、前回の記事で作業を終えた箇所を開いてください。具体的にはLastFilledPendingOrderComment関数の直下に新しいコードを追加していきます。こうすることで、新機能が関連する既存機能と論理的にまとまり、将来的にライブラリを見通しよく管理・拡張しやすくなります。


メインコンテンツ

  1. 直近でキャンセルされた予約注文のデータを取得する
  2. 直近でキャンセルされた予約注文のタイプを取得する
  3. 直近でキャンセルされた予約注文のシンボルを取得する
  4. 直近でキャンセルされた予約注文のチケットを取得する
  5. 直近でキャンセルされた予約注文の価格オープンを取得する
  6. 直近でキャンセルされた予約注文のストップロス価格を取得する
  7. 直近でキャンセルされた予約注文の利益確定価格を取得する
  8. 直近でキャンセルされた予約注文のストップロスピップを取得する
  9. 直近でキャンセルされた予約注文の利益確定ピップを取得する
  10. 直近でキャンセルされた予約注文の時刻設定を取得する
  11. 直近でキャンセルされた予約注文の完了時間を取得する
  12. 直近でキャンセルされた予約注文の有効期限を取得する
  13. 直近でキャンセルされた予約注文のポジションIDを取得する
  14. 直近でキャンセルされた予約注文の魔法を取得する
  15. 直近でキャンセルされた予約注文の理由を取得する
  16. 直近でキャンセルされた予約注文のタイプの充足を取得する
  17. 直近でキャンセルされた予約注文のタイプの時間を取得する
  18. 直近でキャンセルされた予約注文のコメントを取得する
  19. 結論



GetLastCanceledPendingOrderData関数

GetLastCanceledPendingOrderData関数は、直近でキャンセルされた予約注文の詳細を取得し、指定された参照変数getLastCanceledPendingOrderDataにその情報を格納します。この関数はFetchHistoryByCriteria関数に依存しており、過去の取引データにアクセスして関連するデータセットを分析することで、直近でキャンセルされた予約注文を特定します。該当するデータが見つからなかった場合は、エラーメッセージをログに記録し、falseを返します。正常に取得できた場合は、取得した情報を参照変数に格納し、trueを返します。

まずは、関数の定義(シグネチャ)の作成から始めましょう。GetLastCanceledPendingOrderData関数は、外部からの利用を想定しており、他のMQL5プログラムでインポートして使用できるようにするため、exported指定で定義されています。

bool GetLastCanceledPendingOrderData(PendingOrderData &getLastCanceledPendingOrderData) export
  {
//-- Function implementation will be explained step by step below.
  }

FetchHistoryByCriteria関数にGET_PENDING_ORDERS_HISTORY_DATA引数を指定して、予約注文の履歴を取得しようとします。これにより、キャンセルされた予約注文に関する必要なデータへ関数がアクセスできるようになります。

FetchHistoryByCriteria関数がfalseを返した場合、それは利用可能な取引履歴が存在しないことを示しています。この場合、デバッグを支援するためにPrint関数を使ってエラーメッセージをログに記録します。その後、関数はfalseを返し、データの取得に失敗したことを示します。

if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA))
  {
   Print(__FUNCTION__, ": No trading history available. Last canceled pending order can't be retrieved.");
   return(false);
  }

履歴データが取得できたら、GetTotalDataInfoSize関数を使用して予約注文の総数を計算します。この値を使用してpendingOrderInfo配列をループし、直近でキャンセルされた予約注文を特定します。

次に、pendingOrderInfo配列をループし、ORDER_STATE_CANCELED状態の注文を探します。最初に一致した注文の情報をgetLastCanceledPendingOrderData変数に格納します。ループでは各注文の状態を確認し、キャンセルされた注文が見つかると、その情報を参照変数に格納してループを終了します。最後に、直近のキャンセル済み予約注文のデータを格納した後、この関数はtrueを返し、操作が正常に完了したことを示します。

int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA);
for(int x = 0; x < totalPendingOrderInfo; x++)
  {
   if(pendingOrderInfo[x].state == ORDER_STATE_CANCELED)
     {
      getLastCanceledPendingOrderData = pendingOrderInfo[x];
      break;
     }
  }
return(true);

履歴データが存在しない場合、Print関数を使用してエラーメッセージがログに記録されます。このメッセージには、デバッグ時の識別を容易にするために関数名(__FUNCTION__)が含まれています。関数は、操作が失敗した場合でも参照変数が変更されないようにし、入力の整合性を維持します。

以下はGetLastCanceledPendingOrderData関数の完全な実装です。

bool GetLastCanceledPendingOrderData(PendingOrderData &getLastCanceledPendingOrderData) export
  {
   if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA))
     {
      Print(__FUNCTION__, ": No trading history available. Last canceled pending order can't be retrieved.");
      return(false);
     }

//-- Save the last canceled pending order data in the referenced getLastCanceledPendingOrderData variable
   int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA);
   for(int x = 0; x < totalPendingOrderInfo; x++)
     {
      if(pendingOrderInfo[x].state == ORDER_STATE_CANCELED)
        {
         getLastCanceledPendingOrderData = pendingOrderInfo[x];
         break;
        }
     }
   return(true);
  }


LastCanceledPendingOrderType関数

LastCanceledPendingOrderType関数は、直近でキャンセルされた予約注文の注文タイプを取得し、それを参照変数lastCanceledPendingOrderTypeに格納する役割を持ちます。この変数は入力として関数に渡され、取得した注文タイプを格納します。

この処理を実現するために、一時的なPendingOrderData型の変数lastCanceledPendingOrderInfoが宣言され、最後にキャンセルされた未決済注文の詳細を保持します。その後、関数はGetLastCanceledPendingOrderDataを呼び出して必要な注文情報を取得します。

取得に成功した場合は、lastCanceledPendingOrderInfotypeフィールドが抽出され、lastCanceledPendingOrderTypeに代入されます。その後、関数は処理が正常に行われたことを示すtrueを返します。反対に、取得に失敗した場合はfalseを返し、lastCanceledPendingOrderType変数の値は変更されません。

以下はLastCanceledPendingOrderType関数の完全な実装です。

bool LastCanceledPendingOrderType(ENUM_ORDER_TYPE &lastCanceledPendingOrderType) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderType = lastCanceledPendingOrderInfo.type;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderSymbol関数

LastCanceledPendingOrderSymbol関数は、直近でキャンセルされた予約注文にリンクされた取引銘柄名を取得するための関数です。この銘柄は、参照渡しされた変数lastCanceledPendingOrderSymbolに格納され、この特定プロパティへ簡単にアクセスできる手段を提供します。この関数は、必要な注文の詳細を取得するためにGetLastCanceledPendingOrderDataユーティリティに依存します。

処理は、GetLastCanceledPendingOrderData関数を呼び出すことで始まります。これによって直近でキャンセルされた予約注文の詳細を取得します。取得が成功した場合は、取り出したデータのsymbolフィールドがlastCanceledPendingOrderSymbolに代入され、関数は成功を示すためにtrueを返します。

一方、データの取得に失敗した場合(たとえば、該当する注文履歴が存在しない場合など)には、参照変数は変更されず、関数は失敗を示すためにfalseを返します。

以下はLastCanceledPendingOrderSymbol関数の完全な実装です。

bool LastCanceledPendingOrderSymbol(string &lastCanceledPendingOrderSymbol) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSymbol = lastCanceledPendingOrderInfo.symbol;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderTicket関数

LastCanceledPendingOrderTicket関数は、直近でキャンセルされた予約注文のチケットを取得し、それを参照渡しされたlastCanceledPendingOrderTicket変数に格納します。この関数は、注文の詳細を取得するためにGetLastCanceledPendingOrderData関数を呼び出します。

データの取得が成功した場合、チケット番号は参照変数に格納され、関数はtrueを返します。処理に失敗した場合は、関数はfalseを返し、変数の内容は変更されません。

以下はLastCanceledPendingOrderTicket関数の完全なコードです。
bool LastCanceledPendingOrderTicket(ulong &lastCanceledPendingOrderTicket) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTicket = lastCanceledPendingOrderInfo.ticket;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderPriceOpen関数

LastCanceledPendingOrderPriceOpen関数は、直近でキャンセルされた予約注文の始値を取得し、それを参照渡しされたlastCanceledPendingOrderPriceOpen変数に格納します。この関数は、注文の詳細を取得するためにGetLastCanceledPendingOrderDataを呼び出します。

取得に成功すると、始値は指定された変数に保存され、関数はtrueを返します。取得に失敗した場合は、関数はfalseをを返し、変数の内容は変更されません。

以下はLastCanceledPendingOrderPriceOpen関数の完全な実装です。

bool LastCanceledPendingOrderPriceOpen(double &lastCanceledPendingOrderPriceOpen) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPriceOpen = lastCanceledPendingOrderInfo.priceOpen;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderSlPrice関数

LastCanceledPendingOrderSlPrice関数は、直近でキャンセルされた予約注文のストップロス価格を取得し、それを参照渡しされたlastCanceledPendingOrderSlPrice変数に格納します。この関数は、注文の詳細を取得するためにGetLastCanceledPendingOrderData関数を使用します。

取得に成功した場合、ストップロス価格は参照変数に保存され、関数はtrueを返します。処理に失敗した場合は、関数はfalseを返し、変数値は変更されません。

以下はLastCanceledPendingOrderSlPrice関数の完全な実装です。

bool LastCanceledPendingOrderSlPrice(double &lastCanceledPendingOrderSlPrice) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSlPrice = lastCanceledPendingOrderInfo.slPrice;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderTpPrice関数

LastCanceledPendingOrderTpPrice関数は、直近でキャンセルされた予約注文のテイクプロフィット価格を取得し、それを参照渡しされたlastCanceledPendingOrderTpPrice変数に格納します。この関数は、注文の詳細を取得するためにGetLastCanceledPendingOrderData関数を使用します。

データの取得が成功した場合、利益確定価格は参照変数に保存され、関数はtrueを返します。取得に失敗した場合、関数は変数を変更せずにfalseを返します。

以下はLastCanceledPendingOrderTpPrice関数の完全な実装です。

bool LastCanceledPendingOrderTpPrice(double &lastCanceledPendingOrderTpPrice) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTpPrice = lastCanceledPendingOrderInfo.tpPrice;
      return(true);
     }
   return(false);
  }


直近でキャンセルされた予約注文のストップロスピップ機能

LastCanceledPendingOrderSlPips関数は、直近でキャンセルされた予約注文のストップロス(pips単位)値を取得し、それを参照渡しされたlastCanceledPendingOrderSlPips変数に格納します。GetLastCanceledPendingOrderData関数を利用して、関連する注文の詳細にアクセスし、この特定の値を抽出します。

この関数は、GetLastCanceledPendingOrderDataを呼び出して、直近でキャンセルされた予約注文のデータを取得することから始まります。取得が成功した場合、取得したデータからストップロス(pips単位)値が抽出され、lastCanceledPendingOrderSlPips変数に割り当てられます。この関数はtrueを返すことで成功を示します。

一方、関数が必要なデータを取得できない場合(履歴情報の不足などにより)、lastCanceledPendingOrderSlPips変数の変更を控え、代わりにfalseを返します。

以下はLastCanceledPendingOrderSlPips関数の完全な実装です。

bool LastCanceledPendingOrderSlPips(int &lastCanceledPendingOrderSlPips) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderSlPips = lastCanceledPendingOrderInfo.slPips;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderTpPips関数

LastCanceledPendingOrderTpPips関数は、直近でキャンセルされた予約注文に関連付けられたテイクプロフィット(pips単位)値を取得し、それを参照渡しされたlastCanceledPendingOrderTpPips変数に格納します。この処理を実現するために、関数は必要な注文情報を取得するGetLastCanceledPendingOrderData関数に依存しています。

まず、PendingOrderData型の変数が宣言され、直近でキャンセルされた予約注文の詳細を一時的に保持するために使用されます。その後、GetLastCanceledPendingOrderData関数が呼び出され、この変数に関連するデータが格納されます。操作が成功した場合は、テイクプロフィット(pips単位)値がこの変数から抽出され、lastCanceledPendingOrderTpPips変数に格納されます。関数はその後、成功を示すためにtrueを返します。

しかし、データの取得に失敗した場合は、関数はfalseを返し、参照された変数の内容は変更されません。

以下はLastCanceledPendingOrderTpPips関数の完全な実装です。

bool LastCanceledPendingOrderTpPips(int &lastCanceledPendingOrderTpPips) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTpPips = lastCanceledPendingOrderInfo.tpPips;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderTimeSetup関数

LastCanceledPendingOrderTimeSetup関数は、直近でキャンセルされた予約注文の時間設定を取得し、それを参照渡しされたlastCanceledPendingOrderTimeSetup変数に格納します。この処理を実行するために、関数はGetLastCanceledPendingOrderData関数を使用して、キャンセルされた注文に関する必要な詳細情報へアクセスします。

まず、PendingOrderData型の変数を宣言し、直近でキャンセルされた予約注文のデータを一時的に格納します。次に、GetLastCanceledPendingOrderData関数が呼び出され、この変数に該当する注文の詳細が格納されます。取得に成功した場合は、時間設定の値がこの変数から抽出され、lastCanceledPendingOrderTimeSetup変数に格納されます。その後、関数は操作の成功を示すためにtrueを返します。

一方で、データの取得に失敗した場合は、関数はfalseを返し、lastCanceledPendingOrderTimeSetup変数の内容は変更されません。

以下はLastCanceledPendingOrderTimeSetup関数の完全な実装です。

bool LastCanceledPendingOrderTimeSetup(datetime &lastCanceledPendingOrderTimeSetup) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTimeSetup = lastCanceledPendingOrderInfo.timeSetup;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderTimeDone関数

LastCanceledPendingOrderTimeDone関数は、直近でキャンセルされた予約注文が実行された時刻を取得するように設計されています。この時刻は参照渡しされたlastCanceledPendingOrderTimeDone変数に格納され、特定のデータへ簡単にアクセスできるようになります。関数は、キャンセルされた注文の必要な詳細情報を取得するためにGetLastCanceledPendingOrderDataユーティリティ関数に依存しています。

関数はまず、GetLastCanceledPendingOrderData()を呼び出し、直近でキャンセルされた予約注文の詳細を取得しされます。取得が成功した場合、取得したデータのtimeフィールドがlastCanceledPendingOrderTimeDone変数に代入され、関数は成功を示すためにtrueを返します。

しかし、データの取得が失敗した場合(該当する注文履歴が存在しない場合など)は、参照変数は変更されず、関数はfalseを返して情報取得の失敗を通知します。

キャンセルされるまでの予約注文の合計稼働時間を計算する場合は、この関数とLastCanceledPendingOrderTimeSetup関数を組み合わせて使用すると、注文作成時刻からキャンセル時刻までの期間を求めることができます。

以下はLastCanceledPendingOrderTimeDone関数の完全な実装です。

bool LastCanceledPendingOrderTimeDone(datetime &lastCanceledPendingOrderTimeDone) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTimeDone = lastCanceledPendingOrderInfo.timeDone;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderExpirationTime関数

LastCanceledPendingOrderExpirationTime関数は、直近でキャンセルされた予約注文の有効期限を取得し、それを参照渡しされたlastCanceledPendingOrderExpirationTime変数に格納します。この関数は、注文の詳細を取得するためにGetLastCanceledPendingOrderData()関数を呼び出します。

データの取得が成功した場合、有効期限は参照変数に格納され、関数はtrueを返します。処理に失敗した場合は、関数はfalseを返し、変数値は変更されません。

以下はLastCanceledPendingOrderExpirationTime関数の完全な実装です。
bool LastCanceledPendingOrderExpirationTime(datetime &lastCanceledPendingOrderExpirationTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderExpirationTime = lastCanceledPendingOrderInfo.expirationTime;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderPositionId関数

LastCanceledPendingOrderPositionId関数は、直近でキャンセルされた予約注文のポジションIDを抽出し、参照渡しされたlastCanceledPendingOrderPositionId変数の値をこの値で更新します。この関数は、GetLastCanceledPendingOrderData関数を呼び出して必要なデータにアクセスします。

操作が成功した場合、ポジションIDは参照変数に格納され、関数はtrueを返します。取得に失敗した場合、関数はfalseを返し、この変数の内容は変更されません。

以下はLastCanceledPendingOrderPositionId()関数の完全な実装です。
bool LastCanceledPendingOrderPositionId(ulong &lastCanceledPendingOrderPositionId) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderPositionId = lastCanceledPendingOrderInfo.positionId;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderMagic関数

LastCanceledPendingOrderMagic()関数は、直近でキャンセルされた予約注文に関連付けられたマジックナンバーを取得し、それを参照渡しされたlastCanceledPendingOrderMagic変数に割り当てます。このプロセスでは、必要な詳細を取得するためにGetLastCanceledPendingOrderData()関数に依存します。

データの取得が成功した場合、マジックナンバーは参照変数に格納され、関数はtrueを返します。操作が失敗した場合、関数はfalseを返し、この変数の内容は変更されません。

以下はLastCanceledPendingOrderMagic関数の完全な実装です。
bool LastCanceledPendingOrderMagic(ulong &lastCanceledPendingOrderMagic) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderMagic = lastCanceledPendingOrderInfo.magic;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderReason関数

LastCanceledPendingOrderReason関数は、直近でキャンセルされた予約注文の理由コードを抽出し、それを参照渡しされたlastCanceledPendingOrderReason変数に格納します。この関数は、注文の詳細を取得するためにGetLastCanceledPendingOrderData関数を使用します。

理由コードは、注文がどのように発注されたか、またはなぜトリガーされたかを示します。たとえば、ORDER_REASON_CLIENTはデスクトップ端末から手動で注文が発注されたことを示し、ORDER_REASON_EXPERTはエキスパートアドバイザーによって発注されたことを示します。ORDER_REASON_WEBはWebプラットフォームからの注文であることを表します。その他の考えられる理由としてはストップロスまたはテイクプロフィットによる発動、あるいはストップアウトイベントによるものなどがあります。

データの取得が成功した場合、理由コードは参照変数に保存され、関数はtrueを返します。失敗した場合、関数はこの変数を変更せずにfalseを返します。

以下はLastCanceledPendingOrderReason関数の完全な実装です。

bool LastCanceledPendingOrderReason(ENUM_ORDER_REASON &lastCanceledPendingOrderReason) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderReason = lastCanceledPendingOrderInfo.reason;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderTypeFilling関数

LastCanceledPendingOrderTypeFilling関数は、直近でキャンセルされた予約注文の約定タイプを決定し、参照渡しされたlastCanceledPendingOrderTypeFilling変数に代入します。このために、必要な注文詳細を取得するGetLastCanceledPendingOrderData関数を呼び出します。

約定タイプは、注文の実行方法に関する重要な情報を提供します。「Fill or Kill (FOK)」の場合、注文は要求された価格で完全に約定する必要があり、そうでなければキャンセルされます。「Immediate or Cancel (IOC)」の場合、注文は要求された価格で利用可能な数量のみ即時に約定され、未約定部分は破棄されます。「Return」タイプでは、全数量が利用できない場合に注文を部分的に約定し、残りの未約定予約注文に変換されます。この予約注文は、約定されるか手動もしくはEAによってキャンセルされるまで市場で有効な状態が維持されます。

データ取得操作が成功した場合、約定タイプは指定された変数に格納され、関数はtrueを返します。取得が失敗した場合は、参照変数を変更せずにfalseを返します。

以下はLastCanceledPendingOrderTypeFilling関数の完全な実装です。

bool LastCanceledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastCanceledPendingOrderTypeFilling) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTypeFilling = lastCanceledPendingOrderInfo.typeFilling;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderTypeTime関数

LastCanceledPendingOrderTypeTime関数は、直近でキャンセルされた予約注文の有効時間タイプを抽出し、参照渡しされたlastCanceledPendingOrderTypeTime変数をこの値で更新します。この関数は、注文の詳細を取得するためにGetLastCanceledPendingOrderData関数を使用します。

注文の有効時間タイプは、注文がどのくらいの期間有効であるかを示します。有効時間タイプにはいくつかの種類があり、たとえば、注文は手動でキャンセルされるまで有効な「Good Till Cancel (GTC)」、取引日の終わりに失効する「Good Till Current Trade Day」、特定の日付や時間を過ぎると失効する「Good Till Expired」、そして指定された日の23時59分59秒まで有効である「Good Till Specified Day」があります。ただし、指定時間が取引セッションの外であれば、最も近い取引時間に失効します。

取得に成功した場合、関数は有効時間タイプを参照渡しされた変数に代入し、trueを返します。取得に失敗した場合は、変数を変更せずにfalseを返します。

以下はLastCanceledPendingOrderTypeTime()関数の完全な実装です。

bool LastCanceledPendingOrderTypeTime(datetime &lastCanceledPendingOrderTypeTime) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderTypeTime = lastCanceledPendingOrderInfo.typeTime;
      return(true);
     }
   return(false);
  }


LastCanceledPendingOrderComment関数

LastCanceledPendingOrderComment()関数は、直近でキャンセルされた予約注文に関連付けられたコメントを取得し、それを参照渡しされたlastCanceledPendingOrderComment変数に格納します。この関数は、注文の詳細を取得するためにGetLastCanceledPendingOrderData関数を使用します。

注文データが正常に取得された場合、コメントは参照変数に代入され、関数はtrueを返します。操作が失敗した場合、参照変数は変更されず、関数はfalseを返します。

以下はLastCanceledPendingOrderComment関数の完全な実装です。
bool LastCanceledPendingOrderComment(string &lastCanceledPendingOrderComment) export
  {
   PendingOrderData lastCanceledPendingOrderInfo;
   if(GetLastCanceledPendingOrderData(lastCanceledPendingOrderInfo))
     {
      lastCanceledPendingOrderComment = lastCanceledPendingOrderInfo.comment;
      return(true);
     }
   return(false);
  }


結論

約定済みおよびキャンセル済みの予約注文、取引、ポジションの取引履歴を照会、取得、分類、保存できる包括的な履歴管理ライブラリを開発しました。これは、MQL5における履歴取引データの管理を大幅に簡素化する重要なマイルストーンとなり、開発者に複雑なデータ要件を処理するための多用途で効率的なツールセットを提供します。

このライブラリの特徴は、取引データを管理するための堅牢かつ体系的なフレームワークです。構造化され直感的な機能を備えることで、取引履歴の管理という煩雑な作業をシームレスなプロセスに変換します。このアプローチにより、重要なデータへのアクセス性が向上するだけでなく、パフォーマンス分析ツールの作成、取引戦略の最適化、詳細な履歴レビューなど、さまざまな実務的なシナリオで効果的に活用できるようになります。

本連載の次のステップとして、エンドユーザーがライブラリをプロジェクトにシームレスにインポートして統合できるようにするためのヘッダーファイルを作成します。ヘッダー完成後は、ライブラリの実装方法を紹介し、開発者が容易に機能を自身のコードベースに組み込めるようサポートします。

便宜上、本記事およびこれまでの記事で作成されたすべての関数を含む最新版のHistoryManager.mq5ライブラリソースコードと、コンパイル済みの実行可能バイナリファイルHistoryManager.ex5を本記事末尾に添付しています。次回の記事では、このEX5ライブラリを効果的に活用するための完全な実装ドキュメントと実用的なサンプルを提供し、履歴管理ライブラリを締めくくります。最後までお読みいただきありがとうございました。プロジェクトの最終段階でまたお会いできることを楽しみにしています。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/16906

添付されたファイル |
HistoryManager.mq5 (81.42 KB)
HistoryManager.ex5 (33.63 KB)
プライスアクション分析ツールキットの開発(第9回):External Flow プライスアクション分析ツールキットの開発(第9回):External Flow
本稿では、高度な分析手法として外部ライブラリを活用する、新たなアプローチを紹介します。pandasのようなライブラリは、複雑なデータを処理・解釈するための強力なツールを提供し、トレーダーが市場の動向についてより深い洞察を得られるようにします。このようなテクノロジーを統合することで、生のデータと実用的な戦略との間にあるギャップを埋めることができます。この革新的なアプローチの基盤を築き、テクノロジーと取引の専門知識を融合させる可能性を引き出すために、ぜひご一緒に取り組んでいきましょう。
プライスアクション分析ツールキットの開発(第8回):Metrics Board プライスアクション分析ツールキットの開発(第8回):Metrics Board
最も強力なプライスアクション分析ツールの一つである「Metrics Board」は、ワンクリックで重要な市場指標を即座に表示し、市場分析を効率化するように設計されています。各ボタンには高値・安値のトレンド分析、出来高、その他の主要な指標の解析といった特定の機能が割り当てられています。このツールは、最も必要なタイミングで正確なリアルタイムデータを提供します。この記事では、その機能についてさらに詳しく掘り下げていきましょう。
MQL5とMetaTrader 5のインジケーターの再定義 MQL5とMetaTrader 5のインジケーターの再定義
MQL5でインジケーター情報を収集する革新的なアプローチにより、開発者がカスタム入力をインジケーターに渡して即座に計算をおこなえるようになり、より柔軟で効率的なデータ分析が可能になります。この方法は、従来の制約を超えてインジケーターで処理される情報に対する制御性を高めるため、アルゴリズム取引において特に有用です。
MQL5入門(第11回):MQL5の組み込みインジケーターの操作に関する初心者向けガイド(II) MQL5入門(第11回):MQL5の組み込みインジケーターの操作に関する初心者向けガイド(II)
RSI、MA、ストキャスティクスなどの複数のインジケーターを使用してMQL5でエキスパートアドバイザー(EA)を開発し、隠れた強気および弱気のダイバージェンスを検出する方法を学びます。教育目的で、詳細な例および完全にコメントされたソースコードを用いて、効果的なリスク管理を実装し、取引を自動化する方法をご紹介します。