在mql4中用什么来代替OnTradeTransaction()? - 页 4

 

捕捉每个刻度的所有事件,与以前记录的数据进行比较。

都在数组中。

实际上,有时会有刹车,当有很多虱子的时候。这就是为什么我把检查之间的延迟时间定为1秒。

它涉及对许多职位的监测。

而如果你只监控某个特定机器人的位置,那当然更容易。

 

我有一个简单的任务,工作中的订单不超过两三打。

因此,我将使用一个计时器来检查OrdersTotal() 中的内容,并在每次迭代时在新的和旧的变量中写入量,如果量发生了变化--就采取进一步的措施。

 
Aleksandr Volotko:

我有一个简单的任务,工作中的订单不超过两三打。

因此,我将使用一个计时器来检查OrdersTotal()中的内容,并在每次迭代时在新的和旧的变量中写入量,如果量发生了变化--就采取进一步的措施。

挂单 触发时,成交量将不会改变。

 
Artyom Trishkin:

挂单 触发时,成交量将不会改变。

好吧,我在循环中按类型过滤订单,并计算未平仓累积头寸的数量。

我很难过,我不得不浪费资源和时间,而在MT5中,你可以简单地等待一个特定的事件,没有任何压力。

 
Aleksandr Volotko:

好吧,我在循环中按类型过滤订单,并计算未平仓累积头寸的数量。

在MT5中,你可以简单地等待一个特定的事件,而没有任何压力,你必须这样训练并浪费资源,这很可悲。

那么mt5比mt4高一个数量级。

这也适用于其他功能。

 
在我的具体情况下,每天有一次交易,每天有一次事件,将投入60*60*24=86400个额外的手势。而且目前还没有其他的方法可以做到。

 
Aleksandr Volotko:
在我的具体情况下,如果我们每天交易一次,每天得到一次事件,我们将有60*60*24=86,400的额外努力。而且目前还没有其他办法。

这取决于任务。

如果我们想捕捉一个头寸的开仓/平仓(不是部分)和定单的设置/删除,那么我们就不需要每次都在一个循环中浏览这个列表。

我们可以简单地检查OrdersTotal()的当前和之前的值。如果我们检测到一个差异,我们就有一个事件,然后我们看一下价值。

我使用顺序 和位置属性 的哈希和做了一切。一旦它发生了变化--我们有一些事件--那么我们就看看那里到底发生了什么变化。

但我有一个任务,就是跟踪一切,以及任何变化。

 
Aleksandr Volotko:
在我的具体情况下,如果交易每天执行一次,而一个事件每天发生一次,我们将不得不做出60*60*24=86,400的额外努力。而且没有其他办法。

也有这种方法(如果新订单的出现只可能从EA方面进行)。

  1. 在EA开始时,通过遍历列表上的所有订单,生成一个其订单的数组。
  2. 在每一个新的嘀嗒声中,都会用以下方法检查订单是否存在

if (OrderSelect(nTicket, SELECT_BY_TICKET) && OrderCloseTime() == 0)

如果订单在那里,必要时更新其数据。这是在有必要监测SL/TP/体积的情况下。如果不需要,我们根本就不做其他事情。

如果在已关闭的订单列表中找到该订单(OrderCloseTime() > 0),则从数组中删除它。只有当EA开出订单时,阵列才会得到补充。

因此,我们不必在每次打勾 时都去看整个订单列表。操作只有在它自己的数组中才能实现。

 

我现在尝试比较OrdersTotal()的值(感谢@Artyom Trishkin ),这应该足够了。我不会有部分关闭的情况。

在初始化过程中,我将把值-1分配给旧的,所以在开始时总是进行全面检查,无论市场上是否存在订单。

之后,一个新的订单将出现(事件)或旧的订单将被删除(事件),甚至符号也不重要--我们可能会完全检查一切,它仍然比无休止的大惊小怪要少很多倍。

 
Aleksandr Volotko:

我现在尝试比较OrdersTotal()的值(感谢@Artyom Trishkin ),这应该足够了。我不会有部分关闭的情况。

在初始化过程中,我将把值-1分配给旧的,所以在开始时总是进行全面检查,无论市场上是否存在订单。

之后,新的订单会出现(事件)或旧的订单会被删除(事件),甚至符号也不重要--我们可以对所有的订单进行全面检查,它仍然比无休止的敲打要少很多倍。

但必须小心处理,今天我面对的是,一个仓位已经关闭,另一个仓位在另一个仓位上打开,而且几乎是在同一时间的点位之间。

最后OrdersTotal()仍然是8。专家顾问的逻辑被混淆了 - 它没有重新计算新的数据