Build 216 bug ? isConnected() retorna falso mas metatrader ainda conectado - página 3

 
edddim:

Será que isso pode resolver o problema?

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);
  }

obrigado edddim!


você poderia explicar sua idéia também com palavras?

 

the problem is not in my code it is in the IsConnected().

Obrigado pela iluminação de suas razões para permanecer em loop infinito.

Sim, eu não percebo seu código - eu estava postulando sobre séries de eventos que fizeram com que o Terminal entrasse na área de código onde executou algum código que precipitou o problema da conexão.

Já que você afirma que realmente permanece em loop, então não é possível que o Terminal não consiga lidar com isso corretamente... quem sabe? mas a menos que se divulgue essas idéias ninguém pensará em considerar a probabilidade de tal acontecer, sim?

Mais uma vez, obrigado por sua resposta.

A equipe de apoio não pode imitar seu problema - então às vezes o pensamento lateral é útil...

;)

 

você poderia explicar sua idéia também com palavras?

A idéia é ser verificada, ...apresentada um pouco mais complicada porque vai verificar os tick de entrada com o tempo. Mais pode ser verificado com ArraySize(FILE) maior, e mais preciso seria verificar MOVE[d] > MarketInfo(FILE[d],5) como conjunto de outras possíveis funções incluídas com a mudança exata pontiaguda. Uma versão mais simples de verificação se apenas conectada poderia ser:

int incomeTime = TimeCurrent();
Sleep(1000);
if ( incomeTime <= 0 ) return;
RefreshRates();
if ( incomeTime >= TimeCurrent() ) return;

A situação é se for mais de 1000 A pausa para dormir seria imprecisa como precisão, mas se menos pudesse resultar em receber o mesmo tempo que anteriormente, porque o tempo recebido é em segundos.

A próxima verificação poderia ser se o tick for alterado, do que a ser feita após as operações
.

Isso é do meu ponto de vista.

 
Obrigado por esta idéia, Edddim.

Mas infelizmente, isto não resolve o problema, pois é bastante inconveniente e não é realmente confiável.

Além disso, é verificar se o mercado está aberto e não está verificando a conexão com a conta comercial (se eu entendi sua solução).


Peço-lhe amigavelmente, MetaQuotes, que se esforce mais para corrigir isto, já que é uma questão crítica e eu não sou o único que se depara com isto.

Entretanto, por favor, não se ofenda a meus pedidos se você já estiver trabalhando nisso.


Cordiais cumprimentos,


Daniel.

 

Hoje, instalei um roteiro de observação no meu Servidor Virtual que informa o estado de duas estações MT4 IsConnected(). Com um deles, MIG Investment, o MT4 fica ligado !isConnected() após uma ou duas pequenas desconexões, mesmo que esteja realmente conectado.

Você poderia, querida Equipe MT4 Dev, fazer um teste maior com várias estações MT4 de corretagem diferentes e obverter o isConnected()-state? Estou mais do que certo de que você será capaz de reproduzir isto se você fizer algum esforço!

A maioria dos scripts e EAs disponíveis dependem de IsConnected() devolver o status correto da conexão, reiniciar o MT4 o tempo todo não é a solução de trabalho com a qual eu estou satisfeito.

 

Mais uma vez. Para determinar este problema, você deve usar um simples especialista

void start()
  {
   if(!IsConnected()) Print("Alarm!!! Connection is lost!");
  }

E NÃO COM SCRIPTS OU EA COM LOOP!!!!!!! INTERMINÁVEL

Se seu script informa perda de conexão, mas nossa EA (veja acima) mantém o silêncio, então você tem um problema global com a internet (por exemplo, problema com a última milha de seu provedor de internet)

Se a EA imprime "Alarme", então temos problemas com nossa rotina de conexão

 

Sim! Stringo está respondendo novamente, muito obrigado.

No entanto, isto é o que é! Eu tentei com este tipo de EAs/scripts simples sem loop.

Btw, tenho certeza de que não estou tendo problemas com minha internet, pois ela foi testada em minha rede privada e em um servidor virtual.

O problema é que eu posso negociar e tudo parece e _é_ ok mas isConnected() ainda retorna FALSE

 

A operação comercial inicializa sua própria conexão com o servidor comercial.

IsConnected() mostra o status da conexão de bombeamento de dados.

1. O indicador de conexão (canto inferior direito) é vermelho ou escuro?

2. A que corretor você está conectado?

3. Qual sistema operacional está instalado em seu servidor virtual?

 

obrigado por sua resposta rápida, aqui minhas respostas:

1. É verde-vermelho, como sempre

2. Investimentos da MIG

3. Em meu servidor virtual, o Windows Server 2003 está instalado. Em meu desktop doméstico, que ocasionalmente mostra o mesmo problema WinXP.

 
stringo:

Mais uma vez. Para determinar este problema, você deve usar um simples especialista

void start()
  {
   if(!IsConnected()) Print("Alarm!!! Connection is lost!");
  }

E NÃO COM SCRIPTS OU EA COM LOOP!!!!!!! INTERMINÁVEL

Se seu script informa perda de conexão, mas nossa EA (veja acima) mantém o silêncio, então você tem um problema global com a internet (por exemplo, problema com a última milha de seu provedor de internet)

Se a EA imprime "Alarme", então temos problemas com nossa rotina de conexão

Eu tentei o seguinte:

inícionulo()
{

if(IsConnected()) Imprimir("Conectado!");
se(!IsConnected()) Imprimir("Alarme!!! A conexão está perdida!");
}

Conectado é impresso quando há conexão, mas quando a conexão é perdida, o EA morre. Acho que a razão é porque não há mais carrapatos de entrada para acionar o código !IsConnected() e, portanto, ele nunca detectará uma conexão perdida!!!

Razão: