mql4语言的特点、微妙之处以及技巧 - 页 35

 
fxsaber #:

所以我现在想知道如何在一个时间内完成所有的订单。

我不知道该怎么做,但我正试图以这样的方式来写,使这种滑坡不会导致关键的后果。

概率会降低,但要减去账户管理的多样化和复杂化。

 
Andrei Trukhanovich #:

或者,将机器人分散在不同的账户中。

然后禁止,比如说,禁止放货单的过期。一般来说,是一个拐杖。

一个基本的必需品有这样一个不幸的特殊性。显然,要通过快照的方式来进行。

 
fxsaber #:

谢谢你的详细答复!现在我想知道如何在一个时间内完成所有订单。

记住第一个和最后一个订单(门票)如何?

并在循环完成后,检查第一个和最后一个订单的票数是否与计数前相同。

   int n  = OrdersTotal();
   
   if(n == 0) return(0.0);
   else if(n == 1 && OrderSelect(0, SELECT_BY_POS)) return(OrderLots());
   
   int t_last = OrderSelect(n - 1, SELECT_BY_POS) ? OrderTicket() : -1;
   int t_first = OrderSelect(0, SELECT_BY_POS) ? OrderTicket() : -1;


SZY: 从逻辑上讲,OrderSelect()应该负责这种碰撞--在订单表发生变化的情况下,它应该返回错误,但我不记得在论坛的任何地方看到过OrderSelect()返回错误,我也没有遇到过OrderSelect()的错误处理程序。

 
Igor Makanu #:

能否记住第一个和最后一个订单(票)?

如果没有对票据序列的完整记忆,这样的解决方案将是失败的。

 
fxsaber #:

如果你没有完全记住门票的顺序,这个方案就会失败。

而完全保存票据也会导致失败,因为当我们在循环运行时,已经处理过的订单的状态可能会改变


当然,我不确定,但是如果当我们在循环中时,一个订单被关闭,OrderTotal()将改变。

如果订单被关闭,一个新的订单打开,那么票据和/或OrderSelect(0)或OrderSelect(OrderTotal()-1)将被改变。


在你看来,什么样的情况会发生,使之前的 "极端订单 "和OrderTotal()本身保持不变?

 
Igor Makanu #:

在你看来,什么情况下会发生保持相同的 "极端订单 "和OrderTotal()本身?

最有可能的是,当订单表被摇动时,OrdersTotal会发生变化。

然后就有可能重新填充限位器,形成一个额外的位置。

 
Igor Makanu #:

我们能记住第一个和最后一个订单(票)吗?

记忆中的第一个人什么都不做

 
fxsaber 调用函数 之前和之后存在的顺序?还是会算两次。

也就是说,当一个订单被删除或在枚举期间出现时,索引会发生什么?

我收集了一系列的票据,并与之合作。
如果OrdersTotal或Balance或Margin发生了变化--那么必须重新创建列表。

因此,EA总是只对它自己选定的票进行工作。

 
Andrei Trukhanovich #:

记忆中的第一个人并没有做什么

这些都是架构实施的特殊性,没有记录在案,将来也没有人可以保证......。

注意OrderTotal()和OrdersHistoryTotal(),以及最后一个订单的门票

如果这些值在循环计算后发生变化,则处理


但不可能有通用和可靠的解决方案--这里的任务是猜测服务器上会发生什么,数据如何通过网络传递,以及在终端的邻近图表中发生了什么))))。


唯一值得期待的是OrderSelect() 的速度--如果我没记错的话,它每秒的调用量超过一百万

 
fxsaber #:

如果没有一个完整的票务序列记忆,这样的解决方案就会失败。

记忆可能并不昂贵,但追踪全部状态可能很昂贵。我同意前面的观点,通过合理性和优先级的逻辑来减少负荷。

我们所处的异步世界并不保证响应请求的顺序,也根本不保证顺序。
原因: