build 216 bug ? isConnected() returns false but metatrader still connected - 页 2

 
好的,是的,我知道了......嗯......我们将看看它是否会回来;)
 

Hi Stringo,



不幸的是,这个错误一直存在。

当运行下面的测试脚本并从一个账户切换到另一个账户时(在我的测试案例中,我使用了2或3个不同经纪商的账户,并从一个账户切换到另一个账户),你可以看到,在几个账户变化(相当随机的数字)之后,connectionState真的没有变回1,它保持在0,即使终端_是连接的。


在你看来,这可能不是一个关键的错误。然而,对于一些开发显示连接状态的脚本的人来说,所进行的测试的结果是相当惊人的。

这就是为什么我非常感谢你能再看一下这个问题。



这里是测试脚本。


//+------------------------------------------------------------------+
//| script program start function                                    |
//+------------------------------------------------------------------+
int start()
{
   while(!IsStopped())
   {
      Print("test"+IsConnected());
      Sleep(500);
   }
}




您真诚的感谢。


丹尼尔.

 
我也可以确认,这个错误存在于Build 216中。它似乎发生在一些 "连接失败"--登录序列之后。
 
是的,这个脚本是已知的。但我们应该重现环境来检测问题。然而,我们不能重现
 

我也必须确认同样的错误。在我的EA中,我同时检查 连接是否存在。如果不存在,我的脚本就会退出。

有没有人找到解决这个问题的方法?

 

脚本不能确定问题,因为它是无休止的循环和独立于传入刻度的。

问题只能显示专家。简单的专家,只有一行代码 - Print(IsConnected())。

滴答声响起(这意味着终端已连接)--启动函数运行--哎呀!IsConnected()返回0(即错误)。

 

谢谢

是的,我在使用

int start()
{
 while(true)
 {
  if(IsConnected())
   {
    ....... i do my work 
   {
   else 
   {return(-1);} // so if connection was lost i break the infiny loop
 }
}

问题是,当连接恢复时,IsConnected()保持旧值为假,不改变为真!但是我看到了价格的变化,并且终端100%连接。这是一个错误,因为无限循环被破坏了,并且在连接恢复后的第一个点上没有发生任何事情,所以启动被执行。但由于某些原因,Is Connected()仍然返回错误。如果我把EA从图表中删除,然后再把它放进去,一切都会正常,直到下一次连接丢失。



这让我抓狂。请想办法解决这个问题。

谢谢

 

Liliput - 如果以上是start()的使用概要,为什么要用infinit循环留在里面?

我问的原因是,正常的方法是:输入 > 我想工作吗? 不:返回 > 工作 > 返回

(正常--当然是主观的;o)

不是告诉你如何设计--那是你的事,只是问你的理由,然后我学到更多/看到不同的做事方法

我为什么要问?

我不知道终端是如何表现的,例如,如果一个EA拒绝返回它,可能有许多 数据点,因为EA没有返回,终端只是没有调用start()......或者 - 它只是没有调用,最终由于许多 数据点流过而没有能够调用EA的start(),终端进入未知的深度,表现出连接问题?

;)

 

这是否可以解决这个问题呢?

string FILE[1];
int MOVE[1];
 
void init() { FILE[0]=Symbol(); }
 
int start()
  {
//---- check connection
   if ( !Connection() ) return(0);
//---- 
   return(0);
  }
 
bool Connection()
  {
   int d;
   bool connect;
   RefreshRates();
   for ( d=0; d<ArraySize(FILE); d++)
    {
     if ( MOVE[d] != MarketInfo(FILE[d],5) )
      {
       MOVE[d] = MarketInfo(FILE[d],5);
       /* if ( !connect ) */
       connect=1;
      }
    }
   return(connect);
  }
 
ukt:

Liliput - 如果以上是start()的使用概要,为什么要用infinit循环留在里面?

我问的原因是,正常的方法是:输入 > 我想工作吗? 不:返回 > 工作 > 返回

(正常--当然是主观的;o)

不是告诉你如何设计--那是你的事,只是问你的理由,然后我学到更多/看到不同的做事方法

我为什么要问?

我不知道终端是如何表现的,例如,如果一个EA拒绝返回它,可能有许多 数据点,因为EA没有返回,终端只是没有调用start()......或者 - 它只是没有调用,最终由于许多 数据点流过而没有能够调用EA的start(),终端进入了未知的深度,表现出连接问题?

;)


ukt,没问题,我会回答。我做infinit循环是因为我需要做很多操作,我不想等待新的tick来做这些操作。所以我通过这种方式从终端获取控制权,并在我需要和想要的时候做我的工作。我使用RefreshRates()来获取实际数据。

因此,检查与经纪人的连接是否存在是合乎逻辑的,因为我发送/关闭/修改订单,如果没有连接就没有工作。