首页 > 解决方案 > 如何在 MT mq4 中获取未结订单的 TimeFrame?

问题描述

我正在使用标准OrderSelect()功能扫描订单列表。由于有一个很好的函数可以获取_Symbol订单的当前时间,我希望找到找到时间范围的等价物(_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()或类似的东西?

标签: mql4metatrader4

解决方案


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

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

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

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


推荐阅读