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

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

MetaTrader 5 |
169 0
Wanateki Solutions LTD
Kelvin Muturi Muigua

はじめに

直近で約定された予約注文の詳細にアクセスすることは、取引ロジックがその注文タイプに依存するシナリオにおいて極めて有用です。たとえば、直近で約定された予約注文が買い指値、売り逆指値、買い逆指値、売り指値、買いストップリミット、売りストップリミットのどれであったかに応じて、エントリーやエグジット戦略を調整することができます。注文の種類を理解することで、市場の状況に関する洞察が得られ、エントリーポイントやエグジットポイントの調整など、アプローチの見直しに役立ちます。

この情報は、過去の取引データを収集・分析して取引システムを最適化する場合や、未決注文がトリガーされてアクティブになったときに、ブローカーがそれをどれだけ迅速に約定・実行したかのデータを集める場合にも重要です。スリッページ、注文の発注から実行までの経過時間、注文が約定した条件などの詳細を確認することで、戦略のパターンや改善点を見つけることができます。また、このデータを使って注文の実行品質を監視することで、注文が期待通りに約定しているかを確認でき、取引の非効率性に対処することが可能になります。このような詳細な分析によって意思決定が強化され、より効果的で堅牢な取引戦略につながります。

この履歴管理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

添付されたファイル |
プライスアクション分析ツールキットの開発(第7回):Signal Pulse EA プライスアクション分析ツールキットの開発(第7回):Signal Pulse EA
ボリンジャーバンドとストキャスティクスオシレーターを組み合わせたMQL5エキスパートアドバイザー(EA)「Signal Pulse」で、多時間枠分析の可能性を引き出しましょう。高精度で勝率の高い取引シグナルを提供します。この戦略の実装方法や、カスタム矢印を用いた売買シグナルの可視化手法を学び、実践的な活用を目指しましょう。複数の時間枠にわたる自動分析を通じて、トレード判断力を高めたいトレーダーに最適なツールです。
初級から中級まで:配列(I) 初級から中級まで:配列(I)
この記事は、これまでに議論してきた内容と、新たな研究段階との橋渡しとなるものです。この記事を理解するためには、前回までの記事を読んでおく必要があります。ここで提示されるコンテンツは、教育目的のみに使用されることを意図しています。いかなる状況においても、提示された概念を学習し習得する以外の目的でアプリケーションを利用することは避けてください。
トレンドフォロー型ボラティリティ予測のための隠れマルコフモデル トレンドフォロー型ボラティリティ予測のための隠れマルコフモデル
隠れマルコフモデル(HMM)は、観測可能な価格変動を分析することで、市場の潜在的な状態を特定する強力な統計手法です。取引においては、市場レジームの変化をモデル化・予測することで、ボラティリティの予測精度を高め、トレンドフォロー戦略の構築に役立ちます。本記事では、HMMをボラティリティのフィルターとして活用し、トレンドフォロー戦略を開発するための一連の手順を紹介します。
人工生態系ベースの最適化(AEO)アルゴリズム 人工生態系ベースの最適化(AEO)アルゴリズム
この記事では、初期の解候補集団を生成し、適応的な更新戦略を適用することで、生態系構成要素間の相互作用を模倣するメタヒューリスティック手法、人工エコシステムベース最適化(AEO: Artificial Ecosystem-based Optimization)アルゴリズムについて検討します。AEOの動作過程として、消費フェーズや分解フェーズ、さらに多様なエージェント行動戦略など、各段階を詳細に説明します。あわせて、本アルゴリズムの特徴と利点についても紹介します。