我正在使用标准的[[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()
以获得时间范围值。我怀疑这是否有意义,因为您必须在每个滴答声中多次进行无用的字符串解析。这里的另一个问题是,评论通常可以由经纪人更改,例如是否执行了止损或止盈(并且您需要分析历史记录),以及是否部分关闭了订单。
另一种方法是具有从CObject
继承的类的某些结构的实例,并具有CArrayObj
或此类实例的数组。您将能够根据需要向此类结构中添加尽可能多的数据,甚至在需要时更改时间范围(例如,您在M5处达成交易,在M5处进行追踪,效果很好,因此您可以平仓并实际上更改时间范围此类交易的交易额,然后转到M15图表)。即使需要进行一些编码,这对于复杂的系统来说也可能是最方便的(不要忘记将现有交易的列表写到文件中或在OnDeinit()
中以某种方式反序列化,然后在OnInit()
函数中进行序列化) 。