Cette tâche peut-elle être résolue en principe dans MQL4 ?

 

La tâche est la suivante : dans un terminal, il y a 9 paires différentes, et 8 EAs travaillant sur chacune d'entre elles, et chacune est autorisée à négocier sur la 9ème paire, mon 'EA de gestion' fonctionne, qui garde la trace de combien de paires et de copies respectives d'EAs de négociation peuvent ouvrir des ordres à un moment donné. Tous les Expert Advisors obéissent à une seule variable GLobal. J'ai écrit une simple boucle qui lit les "nombres magiques" des ordres déjà ouverts et ne permet pas l'ouverture de nouveaux ordres d'autres EAs en fixant la valeur de la variable globale de contrôle qui interdit le trading.

C'est ainsi que cela devrait se passer "dans le cadre du scénario". Ce n'est pas comme ça que ça marche vraiment. Le problème est que tant que mon EA "gestionnaire" n'a pas le temps de définir la valeur de la variable globale interdisant les transactions, les EA qui travaillent ont le temps d'ouvrir des ordres sur 6 paires au lieu des 2 autorisées. L'algorithme fonctionne correctement, si je démarre d'abord le gestionnaire d'EA et que je laisse ensuite les EA trader, alors plus de 2 EA (2 paires) ne s'ouvriront pas (interdit par la variable globale définie par le gestionnaire d'EA).

Est-il possible d'établir dans MQL4 un système de priorités, de sorte que le code de l'EA soit exécuté en premier, et ensuite tous les autres EA ?

J'ai essayé de boucler start(), peut-être que j'ai fait quelque chose de mal mais le terminal raccroche mais rien ne se passe.

Aide pour un pro débutant.

 
Zakyza:

Est-il possible de définir un système de priorités dans MQL4, de sorte que le code de l'EA soit exécuté en premier, puis toutes les autres EA ?

J'ai essayé de boucler start(), peut-être que j'ai fait quelque chose de mal, mais je n'ai rien obtenu et le terminal a raccroché.

Pour un pro débutant, j'ai besoin d'aide.

C'est possible. Par exemple, en ajoutant une variable supplémentaire pour le terminal, que lui seul peut gérer, et pour les autres, cela deviendra une autorisation de travailler.

Je comprends que j'ai suggéré ce que vous avez déjà mis en œuvre. Apparemment, ce n'est pas fait correctement.

Si le conseiller en gestion n'a pas eu le temps de modifier la variable terminale, les esclaves ne doivent pas être autorisés à négocier.

 
Regardez cette fonction. C'est la seule fonction de MQL4 qui gère le niveau du noyau (fournit un accès atomique). Cela devrait aider.
 
tara:
Possible. Par exemple, en ajoutant une autre variable terminale qu'il est le seul à pouvoir contrôler, et qui deviendra pour les autres une autorisation de travailler.


Le gestionnaire de l'EA n'a pas le temps de définir la valeur souhaitée de la variable globale.
 
Zakyza:

Le gestionnaire d'EE n'a pas le temps de définir la bonne valeur de la variable globale

Vous n'avez pas à donner à l'esclave le droit de respirer jusqu'à ce qu'il se réveille.
 
Zhunko:
Regardez cette fonction. C'est la seule fonction de MQL4 qui gère le niveau du noyau (fournit un accès atomique). Cela devrait aider.

Merci, j'espère que cela vous aidera, j'ai raté quelque chose. "peut être utilisé pour l'organisation de sémaphores lorsque plusieurs Expert Advisors travaillant simultanément interagissent au sein d'un seul terminal client" - cela donne de l'espoir. Cependant, si GlobalVariableSetOnCondition est appelé à partir de start() de mon EA au dernier tour, après que les EA ont déjà conclu des transactions, je ne sais pas quelle différence cela fera .
 
tara:

Vous n'avez pas à donner à l'esclave le droit de respirer jusqu'à ce qu'il se réveille.

Comment organisez-vous cela ? Permettre aux esclaves de commercer manuellement n'est pas une option.
 
Si les conseillers esclaves sont des conseillers volés, alors vous êtes venus à la mauvaise adresse.
 
Pourquoi volé ? L'auteur de l'EA l'a lui-même mis à disposition gratuitement, je n'exécute que quelques copies et je veux les organiser au moyen de variables globales. Pourquoi dites-vous cela ?
 
J'ai dit : si.
 
tara:
J'ai dit : si.

Ok. Non, pas volé.