如何在 MT mq4 中获取未结订单的时间范围?

How do I get the TimeFrame for an open order in MT mq4?

我正在使用标准 OrderSelect() 函数扫描订单列表。由于有一个很棒的函数可以获取订单的当前 _Symbol,我希望找到找到 timeframe (_Period) 的等价函数。但是,没有这样的功能。

这是我的代码片段。

...
    for (int i=orderCount()-1; i>=0; i--) {
        if (OrderSelect(i, SELECT_BY_POS, MODE_TRADES)) {
            if (OrderMagicNumber()==magic && OrderSymbol()==_Symbol ) j++;
            // Get the timeframe here 
        }
    }
...

问:如何根据订单号获取未结订单的时间范围

换句话说,我怎样才能推出自己的 OrderPeriod() 或类似的东西?

没有这个功能。两种方法在这里可能会有所帮助。

首先也是最合理的是为每个时间范围设置一个唯一的幻数。这通常有助于避免一些意外的行为和错误。您可以更新输入的幻数,以便自动添加时间范围,如果您输入的幻数是 123 并且时间范围是 M5,则新的幻数将是 1235 或类似的东西,您将在发送订单和检查特定订单是否来自您的时间范围时使用这个新魔法。或者,如果需要的话,也可以同时输入魔术和时间范围。

第二种方法是为每个订单创建评论,该评论应包括时间范围的数据,例如"myRobot_5",然后您解析 OrderComment() 以获得时间范围值。我怀疑这是否有意义,因为您必须在每次滴答中多次对字符串进行无用的解析。这里的另一个问题是评论通常可以由经纪人更改,例如如果执行了止损或止盈(并且您需要分析历史记录),并且订单是否部分关闭。

另一种方法是让 class 的某些结构的实例继承自 CObject 并具有 CArrayObj 或此类实例的数组。您将能够根据需要向此类结构中添加尽可能多的数据,甚至在需要时更改时间范围(例如,您在 M5 开始交易,在 M5 跟踪它,它表现良好,因此您关闭部分并实际上更改时间范围此类交易到 M15 并在 M15 图表上跟踪它)。这对于复杂的系统来说可能是最方便的,即使它需要做一些编码(不要忘记将现有交易列表写到文件中或在 OnDeinit() 中以某种方式反序列化,然后在 [=16] 中重新序列化=] 函数)。