
MQL5取引ツールキット(第7回):直近でキャンセルされた予約注文に関する関数で履歴管理EX5ライブラリを拡張
はじめに
本連載を通じて、私たちは包括的な取引用EX5ライブラリ群の構築に注力してきました。これらのライブラリはMQL5アプリケーションの開発を効率化し、取引操作や注文・取引・ポジションの履歴データ管理にかかる時間と労力を大幅に削減します。適切に構造化された直感的な関数を提供することで、複雑な処理を簡素化し、開発者が取引履歴を正確かつ効率的にシームレスに扱えるよう支援します。
今回の記事では、履歴管理EX5ライブラリの最後のモジュール開発を完了させます。このモジュールは、直近でキャンセルされた予約注文に関連するプロパティの取得および格納を扱うもので、MQL5言語においてこうした履歴データを単純な1行の関数で扱う仕組みがないという制約に対応しています。このギャップを埋めることで、キャンセル済みの予約注文情報を効率的に扱える、開発者にとって使いやすいソリューションを提供できます。
このモジュールの目的は、キャンセルされた予約注文の銘柄、始値、pips単位のストップロスやテイクプロフィット、時間に関する期間情報など重要な情報を簡潔かつ効果的に取得・保存できるようにすることです。こうした機能を使いやすい関数群にまとめることで、最小限の手間で必要なデータにアクセス可能となり、取引履歴データを正確に扱うMQL5アプリケーションを開発する際の必須ツールとなります。取引パフォーマンスの分析に興味がある方にも、このモジュールは処理を大幅に簡略化し、本質的な分析に集中できる環境を提供します。
まずは、前回の記事で作成したHistoryManager.mq5ファイルを開いてください。そこでは、直近で約定された予約注文を扱う関数群を実装しました。今回からは、キャンセルされた予約注文の処理の中核を担うGetLastCanceledPendingOrderData関数の実装を開始します。作業に入る前に、前回の記事末尾に添付されているHistoryManager.mq5のソースファイルをダウンロード済みであることを必ず確認してください。
ファイルの準備ができたら、前回の記事で作業を終えた箇所を開いてください。具体的にはLastFilledPendingOrderComment関数の直下に新しいコードを追加していきます。こうすることで、新機能が関連する既存機能と論理的にまとまり、将来的にライブラリを見通しよく管理・拡張しやすくなります。
メインコンテンツ
- 直近でキャンセルされた予約注文のデータを取得する
- 直近でキャンセルされた予約注文のタイプを取得する
- 直近でキャンセルされた予約注文のシンボルを取得する
- 直近でキャンセルされた予約注文のチケットを取得する
- 直近でキャンセルされた予約注文の価格オープンを取得する
- 直近でキャンセルされた予約注文のストップロス価格を取得する
- 直近でキャンセルされた予約注文の利益確定価格を取得する
- 直近でキャンセルされた予約注文のストップロスピップを取得する
- 直近でキャンセルされた予約注文の利益確定ピップを取得する
- 直近でキャンセルされた予約注文の時刻設定を取得する
- 直近でキャンセルされた予約注文の完了時間を取得する
- 直近でキャンセルされた予約注文の有効期限を取得する
- 直近でキャンセルされた予約注文のポジションIDを取得する
- 直近でキャンセルされた予約注文の魔法を取得する
- 直近でキャンセルされた予約注文の理由を取得する
- 直近でキャンセルされた予約注文のタイプの充足を取得する
- 直近でキャンセルされた予約注文のタイプの時間を取得する
- 直近でキャンセルされた予約注文のコメントを取得する
- 結論
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を呼び出して必要な注文情報を取得します。
取得に成功した場合は、lastCanceledPendingOrderInfoのtypeフィールドが抽出され、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





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索