エキスパート: トレーダーのためのMQL5プログラミング - 書籍からのソースコード。第6部 - ページ 2 12 新しいコメント pauldic 2025.10.23 19:23 #11 Stanislav Korotky #: 注文、取引、ポジションはいずれにせよ時間枠とは関係ありません。何か誤解しているか、表現が間違っている。 すみません、私の言葉の選択が紛らわしかったのだと思います。 例えば、2025-10-01 00:00:00から2025-10-22 23:59:59までの取引のように、指定した日付範囲内で取引された取引/注文を選択したいとします。 Stanislav Korotky 2025.10.24 12:03 #12 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の サンプルスクリプトを参考にしてください。 pauldic 2025.10.24 12:56 #13 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 ありがとうございます。このスクリプトは私にとって素晴らしい出発点です。 12 新しいコメント 取引の機会を逃しています。 無料取引アプリ 8千を超えるシグナルをコピー 金融ニュースで金融マーケットを探索 新規登録 ログイン スペースを含まないラテン文字 このメールにパスワードが送信されます エラーが発生しました Googleでログイン WebサイトポリシーおよびMQL5.COM利用規約に同意します。 新規登録 MQL5.com WebサイトへのログインにCookieの使用を許可します。 ログインするには、ブラウザで必要な設定を有効にしてください。 ログイン/パスワードをお忘れですか? Googleでログイン
注文、取引、ポジションはいずれにせよ時間枠とは関係ありません。何か誤解しているか、表現が間違っている。
申し訳ありませんが、私の言葉の選択が紛らわしかったようで、「タイムフレーム」とは「日付範囲」のことです。例えば、2025-10-01 00:00:00から2025-10-22 23:59:59までの案件のように、指定した日付範囲内で取引された案件/注文を選択したいとします。
取引履歴のサブレンジを分析したい場合、フィルタリングの前に、フィルタリングのコード自体に影響を与えることなく、履歴のこの部分のみを要求する方が効率的です:
何らかの理由で、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の サンプルスクリプトを参考にしてください。取引履歴のサブレンジを分析したい場合、フィルタリングの前に、フィルタリングのコード自体に影響を与えることなく、履歴のこの部分のみを要求する方が効率的です:
何らかの理由で、HistorySelect で適用したグローバルレンジの中の(より狭い)サブレンジを選択したい場合、フィルタリングのコードでこのようにすることができます:
黄色でハイライトされた行は、追加の修飾子 IS::GREATER と IS::LESS を使用して、datetime の範囲 [SubrangeFrom, SubrangeTo] に対して 2 つの条件を設定します (デフォルトでは、これらはlet() の他のコールでは指定されず、IS::EQUAL が単一の値フィールドに対して通常使用されます)。
なぜなら、HistorySelect は注文の別の日時プロパティ、すなわち注文の実行時間 (ORDER_TIME_DONE) に適用されるからです。また、有効な注文が多数ある場合、(履歴にない)有効な注文のサブレンジをフィルタリングするのも面白いかもしれません。
MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5の サンプルスクリプトを参考にしてください。