EA: 交易者的MQL5编程(MQL5 Programming for Traders) - 源代码第六部分 - 页 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(默认情况下,在调用let() 时不会指定这两个限定符,而 IS::EQUAL 通常用于单值字段)为日期时间范围 [SubrangeFrom, SubrangeTo] 设置了两个条件。我只知道一个按日期范围应用子过滤器的原因,那就是订单的设置时间 (ORDER_TIME_SETUP),因为HistorySelect 应用于订单的另一个日期时间属性,即订单执行时间 (ORDER_TIME_DONE)。此外,如果有很多有效订单,过滤有效订单的子范围(不在历史中)可能会很有趣。 您可以从MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5 示例脚本开始。 pauldic 2025.10.24 12:56 #13 Stanislav Korotky #:如果要分析交易历史的一个子范围,在不影响过滤代码本身的情况下,在过滤前只请求分析这部分历史记录会更有效:如果出于某种原因,您想在HistorySelect 应用的全局范围内选择一个(更窄的)子范围,那么您仍然可以在过滤代码中这样做:黄线高亮部分使用额外的限定符 IS::GREATER 和 IS::LESS(默认情况下,在其他调用let() 时不指定这两个限定符,而 IS::EQUAL 通常用于单值字段)为日期时间范围 [SubrangeFrom, SubrangeTo] 设置了两个条件。我只知道一个按日期范围应用子过滤器的原因,那就是订单的设置时间 (ORDER_TIME_SETUP),因为HistorySelect 应用于订单的另一个日期时间属性,即订单执行时间 (ORDER_TIME_DONE)。此外,如果有很多有效订单,过滤有效订单的子范围(不在历史中)可能会很有趣。 您可以从MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5 示例脚本开始。 @StanislavKorotky 再次感谢...这对我来说是一个很好的起点,我将开始使用它。 12 新评论 您错过了交易机会: 免费交易应用程序 8,000+信号可供复制 探索金融市场的经济新闻 注册 登录 拉丁字符(不带空格) 密码将被发送至该邮箱 发生错误 使用 Google 登录 您同意网站政策和使用条款 如果您没有帐号,请注册 可以使用cookies登录MQL5.com网站。 请在您的浏览器中启用必要的设置,否则您将无法登录。 忘记您的登录名/密码? 使用 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(默认情况下,在调用let() 时不会指定这两个限定符,而 IS::EQUAL 通常用于单值字段)为日期时间范围 [SubrangeFrom, SubrangeTo] 设置了两个条件。
我只知道一个按日期范围应用子过滤器的原因,那就是订单的设置时间 (ORDER_TIME_SETUP),因为HistorySelect 应用于订单的另一个日期时间属性,即订单执行时间 (ORDER_TIME_DONE)。此外,如果有很多有效订单,过滤有效订单的子范围(不在历史中)可能会很有趣。
您可以从MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5 示例脚本开始。如果要分析交易历史的一个子范围,在不影响过滤代码本身的情况下,在过滤前只请求分析这部分历史记录会更有效:
如果出于某种原因,您想在HistorySelect 应用的全局范围内选择一个(更窄的)子范围,那么您仍然可以在过滤代码中这样做:
黄线高亮部分使用额外的限定符 IS::GREATER 和 IS::LESS(默认情况下,在其他调用let() 时不指定这两个限定符,而 IS::EQUAL 通常用于单值字段)为日期时间范围 [SubrangeFrom, SubrangeTo] 设置了两个条件。
我只知道一个按日期范围应用子过滤器的原因,那就是订单的设置时间 (ORDER_TIME_SETUP),因为HistorySelect 应用于订单的另一个日期时间属性,即订单执行时间 (ORDER_TIME_DONE)。此外,如果有很多有效订单,过滤有效订单的子范围(不在历史中)可能会很有趣。
您可以从MQL5/Scripts/MQL5Book/p6/TradeHistoryPrint.mq5 示例脚本开始。