IsConnected() - page 3

 

Désolé, mais pourquoi cela ne devrait pas fonctionner :

int start()

{

    while ( !IsStopped() )
    {
        IsConnectedBefore = IsConnectedNow;
        IsConnectedNow = IsConnected();
      ....

     }

}   

Mon EA est toujours dans le while-loop et n'a pas besoin de tick.

 

Toute cette histoire autour de PostMessageA() a été postée uniquement en réponse à la phrase "call start() from init()" plus tôt dans ce fil de discussion. Je ne pouvais pas laisser cela sans commentaire. "call start() from init()" est tout simplement faux à bien des égards et je me devais de le commenter et de fournir une solution appropriée pour y parvenir, à savoir forcer un appel de start() à partir de init() même pendant les week-ends.


Pour le problème du démarrage de MT4 dans un état déconnecté, il ne fournit pas de solution. Bien que je ne comprenne pas non plus quel pourrait être le cas d'utilisation de cette solution, puisque c'est la connexion qui va et vient alors que metatrader lui-même devrait être facilement maintenu en fonctionnement 24/7 sans interruption. Et même lorsqu'il est redémarré le week-end, avec le PostMessageA() dans init(), il reprendra immédiatement la boucle dans start() dès que la connexion sera rétablie après le redémarrage, même sans tick, puis il continuera à fonctionner pour toujours jusqu'au prochain redémarrage (accidentel).

 
sunshineh:

Désolé, mais pourquoi cela ne devrait pas fonctionner :

Mon EA est toujours dans le while-loop et n'a pas besoin de tick.


yep, Parce que vous n'avez pas redémarré le terminal alors que vous n'avez pas de connexion à Internet, mais si vous redémarrez le terminal alors que vous n'avez pas de connexion Internet, l'AE ne vient pas dans la boucle sans un tick, peu importe ce que vous faites, même si vous utilisez PostMessageA() ou appelez Start () à partir de init(), la seule façon de le faire est avec un script, parce que les scripts sont en cours d'exécution indépendamment de tick ou non.
 

En tout cas, merci à tous d'avoir essayé de m'aider. J'ai décidé de me salir un peu les mains et de lancer un programme externe pour exécuter le script, fin de l'histoire.
Quoi qu'il en soit, la fonction IsConnected() me fait toujours rire, si une chose aussi simple il ne couvre pas

 
7bit:

Toute cette histoire autour de PostMessageA() a été postée uniquement en réponse à la phrase "call start() from init()" plus tôt dans ce fil de discussion. Je ne pouvais pas laisser cela sans commentaire. "call start() from init()" est tout simplement faux à bien des égards et je devais donc le commenter et également fournir une solution appropriée pour y parvenir, à savoir forcer un appel de start() à partir de init() même pendant les week-ends.


Pour le problème du démarrage de MT4 dans un état déconnecté, il ne fournit pas de solution. Bien que je ne comprenne pas non plus quel pourrait être le cas d'utilisation de cette solution, puisque c'est la connexion qui va et vient alors que metatrader lui-même devrait pouvoir fonctionner 24 heures sur 24, 7 jours sur 7, sans interruption. Et même lorsqu'il est redémarré le week-end, avec le PostMessageA() dans init(), il reprendra immédiatement la boucle dans start() dès que la connexion sera rétablie après le redémarrage, même sans tick, puis il continuera à fonctionner pour toujours jusqu'au prochain redémarrage (accidentel).


Merci pour votre intervention 7Bit, il est utile de connaître de meilleures méthodes, j'ai exécuté une EA avec succès comme je l'ai décrit ci-dessus pour tenter de résoudre un problème qui me causait des problèmes importants. Le terminal perdait régulièrement la connexion mais, pour une raison inconnue, ne la retrouvait pas. Il me fallait rescanner manuellement les serveurs dans le terminal avant qu'il ne se reconnecte. Au départ, j'ai pensé que c'était un hasard de la programmation, mais trop souvent pour être un hasard, je pouvais attendre une heure, ne pas rétablir la connexion et ensuite, dès que je cliquais sur rescan, il se reconnectait. Ma solution était de tester continuellement l'état de la connexion... s'il perdait la connexion, je lui donnais 5 minutes pour se reconnecter et je criais sur tous les toits dans les alertes, les e-mails et les journaux que cela se produisait, puis je fermais le terminal et redémarrais. Cela a fonctionné dans la majorité des cas. De temps en temps, il y avait un problème de connexion légitime et comme l'EA ne s'initialise pas sans connexion, je suis coincé dans un trou. J'ai cherché des méthodes pour résoudre ce problème, toutes en dehors de MT4 et donc en dehors de mes capacités informatiques actuelles. Heureusement, j'ai changé de courtier et je n'ai pas eu de problèmes avec mon fournisseur actuel... donc travailler sur ce problème n'est pas une priorité.

Mais il peut arriver que la connexion soit perdue et que MT4 ne parvienne pas à se reconnecter alors que la connexion est effectivement disponible. Un redémarrage du terminal ne perturbe pas mes EA, mais rester sans connexion pendant une heure, oui !

V

 
Viffer:

Heureusement, j'ai changé de courtier et je n'ai pas eu de problèmes avec mon fournisseur actuel... donc travailler sur ce sujet n'est pas une priorité.

Je n'ai pas encore vu ce problème avec mon courtier, donc il se peut vraiment que cela n'arrive qu'avec certains courtiers. La connexion est parfois perdue pendant quelques secondes une ou deux fois par jour, mais se reconnecte toujours immédiatement.


Pour bricoler rapidement une application externe qui peut surveiller et contrôler à distance une autre application Windows (cliquer sur des boutons, commandes de menu, etc.), je recommande AutoIT. C'est un langage de script facile à apprendre, comme le BASIC, qui est très centré sur ce type de choses.

 
7bit:

Je n'ai pas encore vu cela avec mon courtier, donc il se peut vraiment que cela n'arrive qu'avec certains courtiers. La connexion est parfois perdue pendant quelques secondes une ou deux fois par jour, mais elle se reconnecte toujours immédiatement.


Pour assembler rapidement une application externe capable de surveiller et de contrôler à distance une autre application Windows (boutons à cliquer, commandes de menu, etc.), je recommande AutoIT. C'est un langage de script facile à apprendre, comme le BASIC, qui est très centré sur ce type de choses.

Merci pour cette information, je vais le consulter.

V

 
qjol:

la fonction IsConnected() me fait toujours rire, si une chose aussi simple il ne couvre pas

Je pensais que le problème venait du fait que MT4 retardait init() après un redémarrage jusqu'à ce qu'il soit complètement connecté ?


Qu'est-ce que cela a soudainement à voir avec IsConnected() ? IsConnected() semble fonctionner comme prévu. Elle renvoie true quand elle est connectée et false quand elle est déconnectée. Je ne vois pas ce qu'il y a de si risible là-dedans.

 
7bit:

Je pensais que le problème venait du fait que MT4 retardait init() après un redémarrage jusqu'à ce qu'il soit complètement connecté ?


Qu'est-ce que cela a soudainement à voir avec IsConnected() ? IsConnected() semble fonctionner comme prévu. Elle renvoie true quand elle est connectée et false quand elle est déconnectée. Je ne vois pas ce qui est si risible à ce sujet.


parce que

if (!IsConnected()) devrait retourner false & Tant qu'il n'y a pas de nouveau tick, IsConnected() ne peut pas être vérifié C'est pour cela que cela me fait rire

 
qjol:

Tant qu'il n'y a pas de nouveau tick IsConnected() ne peut pas être vérifié A cause de cela, c'est pourquoi cela me fait rire

Il peut être vérifié, il suffit d'exécuter la vérification dans une boucle infinie. Comment démarrer cette boucle lors du démarrage du terminal pendant une interruption de connexion est un problème complètement distinct. Une fois que vous avez fait tourner votre boucle, elle fera ce qui est attendu.

Votre problème n'a rien à voir avec la fonction IsConnected(). Avec le même argument, vous pourriez également vous plaindre de Print() ou Alert() ou de toute autre fonction que vous ne pouvez pas appeler parce que vous n'avez pas pu lancer le code entier en premier lieu pour une raison complètement différente.