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

 
angevoyageur:

这似乎是一个可能的解释,但如果是这样的话,就不正常了。你是否使用异步模式?如果不是,你的EA必须等待服务器的回复,然后才继续处理下一个tick。

如果我理解得好,这是一个随机的问题,你不能重现它?

你可以尝试在m_Trade的声明后添加这一行,以打印更多的调试信息。


你好

自从我在帖子https://www.mql5.com/en/forum/14327 中描述的解决方案以来, 又有了一次双倍交易。

我认为问题在于PositionSelect(Symbol())函数的执行速度(太慢)。也许,新的点数来的太快了,EA在收到PositionSelect(Symbol())的回应之前就发送了一个新的订单。在我的代码中,如果当前头寸大小等于或大于允许的最大头寸大小,理论上不可能发送新的/双倍订单,见代码。

在宏观经济新闻事件中,经纪商X的实时服务器(ECN)会产生如此多的刻度,对于你在metaquotes的模拟服务器上看到的每一个刻度,这个服务器会产生20、30或40个刻度


PositionSelect(Symbol());

// Check of het model al LONG zit.             
if(PositionGetInteger(POSITION_TYPE) == POSITION_TYPE_BUY)
      {
                                                           
// Check of het model al de maximale size in positie zit.                     
      if(PositionGetDouble(POSITION_VOLUME) >= MAX_Trade_Size)
            {
            return;
            }
      } 


我的EA自动扭转双倍头寸以获得正确的头寸大小作为额外的备份。

Problem: Multiple Trades at brokerX
Problem: Multiple Trades at brokerX
  • www.mql5.com
Problem: Multiple Trades at brokerX.
 
snelle_moda:
....

在宏观经济新闻事件中,经纪人X的实时服务器(ECN)会产生如此多的刻度,对于你在metaquotes的模拟服务器上看到的每一个刻度,这个服务器会产生20、30或40个刻度

是的,这是因为DOM是活动的。

....

我的EA自动扭转双倍头寸以获得正确的头寸大小作为额外的备份。

谢谢你的意见。你和其他人一样在同一个经纪商那里遇到这个问题,还是独立于经纪商?
 
angevoyageur:
是的,这是因为DOM是活动的。
谢谢你的意见。你和其他人一样在同一个经纪商上有这个问题,还是独立于经纪商?


什么是 "DOM"?


只有在这个经纪商服务器上,自从这个主题https://www.mql5.com/en/forum/14327,我从来没有在模拟(Metaquotes)服务器上经历过它。

在此之前,经纪人X的服务器产生大约相等数量的ticks作为Metaquotes服务器。

Problem: Multiple Trades at brokerX
Problem: Multiple Trades at brokerX
  • www.mql5.com
Problem: Multiple Trades at brokerX.
 
snelle_moda:


什么是 "DOM"?


只有在这个经纪商服务器上,自从这个主题https://www.mql5.com/en/forum/14327,我从来没有在模拟服务器上经历过它。

在这之前,经纪人X的服务器产生的ticks数量与Metaquotes服务器大致相同。

DOM = Depth of Market,当它被激活时,有更多的Tick事件。
 
angevoyageur:
DOM=市场深度,当它被激活时,会有很多Tick事件。


有可能禁用它吗?

 
snelle_moda:


有可能禁用它吗?

我不这么认为,据我所知,它是在经纪人那边启用的。也许你可以向经纪人询问。
 

我已经通过只允许在价格本身发生变化的情况下出现点子,将传入点子的数量降到最低。


// De sum van de BID/LAST 
   static double dPriceSum;   
   double dOldPriceSum = dPriceSum;
   
// To be used for getting recent/latest price quotes
   MqlTick Latest_Price;      
   SymbolInfoTick(Symbol() ,Latest_Price);

   dPriceSum = Latest_Price.bid + Latest_Price.last; 

// Check if the price is (not)changed.
   if(dPriceSum == dOldPriceSum)
         {
         return;
         }
 
snelle_moda:

我已经通过只允许在价格本身发生变化的情况下出现点子,将传入点子的数量降到最低。


如果要价在变化,或者出价增加1点,最后减少1点怎么办?一个 "正常 "的跳动是指买入和/或卖出的变化。
 
angevoyageur:
如果买入价在变化,或者出价增加1点,最后减少1点怎么办?一个 "正常 "的刻度是买入价和/或卖出价的变化。

这是个好问题。也许我应该只使用投标价格的变化。

图表上的BAR也是基于出价的?


对于我的EA的触发信号,我只对1分钟BAR所依据的价格变化感兴趣。

 
Omg。所以睡眠没有帮助?

我们能做什么来避免这种情况?