我的EA做了一个重复输入 - 页 5

 
Klammeraffe:

关于 "每个刻度 "的那一行可能是它不再发生的原因。

该函数只在新条形图出现时执行。因此,最可能的是,只有一个条形图的第一个刻度可以执行交易。在第一个条形图之后,代码得到一个 "返回",直到新条形图出现。也许这对我来说已经解决了问题。

我认为这段代码来自文章。

这是另一个解决方法,但如果经纪人或其他地方有任何错误返回,你的信号就不再有效了,除非你保持一个循环,反复检查
 
doshur:
  • 最初由doshur发布的代码,可以解释为什么他可以在日志中看到 "Position opened in... "而没有交易被打开。这是因为,即使PositionOpen()返回true,也不意味着交易已经进行。见文档。但它不能解释为什么 "双倍 "的交易被放置。
更正。有一个双倍的"Position opened in... "和2个交易已经被打开。
当然了。我是说 "为什么他能看到..."。这里的重点是,你的代码中没有任何东西可以解释为什么你会有这2笔交易。
 
angevoyageur:
当然了。我的意思是 "为什么他能看到..."。这里的重点是,你的代码中没有任何东西可以解释为什么你会得到这2个交易。
好吧。明白了。
 
angevoyageur:

我认为找到这个问题背后的原因是非常重要的,当然,在我们能够完全理解发生了什么之前,有一个变通的办法也是非常重要的(睡眠?所以我试着恢复一下情况。

* 当使用CTrade类的PositionOpen方法时,至少有3个用户在某些时候得到了2个相同方向的交易,而不是1个,导致相对于预期的交易量增加了一倍。

我同时使用两种方法,开新仓="老式方法",修改止损="CTrade类"。


* 这个问题似乎发生在同一个经纪人身上,在一个激活了市场深度的符号上(请有关人员确认这一点)。

是的,经纪人X的服务器,市场深度是激活的。


* 这个问题发生在同步订单上,没有使用异步订单(请确认)。

是的,没有使用异步订单。


* 这个问题是随机发生的。

是的,但只是在繁忙的市场时间(宏观经济 事件)。



 

在我看来,这个问题很容易解决。


如果使用 "PositionSelect(Symbol()) "函数,并且终端已经更新了该函数的数据,EA应该一直等待响应/回答,然后才能继续执行代码。

如果使用了 "OrderSend(mrequest,mresult) "函数,并且终端已经更新了该函数的数据,EA应该始终等待响应/回答,然后才能继续执行代码。


我还提到了终端本身,因为函数的数据将被复制到终端,这也将需要一些时间。

这样一来,当前的仓位大小将始终被正确计算,所以重复下单的情况将不再发生


你怎么看?

 
snelle_moda:

在我看来,这个问题很容易解决。


如果使用 "PositionSelect(Symbol()) "函数,并且终端已经更新了该函数的数据,EA应该一直等待响应/回答,然后才能继续执行代码。

如果使用了 "OrderSend(mrequest,mresult) "函数,并且终端已经更新了该函数的数据,EA应该始终等待响应/回答,然后才能继续执行代码。


我还提到了终端本身,因为函数的数据将被复制到终端,这也将需要一些时间。

这样一来,当前的仓位大小将始终被正确计算,所以重复下单的情况不会再发生


你有什么看法?

不知道你说的 "总是在等待回应 "是什么意思...。?

总之,我向ServiceDesk填写了一个请求,以征求意见。我们将拭目以待。

 
angevoyageur:

不知道你说的 "总是在等待回应 "是什么意思。?

总之,我向服务台填写了一个请求,以征求意见。我们将拭目以待。

"不知道你说的 "总是在等待答复 "是什么意思??"


EA应该等待/停止,直到PositionSelect(Symbol())函数 完成了将位置数据复制到程序环境中。

把它看作是一个强制睡眠()函数

 
snelle_moda:

"不知道你说的 "总是等待回应 "是什么意思...??"


EA应该等待/停止,直到PositionSelect(Symbol())函数完成将位置数据复制到程序环境中。

把它看作是一个强制睡眠()函数

好的理解。但我不能满足于 这样的解决方案,要么是我们不了解的东西,要么是某个地方有错误。
 
我只希望会有一个解决方案。

无论如何,祝大家圣诞快乐。
 
服务台有什么更新吗?