エキスパート: トレーダーのためのMQL5プログラミング - 書籍からのソースコード。第6部 - ページ 2

 
Stanislav Korotky #:
注文、取引、ポジションはいずれにせよ時間枠とは関係ありません。何か誤解しているか、表現が間違っている。
すみません、私の言葉の選択が紛らわしかったのだと思います 例えば、2025-10-01 00:00:00から2025-10-22 23:59:59までの取引のように、指定した日付範囲内で取引された取引/注文を選択したいとします。
 
pauldic #:
申し訳ありませんが、私の言葉の選択が紛らわしかったようで、「タイムフレーム」とは「日付範囲」のことです。例えば、2025-10-01 00:00:00から2025-10-22 23:59:59までの案件のように、指定した日付範囲内で取引された案件/注文を選択したいとします。

取引履歴のサブレンジを分析したい場合、フィルタリングの前に、フィルタリングのコード自体に影響を与えることなく、履歴のこの部分のみを要求する方が効率的です:

input datetime SubrangeFrom = 0;
input datetime SubrangeTo = 0;

...

{
   HistorySelect(SubrangeFrom, SubrangeTo);
   // ... フィルターのコードはそのままここに置く
}

何らかの理由で、HistorySelect で適用したグローバルな範囲内の(より狭い)サブ範囲を選択したい場合、フィルタリング・コード内でこのようにできます:

{
      // これらの一部はこちら

      // HistorySelect(0, LONG_MAX);
      // HistorySelectByPosition(PositionID);
      ...
      DealTuple deals[];
      if(SubrangeFrom != SubrangeTo && SubrangeFrom < SubrangeTo)
      {
         filter.let(DEAL_TIME, SubrangeFrom - 1, IS::GREATER).let(DEAL_TIME, SubrangeTo + 1, IS::LESS);
      }
      filter.let(DEAL_POSITION_ID, PositionID).select(deals, true);
      ...
}

ハイライトされた黄色の行では、追加の修飾子 IS::GREATER と IS::LESS を使用して、日付の範囲 [SubrangeFrom, SubrangeTo] に対して 2 つの条件を設定しています (デフォルトでは、これらはlet() の他のコールでは指定されず、IS::EQUAL が単一の値フィールドに対して通常使用されます)。

なぜなら、HistorySelect は注文の別の日時プロパティ、すなわち注文の実行時間 (ORDER_TIME_DONE) に適用されるからです。また、有効な注文が多数ある場合、(履歴にない)有効な注文のサブレンジをフィルタリングするのも面白いかもしれません。

MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5の サンプルスクリプトを参考にしてください。
 
Stanislav Korotky #:

取引履歴のサブレンジを分析したい場合、フィルタリングの前に、フィルタリングのコード自体に影響を与えることなく、履歴のこの部分のみを要求する方が効率的です:

何らかの理由で、HistorySelect で適用したグローバルレンジの中の(より狭い)サブレンジを選択したい場合、フィルタリングのコードでこのようにすることができます:

黄色でハイライトされた行は、追加の修飾子 IS::GREATER と IS::LESS を使用して、datetime の範囲 [SubrangeFrom, SubrangeTo] に対して 2 つの条件を設定します (デフォルトでは、これらはlet() の他のコールでは指定されず、IS::EQUAL が単一の値フィールドに対して通常使用されます)。

なぜなら、HistorySelect は注文の別の日時プロパティ、すなわち注文の実行時間 (ORDER_TIME_DONE) に適用されるからです。また、有効な注文が多数ある場合、(履歴にない)有効な注文のサブレンジをフィルタリングするのも面白いかもしれません。

MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5の サンプルスクリプトを参考にしてください。
StanislavKorotky ありがとうございます。このスクリプトは私にとって素晴らしい出発点です。