Build 216 bug ? isConnected() retourne false mais metatrader reste connecté - page 3

 
edddim:

Est-ce que cela pourrait résoudre le problème... ?

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

merci edddim !


pourriez-vous expliquer votre idée également avec des mots ?

 

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

Merci de m'avoir éclairé sur les raisons pour lesquelles vous restez dans la boucle infinie.

Oui, je me rends compte que ce n'est pas votre code - je postulais sur la série d'événements qui ont fait que le terminal s'est retrouvé dans une zone de code où il a exécuté un code qui a précipité le problème de connexion.

Puisque vous dites que vous restez effectivement en boucle, n'est-il pas possible que le Terminal ne puisse pas gérer cela correctement ? Qui sait ? Mais à moins de rendre ces idées publiques, personne ne pensera à considérer la probabilité d'un tel événement, n'est-ce pas ?

Encore une fois, merci pour votre réponse.

L'équipe de support ne peut pas émuler votre problème - donc parfois la réflexion latérale est utile...

;)

 

Pourriez-vous expliquer votre idée également avec des mots ?

L'idée est d'être vérifié, ...un peu plus compliqué présenté parce qu'il va vérifier entrant tick avec le temps. On peut en vérifier plus avec ArraySize(FILE) plus grand, et plus précis serait de vérifier MOVE[d] > MarketInfo(FILE[d],5) comme ensemble d'autres fonctions possibles incluses avec le changement exact pointé. Une version plus simple de la vérification de la connexion pourrait être utilisée :

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

La situation est la suivante : s'il s'agit d'un nombre supérieur à 1000, la pause sommeil serait inexacte en termes de précision, mais s'il s'agit d'un nombre inférieur, le résultat pourrait être la réception du même temps que le précédent, car le temps reçu est en secondes.

La prochaine vérification pourrait être si le tick est changé, que les opérations suivantes soient effectuées.

C'est mon point de vue.

 
Merci pour cette idée, Edddim.

Mais malheureusement, cela ne résout pas le problème car c'est assez peu pratique et pas vraiment fiable.

En outre, il vérifie si le marché est ouvert et ne vérifie pas la connexion au compte de trading (si j'ai bien compris votre solution).


Je vous demande amicalement, MetaQuotes, de faire un peu plus d'efforts pour résoudre ce problème car c'est un problème critique et je ne suis pas le seul à le rencontrer.

Cependant, ne vous offusquez pas de mes demandes si vous y travaillez déjà.


Cordialement,


Daniel.

 

Aujourd'hui, j'ai installé un script observateur sur mon serveur virtuel qui indique l'état de la fonction IsConnected() de deux stations MT4. Avec l'une d'entre elles, MIG Investment, MT4 reste sur !isConnected() après une ou deux courtes déconnexions alors qu'elle est réellement connectée.

Pourriez-vous s'il vous plaît, chère équipe de développement MT4, faire un plus grand test avec plusieurs stations MT4 de différents courtiers et inverser l'état isConnected() ? Je suis plus que certain que vous serez en mesure de reproduire ce problème si vous y mettez du vôtre !

La plupart des scripts et EAs disponibles dépendent du fait que IsConnected() renvoie l'état de connexion correct, redémarrer MT4 tout le temps n'est pas une solution de rechange qui me convient.

 

Encore une fois. Pour déterminer ce problème, vous devez utiliser un simple expert.

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

PAS UN SCRIPT OU UNE EA AVEC UNE BOUCLE SANS FIN !!!!!!!

Si votre script signale une perte de connexion, mais que notre EA (voir ci-dessus) reste silencieux, alors vous avez un problème global avec Internet (par exemple un problème avec le dernier kilomètre de votre fournisseur d'accès).

Si l'EA affiche une "alarme", alors nous avons un problème avec notre routine de connexion.

 

Ouais ! Stringo répond à nouveau, merci beaucoup.

Cependant, c'est ce que c'est ! J'ai essayé avec ce genre d'EA/scripts simples sans boucle.

Par ailleurs, je suis absolument certain que je n'ai pas de problème avec mon internet puisque le test a été effectué sur mon réseau privé et sur un serveur virtuel.

Le truc c'est que je peux trader et tout semble et _est_ ok mais isConnected() retourne toujours FALSE

 

L'opération commerciale initialise sa propre connexion avec le serveur commercial.

IsConnected() indique l'état de la connexion des données de pompage.

1. L'indicateur de connexion (coin inférieur droit) est-il rouge ou foncé ?

2. A quel courtier êtes-vous connecté ?

3. Quel système d'exploitation est installé sur votre serveur virtuel ?

 

Merci pour votre réponse rapide, voici mes réponses :

1. C'est vert-rouge comme d'habitude

2. Investissements MIG

3. Sur mon serveur virtuel, Windows Server 2003 est installé. Sur mon ordinateur personnel, qui présente occasionnellement le même problème, WinXP.

 
stringo:

Encore une fois. Pour déterminer ce problème, vous devez utiliser un simple expert.

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

PAS UN SCRIPT OU UNE EA AVEC UNE BOUCLE SANS FIN !!!!!!!

Si votre script signale une perte de connexion, mais que notre EA (voir ci-dessus) reste silencieux, alors vous avez un problème global avec Internet (par exemple un problème avec le dernier kilomètre de votre fournisseur d'accès).

Si l'EA affiche une "alarme", alors nous avons un problème avec notre routine de connexion.

J'ai essayé ce qui suit :

void start()
{

if(IsConnected()) Print("Connecté!");
if(!IsConnected() ) Print("Alarme ! !! La connexion est perdue !");
}

Connected est imprimé lorsqu'il y a une connexion mais lorsque la connexion est perdue, l'EA est mort. Je pense que la raison est qu'il n'y a plus de ticks entrants pour déclencher le code !IsConnected() et donc il ne détectera jamais une perte de connexion ! !!