
MQL5取引ツールキット(第6回):直近で約定された予約注文に関する関数で履歴管理EX5ライブラリを拡張
はじめに
直近で約定された予約注文の詳細にアクセスすることは、取引ロジックがその注文タイプに依存するシナリオにおいて極めて有用です。たとえば、直近で約定された予約注文が買い指値、売り逆指値、買い逆指値、売り指値、買いストップリミット、売りストップリミットのどれであったかに応じて、エントリーやエグジット戦略を調整することができます。注文の種類を理解することで、市場の状況に関する洞察が得られ、エントリーポイントやエグジットポイントの調整など、アプローチの見直しに役立ちます。
この情報は、過去の取引データを収集・分析して取引システムを最適化する場合や、未決注文がトリガーされてアクティブになったときに、ブローカーがそれをどれだけ迅速に約定・実行したかのデータを集める場合にも重要です。スリッページ、注文の発注から実行までの経過時間、注文が約定した条件などの詳細を確認することで、戦略のパターンや改善点を見つけることができます。また、このデータを使って注文の実行品質を監視することで、注文が期待通りに約定しているかを確認でき、取引の非効率性に対処することが可能になります。このような詳細な分析によって意思決定が強化され、より効果的で堅牢な取引戦略につながります。
この履歴管理EX5ライブラリは、直近で約定された予約注文の詳細およびプロパティを取得するプロセスを簡素化します。1つの関数を呼び出すだけで、取引履歴の検索期間を指定する手間なく、このデータにアクセスできます。EX5ライブラリがその処理をシームレスにおこないます。必要なのは、対象の履歴クエリ関数に、特定の予約注文プロパティを格納するための変数を入力として渡すことだけです。その関数が、取得した詳細を指定した参照変数に格納します。
関数が要求されたデータを正常に取得した場合はtrueを返し、指定された予約注文データが存在しない場合はfalseを返します。この合理化されたアプローチによって、不要な複雑さを排除し、取得したデータの分析や取引戦略への統合に集中することができるため、取引業務の効率と正確性の両方が向上します。
まず、前回の記事でポジション履歴取得関数を作成したHistoryManager.mq5ファイルを開き、GetLastFilledPendingOrderData関数の作成から始めます。前回の記事の末尾に添付されているHistoryManager.mq5のソースファイルをダウンロードしていることを確認してください。前回中断したLastClosedPositionDuration関数の下に、今回の新しいコードを追加していきます。
GetLastFilledPendingOrderData関数
GetLastFilledPendingOrderData関数は、利用可能な取引履歴から直近で約定された予約注文のプロパティを取得する役割を担います。この関数は、約定済みの予約注文が存在するかどうかを履歴データ内で体系的に確認し、該当する注文が見つかった場合には、参照渡しされたgetLastFilledPendingOrderData変数に関連するデータを格納します。
この関数は、必要な取引履歴データを取得するためにFetchHistoryByCriteria関数と連携して動作します。これにより、約定済みの予約注文のみが対象となり、提供された構造体が直近で約定された予約注文のデータで更新されます。
まず、GetLastFilledPendingOrderData関数のシグネチャを定義します。この関数はexportとしてマークされているため、コンパイルされたEX5ライブラリをインポートした任意のMQL5ソースコードファイルからアクセス可能です。この関数は、取得したデータを格納するgetLastFilledPendingOrderData変数を参照します。
bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export { //-- Function logic will be implemented here }
次に、FetchHistoryByCriteria関数を使用し、関数のパラメータとしてGET_PENDING_ORDERS_HISTORY_DATA定数を渡して、必要な予約注文履歴データを取得します。データが見つからない場合は、メッセージを表示してfalseを返します。
if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA)) { Print(__FUNCTION__, ": No trading history available. Last filled pending order can't be retrieved."); return(false); }
データを正常に取得できた場合は、直近で約定された予約注文を検索します。まず、GetTotalDataInfoSize関数を使って予約注文の合計数を取得し、pendingOrderInfo配列をループして約定済みの注文を探します。約定された注文が見つかったら、そのデータをgetLastFilledPendingOrderData構造体に格納します。最終的に、約定済みの予約注文が見つかり、そのデータが格納された場合は関数はtrueを返します。約定済みの予約注文が見つからなかった場合、関数は終了し、falseを返します。
int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA); for(int x = 0; x < totalPendingOrderInfo; x++) { if(pendingOrderInfo[x].state == ORDER_STATE_FILLED) { getLastFilledPendingOrderData = pendingOrderInfo[x]; break; } } return(true);
以下は、すべてのコードセグメントが正しい順序で配置されたGetLastFilledPendingOrderData関数の完全な実装です。
bool GetLastFilledPendingOrderData(PendingOrderData &getLastFilledPendingOrderData) export { if(!FetchHistoryByCriteria(GET_PENDING_ORDERS_HISTORY_DATA)) { Print(__FUNCTION__, ": No trading history available. Last filled pending order can't be retrieved."); return(false); } //-- Save the last filled pending order data in the referenced getLastFilledPendingOrderData variable int totalPendingOrderInfo = GetTotalDataInfoSize(GET_PENDING_ORDERS_HISTORY_DATA); for(int x = 0; x < totalPendingOrderInfo; x++) { if(pendingOrderInfo[x].state == ORDER_STATE_FILLED) { getLastFilledPendingOrderData = pendingOrderInfo[x]; break; } } return(true); }
LastFilledPendingOrderType関数
LastFilledPendingOrderType関数は、直近で約定された予約注文のタイプを判定する役割を果たします。このタイプは、参照渡しされたlastFilledPendingOrderType 変数に格納されます。この関数は、注文の実行タイプを分析したり、特定の注文カテゴリのパフォーマンスを追跡する必要があるアプリケーションにとって不可欠です。
まず、関数のシグネチャを定義します。この関数はexportとしてマークされているため、EX5ライブラリをインポートする任意のMQL5ソースファイルから使用できます。この関数はlastFilledPendingOrderTypeを参照型引数として受け入れ、そこに直近で約定された予約注文のタイプを格納します。
bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export { //-- Function logic will be implemented here }
まず、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言します。この変数は、直近で約定された予約注文の詳細を一時的に格納するためのものです。
PendingOrderData lastFilledPendingOrderInfo;
次に、GetLastFilledPendingOrderData関数を使用して、直近で約定された予約注文の詳細を取得します。操作が成功した場合は、lastFilledPendingOrderInfo構造体からtypeフィールドを抽出し、lastFilledPendingOrderType参照変数に格納してtrueを返します。取得に失敗した場合は、参照変数を更新せずに、データが見つからなかったことを示すためにfalseを返します。
if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderType = lastFilledPendingOrderInfo.type; return(true); } return(false);
以下は、LastFilledPendingOrderType関数の完全な実装です。
bool LastFilledPendingOrderType(ENUM_ORDER_TYPE &lastFilledPendingOrderType) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderType = lastFilledPendingOrderInfo.type; return(true); } return(false); }
LastFilledPendingOrderSymbol関数
LastFilledPendingOrderSymbol関数は、直近で約定された予約注文の銘柄を取得し、参照渡しされたlastFilledPendingOrderSymbol変数に格納します。この関数はlastFilledPendingOrderSymbolを参照型引数として受け入れ、そこに銘柄を格納します。
まず、直近で約定された予約注文の詳細を一時的に保持するために、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言します。次に、GetLastFilledPendingOrderData関数を使用して注文の詳細を取得します。取得に成功した場合は、lastFilledPendingOrderInfoから銘柄を抽出し、lastFilledPendingOrderSymbolに格納してtrueを返します。取得に失敗した場合は、参照変数を更新せずにfalseを返します。
以下は、LastFilledPendingOrderSymbol関数の実装です。
bool LastFilledPendingOrderSymbol(string &lastFilledPendingOrderSymbol) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSymbol = lastFilledPendingOrderInfo.symbol; return(true); } return(false); }
LastFilledPendingOrderTicket関数
LastFilledPendingOrderTicket関数は、直近で約定された予約注文のチケット番号を取得し、参照渡しされたlastFilledPendingOrderTicket変数に格納します。関数はlastFilledPendingOrderTicket変数を引数として受け取り、そこにチケット番号を格納します。
まず、PendingOrderData型の変数lastFilledPendingOrderInfoを定義します。これは直近で約定された予約注文の詳細を一時的に保持するためのコンテナとして機能します。次に、GetLastFilledPendingOrderData関数を呼び出して注文情報を取得します。取得に成功した場合は、lastFilledPendingOrderInfoからチケット番号を抽出し、lastFilledPendingOrderTicket変数に格納してtrueを返し、処理の成功を示します。取得に失敗した場合は、参照変数を更新せずにfalseを返します。
以下は、LastFilledPendingOrderTicket関数の実装です。
bool LastFilledPendingOrderTicket(ulong &lastFilledPendingOrderTicket) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTicket = lastFilledPendingOrderInfo.ticket; return(true); } return(false); }
LastFilledPendingOrderPriceOpen関数
LastFilledPendingOrderPriceOpen関数は、直近で約定された予約注文の始値を取得し、参照渡しされたlastFilledPendingOrderPriceOpen変数に格納します。始値を格納するために、この変数を入力として受け取ります。
まず、直近で約定された予約注文の詳細を一時的に保持するために、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言します。次に、GetLastFilledPendingOrderData関数を使用して注文の詳細を取得します。取得に成功した場合は、lastFilledPendingOrderInfoからpriceOpen を抽出し、それをlastFilledPendingOrderPriceOpenに格納してtrueを返します。取得に失敗した場合は、参照変数を更新せずにfalseを返します。
以下は、LastFilledPendingOrderPriceOpen関数の実装です。
bool LastFilledPendingOrderPriceOpen(double &lastFilledPendingOrderPriceOpen) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderPriceOpen = lastFilledPendingOrderInfo.priceOpen; return(true); } return(false); }
LastFilledPendingOrderSlPrice関数
LastFilledPendingOrderSlPrice関数は、直近で約定された予約注文のストップロス価格を取得し、参照渡しされたlastFilledPendingOrderSlPrice変数に格納します。取得したストップロス価格を格納するために、この変数を入力として受け取ります。この関数は、最近約定した予約注文のストップロス水準を追跡または分析する必要がある場面で特に有用です。
まず、PendingOrderData型のlastFilledPendingOrderInfo変数を宣言し、直近で約定された予約注文の詳細を一時的に保持します。次に、GetLastFilledPendingOrderData関数を使用して注文の詳細を取得します。
データの取得に成功した場合は、lastFilledPendingOrderInfoからslPriceフィールドを抽出し、lastFilledPendingOrderSlPrice参照変数に格納します。その後、関数は成功を示すためにtrueを返します。取得に失敗した場合は、参照変数を更新せずに関数を終了し、データが見つからなかったことを示すためにfalseを返します。
以下は、LastFilledPendingOrderSlPrice関数の完全な実装です。
bool LastFilledPendingOrderSlPrice(double &lastFilledPendingOrderSlPrice) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSlPrice = lastFilledPendingOrderInfo.slPrice; return(true); } return(false); }
LastFilledPendingOrderTpPrice関数
LastFilledPendingOrderTpPrice関数は、直近で約定された予約注文のテイクプロフィット価格を取得し、参照渡しされたlastFilledPendingOrderTpPrice変数に格納します。この関数は、成立した未決注文のテイクプロフィットレベルを分析または管理するアプリケーションに不可欠です。テイクプロフィット価格を格納するために、lastFilledPendingOrderTpPrice変数を入力として受け入れます。
まず、直近で約定された予約注文の詳細を一時的に保持するために、PendingOrderData変数lastFilledPendingOrderInfoを宣言します。次に、GetLastFilledPendingOrderData関数を使用して注文の詳細を取得します。取得が成功した場合、lastFilledPendingOrderInfoからtpPriceを抽出し、lastFilledPendingOrderTpPrice変数に格納して、trueを返します。取得に失敗した場合は、参照変数を更新せずにfalseを返します。
以下は、LastFilledPendingOrderTpPrice関数の実装です。
bool LastFilledPendingOrderTpPrice(double &lastFilledPendingOrderTpPrice) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTpPrice = lastFilledPendingOrderInfo.tpPrice; return(true); } return(false); }
LastFilledPendingOrderSlPips関数
LastFilledPendingOrderSlPips関数は、直近で約定された予約注文のストップロス値(pips単位)を取得し、参照渡しされたlastFilledPendingOrderSlPips変数に格納します。この関数は、実行済みの予約注文に関連するリスクパラメータを分析するうえで非常に重要です。
まず、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言し、直近で約定された予約注文の詳細を一時的に保持します。次に、GetLastFilledPendingOrderData関数を使用して注文の詳細を取得します。データ取得が成功した場合は、lastFilledPendingOrderInfo構造体からslPipsフィールドを抽出し、lastFilledPendingOrderSlPips参照変数に格納します。その後、関数は成功を示すためにtrueを返します。取得に失敗した場合は、参照変数を更新せずに、データが見つからなかったことを示すためにfalseを返します。
以下は、LastFilledPendingOrderSlPips関数の完全な実装です。
bool LastFilledPendingOrderSlPips(int &lastFilledPendingOrderSlPips) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderSlPips = lastFilledPendingOrderInfo.slPips; return(true); } return(false); }
LastFilledPendingOrderTpPips関数
LastFilledPendingOrderTpPips関数は、直近で約定された予約注文のテイクプロフィット値(pips単位)を取得し、参照渡しされたlastFilledPendingOrderTpPips変数に格納します。この関数は、実行済みの予約注文におけるテイクプロフィット水準を追跡するのに役立ち、パフォーマンス分析や戦略の調整に活用できます。
この処理を実装するために、まずPendingOrderData型の変数lastFilledPendingOrderInfoを宣言し、直近で約定した予約注文の詳細を一時的に保持します。次に、GetLastFilledPendingOrderData関数を呼び出して注文の詳細を取得します。取得に成功した場合は、tpPipsの値をlastFilledPendingOrderInfoから抽出し、参照渡しされたlastFilledPendingOrderTpPips変数に格納します。その後、関数は成功を示すためにtrueを返します。取得に失敗した場合は、参照変数を変更さずに、失敗を示すためにfalseを返します。
以下は、LastFilledPendingOrderTpPips関数の完全な実装です。
bool LastFilledPendingOrderTpPips(int &lastFilledPendingOrderTpPips) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTpPips = lastFilledPendingOrderInfo.tpPips; return(true); } return(false); }
LastFilledPendingOrderTimeSetup関数
LastFilledPendingOrderTimeSetup関数は、直近で約定された予約注文が設定された時刻を取得し、参照渡しされたlastFilledPendingOrderTimeSetup変数に格納します。この関数は、特定の予約注文がいつ開始されたかを追跡するために不可欠であり、注文アクティビティの時間ベースの分析に役立ちます。
この関数はlastFilledPendingOrderTimeSetup参照型引数を受け取り、関数実行後にその変数に直近で約定された予約注文の開始時刻を格納します。処理の流れとしては、まずPendingOrderData型の変数lastFilledPendingOrderInfoを宣言し、直近で約定された予約注文の詳細を一時的に保持します。
次に、GetLastFilledPendingOrderData関数を呼び出してその詳細を取得します。取得に成功した場合は、lastFilledPendingOrderInfo構造体のtimeSetupフィールドを抽出しlastFilledPendingOrderTimeSetup参照変数に格納します。その後、関数は成功を示すためにtrueを返します。取得に失敗した場合は、参照変数を変更せずに、失敗を示すためにfalseを返します。
以下は、LastFilledPendingOrderTimeSetup関数の完全な実装です。
bool LastFilledPendingOrderTimeSetup(datetime &lastFilledPendingOrderTimeSetup) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTimeSetup = lastFilledPendingOrderInfo.timeSetup; return(true); } return(false); }
LastFilledPendingOrderTimeDone関数
LastFilledPendingOrderTimeDone関数は、直近で約定された予約注文がトリガーされた時刻(完了時刻)を取得し、参照渡しされたlastFilledPendingOrderTimeDone変数に格納します。この関数は、約定された予約注文の実行タイミングを追跡するために不可欠であり、注文のタイミング分析や詳細なレポート作成に役立ちます。
この関数はlastFilledPendingOrderTimeDone参照型引数を受け取り、そこに完了した時刻を格納します。この関数ではまず、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言します。この変数は、直近で約定された予約注文の詳細情報を一時的に格納するために使用されます。
次に、GetLastFilledPendingOrderDataを呼び出して、直近で約定された予約注文のデータを取得します。取得に成功した場合は、lastFilledPendingOrderInfo 構造体のtimeDoneフィールドから完了時刻を抽出し、lastFilledPendingOrderTimeDone参照変数に格納します。その後、関数は成功を示すためにtrueを返します。
一方、データの取得に失敗した場合は、参照変数を更新せずに、有効なデータが取得できなかったことを示すためにfalseを返します。
以下は、LastFilledPendingOrderTimeDone関数の完全な実装です。
bool LastFilledPendingOrderTimeDone(datetime &lastFilledPendingOrderTimeDone) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTimeDone = lastFilledPendingOrderInfo.timeDone; return(true); } return(false); }
LastFilledPendingOrderExpirationTime関数
LastFilledPendingOrderExpirationTime関数は、直近で約定された予約注文の有効期限を取得し、参照渡しされたlastFilledPendingOrderExpirationTime変数に格納します。この関数は、予約注文の有効期間を監視・管理する際に特に有用であり、注文の存続期間を分析する際にも役立ちます。
この関数はlastFilledPendingOrderExpirationTime参照型引数を受け取り、そこに有効期限を格納します。まず、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言し、直近で約定された予約注文の詳細情報を一時的に保持します。
続いて、GetLastFilledPendingOrderDataを呼び出して、直近で約定された予約注文のデータを取得します。取得に成功した場合は、lastFilledPendingOrderInfo構造体からexpirationTimeフィールドを抽出し、lastFilledPendingOrderExpirationTime参照変数に格納します。その後、関数はデータの取得が成功したことを示すためにtrueを返します。
一方、データの取得に失敗した場合は、参照変数を変更せず、有効なデータが存在しないことを示すためにfalseを返します。
以下は、LastFilledPendingOrderExpirationTime関数の完全な実装です。
bool LastFilledPendingOrderExpirationTime(datetime &lastFilledPendingOrderExpirationTime) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderExpirationTime = lastFilledPendingOrderInfo.expirationTime; return(true); } return(false); }
LastFilledPendingOrderPositionId関数
LastFilledPendingOrderPositionId関数は、直近で約定された予約注文のポジションIDを取得し、参照渡しされたlastFilledPendingOrderPositionId変数に格納します。この関数は、予約注文を対応するポジションに関連付けるのに特に役立ち、取引アクティビティの追跡と管理を向上させます。
この関数はlastFilledPendingOrderPositionId参照型引数を受け取り、そこにポジションIDを格納します。まず、lastFilledPendingOrderInfoという名前のPendingOrderData変数を宣言します。これは、直近で約定された予約注文の詳細を格納する一時的なコンテナとして機能します。
次に、関数はGetLastFilledPendingOrderDataを呼び出して、直近で約定された予約注文のデータを取得します。データの取得に成功した場合、lastFilledPendingOrderInfo構造体からpositionIdフィールドを抽出し、lastFilledPendingOrderPositionId参照変数に格納します。次に、操作が成功したことを示すためにtrueを返します。
データの取得に失敗した場合、参照変数を変更せず、失敗を通知するためにfalseを返します。
以下は、LastFilledPendingOrderPositionId関数の完全な実装です。
bool LastFilledPendingOrderPositionId(ulong &lastFilledPendingOrderPositionId) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderPositionId = lastFilledPendingOrderInfo.positionId; return(true); } return(false); }
LastFilledPendingOrderMagic関数
LastFilledPendingOrderMagic関数は、直近で約定された予約注文のマジックナンバーを取得し、参照渡しされたlastFilledPendingOrderMagic変数に格納します。この関数は、特に同一の取引口座内で複数の戦略やシステムを運用している場合に、特定の注文に紐づく一意の識別子(マジックナンバー)を識別・管理する上で重要です。
この関数はlastFilledPendingOrderMagic参照型引数を受け取り、そこにマジックナンバーを格納します。まず、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言し、直近で約定された予約注文の詳細情報を一時的に保持します。
次に、GetLastFilledPendingOrderDataを呼び出して、直近で約定された予約注文のデータを取得します。データの取得に成功した場合は、lastFilledPendingOrderInfo構造体からmagicフィールドを抽出し、lastFilledPendingOrderMagic参照変数に格納します。その後、操作の成功を示すためにtrueを返します。
データの取得に失敗した場合、参照変数を変更せず、失敗を示すためにfalseを返します。
以下は、LastFilledPendingOrderMagic関数の完全な実装です。
bool LastFilledPendingOrderMagic(ulong &lastFilledPendingOrderMagic) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderMagic = lastFilledPendingOrderInfo.magic; return(true); } return(false); }
LastFilledPendingOrderReason関数
LastFilledPendingOrderReason関数は、直近で約定された予約注文の理由を取得し、参照渡しされたlastFilledPendingOrderReason変数に格納します。この関数は、注文が実行された具体的な理由を追跡するのに役立ちます。たとえば、モバイル、Web、デスクトップアプリケーションからの操作、エキスパートアドバイザー(EA)やスクリプトによる実行、またはストップロス、テイクプロフィット、ストップアウトなどによって発動されたかどうかを判別できます。この情報は、分析やデバッグにおいて重要であり、注文がどのように、なぜ約定されたのかを明らかにする手助けとなります。
この関数はlastFilledPendingOrderReason参照型引数を受け取り、そこに約定理由を格納します。まず、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言し、直近で約定された予約注文の詳細情報を一時的に保持します。
次に、GetLastFilledPendingOrderDataを呼び出して、直近で約定された予約注文のデータを取得します。データの取得に成功した場合は、lastFilledPendingOrderInfo構造体からreasonフィールドを抽出し、lastFilledPendingOrderReason参照変数に格納します。その後、処理が正常に完了したことを示すためにtrueを返します。
データの取得に失敗した場合、参照変数を変更せず、失敗を示すためにfalseを返します。
以下は、LastFilledPendingOrderReason関数の完全な実装です。
bool LastFilledPendingOrderReason(ENUM_ORDER_REASON &lastFilledPendingOrderReason) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderReason = lastFilledPendingOrderInfo.reason; return(true); } return(false); }
LastFilledPendingOrderTypeFilling関数
LastFilledPendingOrderTypeFilling関数は、直近で約定された予約注文の約定タイプを取得し、参照渡しされたlastFilledPendingOrderTypeFilling変数に格納します。この関数は、予約注文がどのようなポリシーで約定されたかを判断するために重要です。約定方式には、Fill or Kill(全数量即時約定)、Immediate or Cancel(即時部分約定)、Passive (Book or Cancel)、Returnなどがあります。
この関数はlastFilledPendingOrderTypeFilling参照型引数を受け取り、そこに約定タイプを格納します。まず、直近で約定された予約注文の詳細を一時的に保持するPendingOrderData型の変数lastFilledPendingOrderInfoを宣言します。
次に、GetLastFilledPendingOrderDataを呼び出して、直近で約定された予約注文のデータを取得します。データの取得に成功した場合、lastFilledPendingOrderInfo構造体からtypeFillingフィールドを抽出し、lastFilledPendingOrderTypeFilling参照変数に格納します。その後、処理が正常に完了したことを示すためにtrueを返します。
データの取得に失敗した場合、参照変数を変更せず、失敗を示すためにfalseを返します。
以下は、LastFilledPendingOrderTypeFilling関数の完全な実装です。
bool LastFilledPendingOrderTypeFilling(ENUM_ORDER_TYPE_FILLING &lastFilledPendingOrderTypeFilling) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTypeFilling = lastFilledPendingOrderInfo.typeFilling; return(true); } return(false); }
LastFilledPendingOrderTypeTime関数
LastFilledPendingOrderTypeTime関数は、直近で約定された予約注文の有効時間タイプを取得し、参照渡しされたlastFilledPendingOrderTypeTime変数に格納します。この関数は、予約注文の有効期間を決定するのに役立ちます。
この関数はlastFilledPendingOrderTypeTime参照型引数を受け取り、そこに有効時間タイプを格納します。まず、直近で約定された予約注文の詳細を一時的に保持するために、lastFilledPendingOrderInfo型の変数PendingOrderDataを宣言します。
次に、関数はGetLastFilledPendingOrderDataを呼び出して、直近で約定された予約注文のデータを取得します。データの取得に成功した場合、lastFilledPendingOrderInfo構造体からtypeTimeフィールドを抽出し、lastFilledPendingOrderTypeTime参照変数に格納します。その後、処理が正常に完了したことを示すためにtrueを返します。
データの取得に失敗した場合、参照変数を変更せず、失敗を示すためにfalseを返します。
以下は、LastFilledPendingOrderTypeTime関数の完全な実装です。
bool LastFilledPendingOrderTypeTime(datetime &lastFilledPendingOrderTypeTime) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderTypeTime = lastFilledPendingOrderInfo.typeTime; return(true); } return(false); }
LastFilledPendingOrderComment関数
LastFilledPendingOrderComment関数は、直近で約定された予約注文に関連付けられたコメントを取得し、参照渡しされたlastFilledPendingOrderComment変数に格納します。この関数は、予約注文に対して追加されたメモや注釈などの情報を取得するのに役立ちます。
この関数はlastFilledPendingOrderComment参照型引数を受け取り、そこにコメントを格納します。まず、直近で約定された予約注文の詳細を一時的に保持するために、PendingOrderData型の変数lastFilledPendingOrderInfoを宣言します。
次に、GetLastFilledPendingOrderDataを呼び出して、直近で約定された予約注文のデータを取得します。データの取得に成功した場合、lastFilledPendingOrderInfo構造体からcommentフィールドを抽出し、lastFilledPendingOrderComment参照変数に格納します。その後、処理が正常に完了したことを示すためにtrueを返します。
データの取得に失敗した場合、参照変数を変更せず、失敗を示すためにfalseを返します。
以下は、LastFilledPendingOrderComment関数の完全な実装です。
bool LastFilledPendingOrderComment(string &lastFilledPendingOrderComment) export { PendingOrderData lastFilledPendingOrderInfo; if(GetLastFilledPendingOrderData(lastFilledPendingOrderInfo)) { lastFilledPendingOrderComment = lastFilledPendingOrderInfo.comment; return(true); } return(false); }
結論
直近約定済み予約注文のプロパティを取得・格納するためのエクスポート可能な関数の開発に成功し、履歴管理EX5ライブラリの機能性と柔軟性が大きく向上しました。これらの新機能により、約定済み予約注文に関する重要なデータへシームレスにアクセスできるようになり、より効率的かつ効果的な取引分析や戦略の最適化が可能になります。また、予約注文履歴の管理においても、ライブラリの対応力が強化されました。
次回の記事では、最後にキャンセルされた予約注文のプロパティを取得・格納する関数を追加し、ライブラリのさらなる拡張をおこないます。これにより、取引履歴の管理および分析機能がさらに向上し、皆様の取引ツールキットにより価値あるツールが加わることになります。
本記事および過去の記事で作成されたすべての関数を含む、最新版のHistoryManager.mq5ライブラリのソースコードは、この記事の末尾でダウンロード可能です。最後までお読みいただきありがとうございました。次回の記事でも、引き続きこの開発の旅をご一緒できることを楽しみにしております。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/16742





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