¿Se puede resolver en principio la tarea en MQL4?

 

La tarea es: En un terminal, hay 9 pares diferentes, y 8 EAs trabajando en cada uno de ellos, y a cada uno se le permite operar en el noveno par, mi EA "gestor", que controla cuántos pares y respectivamente copias de los EAs comerciales pueden abrir órdenes al mismo tiempo. Todos los Asesores Expertos obedecen a una variable GLobal. He escrito un simple bucle que lee los "números mágicos" de las órdenes ya abiertas y no permite la apertura de nuevas órdenes de otros EAs estableciendo el valor de la variable global de control que prohíbe la negociación.

Así es como debería ser "bajo el escenario". No es así como funciona realmente. El problema es que hasta que mi EA "gestor" tiene tiempo de establecer el valor de la variable global que prohíbe las operaciones, los EAs que trabajan tienen tiempo de abrir órdenes en 6 pares en lugar de los 2 permitidos. El algoritmo funciona correctamente, si primero inicio el gestor de EAs y luego dejo que los EAs operen, entonces más de 2 EAs (2 pares) no se abrirán (prohibido por la variable global establecida por el gestor de EA).

¿Es posible establecer en MQL4 un sistema de prioridades, de manera que primero se ejecute el código del EA, y luego todos los demás EAs?

Intenté hacer un bucle con start(), quizás hice algo mal pero la terminal se cuelga pero no pasa nada.

Ayuda para un profesional novato.

 
Zakyza:

¿Es posible establecer un sistema de prioridades en MQL4, de modo que el código del EA se ejecute primero, y luego todos los demás EAs?

Intenté hacer un bucle con start(), tal vez hice algo mal, pero no obtuve nada más que la suspensión de la terminal.

Para un profesional principiante, necesito ayuda.

Es posible. Por ejemplo, añadiendo una variable más para el terminal, que sólo él puede manejar, y para los demás se convertirá en un permiso de trabajo.

Entiendo que he sugerido lo que ya han puesto en práctica. Aparentemente, se hace de forma incorrecta.

Si el asesor gestor no ha tenido tiempo de cambiar la variable terminal, los esclavos no deberían poder operar.

 
Mira esta función. Esta es la única función en MQL4 que maneja el nivel del núcleo (proporciona acceso atómico). Debería ayudar.
 
tara:
Es posible. Por ejemplo, añadiendo otra variable de terminal que sólo él puede controlar, y para los demás se convertirá en un permiso de trabajo.


No hay tiempo para que el gestor de EA establezca el valor deseado de la variable global
 
Zakyza:

El gestor de EA no tiene tiempo para establecer el valor correcto de la variable global

Bueno, no tienes que darle al esclavo el derecho a respirar hasta que se despierte.
 
Zhunko:
Mira esta función. Esta es la única función en MQL4 que maneja el nivel del núcleo (proporciona acceso atómico). Debería ayudar.

Gracias, espero que sirva de ayuda, se me ha pasado por alto de alguna manera. "puede utilizarse para la organización de semáforos cuando varios Asesores Expertos que trabajan simultáneamente interactúan dentro de un mismo terminal cliente" - da esperanzas. Aunque, si se llama a GlobalVariableSetOnCondition desde start() de mi EA en el último turno, después de que el EA ya haya entrado en tratos, no sé qué diferencia habrá .
 
tara:

Bueno, no tienes que darle al esclavo el derecho a respirar hasta que se despierte.

¿Cómo se organiza esto? Permitir que los esclavos comercien manualmente no es una opción.
 
Si los asesores esclavos son asesores robados, te has equivocado de dirección.
 
¿Por qué robado? El propio autor del EA lo ha puesto gratis, yo sólo tengo unas cuantas copias y quiero organizarlas mediante variables globales. ¿Por qué dices eso?
 
He dicho: si.
 
tara:
He dicho: si.

De acuerdo. No, no es robado.