De la teoría a la práctica - página 227

 
Maxim Dmitrievsky:

porque primero hay que comprobar el resultado de la ejecución de la operación y luego el total de la orden

El autor tiene varios EAs idénticos trabajando de forma asíncrona, cada uno en el gráfico de su propio par y, aparentemente, sin comunicarse entre sí. Por lo tanto, puede ocurrir que un EA haya enviado una orden para abrir una posición y la respuesta no haya llegado aún, es decir, la posición no se ha abierto todavía (OrdersTotal()==0). Entonces otro EA (y quizás más de uno) también envía una solicitud de operación, y como resultado, se abren 2 o más posiciones a la vez. La idea es que para evitar estos solapamientos, deberíamos establecer una bandera (una variable global del terminal) y leerla cuando se envíe la 1ª orden de operación por parte de otros Asesores Expertos.

Pero estas situaciones pueden darse con bastante frecuencia, especialmente en las noticias, cuando muchos pares dan saltos bruscos casi de forma sincronizada.

 
Alexander Sevastyanov:

El autor tiene varios EAs del mismo tipo, cada uno está en el gráfico de su propio par, y aparentemente, no se comunican entre sí. Por lo tanto, puede haber momentos en los que un EA haya enviado una orden de negociación para abrir una posición y la orden esté en proceso o la respuesta no haya llegado aún, es decir, la posición no se haya abierto todavía (OrdersTotal()==0). Entonces otro EA (y quizás más de uno) también envía una solicitud de operación, y como resultado, se abren 2 o más posiciones a la vez. La idea es que para evitar estos solapamientos, deberíamos establecer una bandera (una variable global del terminal) y leerla cuando se envíe la 1ª orden de operación por parte de otros Asesores Expertos.

Estas situaciones pueden repetirse, sobre todo en las noticias, cuando muchos pares están dando fuertes saltos.

No he visto que se especifique que sólo debe haber 1 comercio a la vez, pensé que debería haber varias aperturas para 1 símbolo

 
Alexander Sevastyanov:

El autor tiene varios EAs del mismo tipo, cada uno está en el gráfico de su propio par, y aparentemente, no se comunican entre sí. Por lo tanto, puede haber momentos en los que un EA haya enviado una orden de negociación para abrir una posición y la orden esté en proceso o la respuesta no haya llegado aún, es decir, la posición no se haya abierto todavía (OrdersTotal()==0). Entonces otro EA (y tal vez más de uno) también envía una solicitud de operación, y como resultado, 2 o más posiciones se abren a la vez. La idea es que para evitar este tipo de problemas, deberíamos establecer una bandera (una variable global del terminal) y leerla cuando se envíe la primera orden de operación por parte de otros Asesores Expertos.

Eso es exactamente lo que es, Alexander.

Ahora estoy leyendo atentamente la rama y todas las recomendaciones para solucionar este problema. Porque me aterra lo que pueda pasar si se abren operaciones a la vez en los 32 pares... Por supuesto, no debería ser así.

 
Alexander_K2:

...leyendo ahora el hilo y todas las recomendaciones para solucionar este problema. Porque me da miedo pensar qué pasará si se abren operaciones en los 32 pares a la vez... Por supuesto, no debería ser así.

Si necesita ayuda, no dude en ponerse en contacto conmigo.

Por cierto, el retraso en la apertura de una posición se compone principalmente del doble ping (ida y vuelta) y del tiempo de procesamiento de la orden de negociación por parte del servidor. Los buenos corredores que no sobrecargan los servidores reales y tienen un buen canal de comunicación con los proveedores de liquidez tienen un tiempo de procesamiento de las órdenes de negociación de unidades de milisegundos. El ping puede reducirse significativamente de cientos de milisegundos a unidades alojando el Asesor Experto en un servidor VPS. Puede ver el tiempo total que se tarda en enviar una orden de operación, procesarla y obtener una respuesta del servidor en el registro de MT4.

 
Alexander Sevastyanov:

Si necesita ayuda, no dude en ponerse en contacto con nosotros.

Por cierto, el retraso en la apertura de una posición se compone principalmente del doble ping (ida y vuelta) y del tiempo de procesamiento de la orden de negociación por parte del servidor. Los buenos corredores que no sobrecargan los servidores reales y tienen un buen canal de conexión con los proveedores de liquidez tienen un tiempo de procesamiento de las órdenes de negociación de unidades de milisegundos. El ping puede reducirse significativamente de cientos de milisegundos a unidades alojando el Asesor Experto en un servidor VPS. Puede ver el tiempo total que se tarda en enviar una orden de operación, procesarla y obtener una respuesta del servidor en el registro de MT4.

no hay tales corredores en forex, decenas de milisegundos mínimo, promedio 200, a cero pings

 
Maxim Dmitrievsky:

No he visto que se especifique que sólo debe haber 1 comercio a la vez, pensé que debería haber varias aperturas para 1 instrumento

Este error puede ocurrir incluso en un símbolo si el hilo anterior no ha terminado la ejecución y ha llegado un nuevo tick - entonces hay una situación indefinida de lectura y escritura de datos reales...
 
Andrei:
Este error puede ocurrir incluso para una sola herramienta si el hilo anterior no ha terminado de ejecutarse y ha llegado un nuevo tick - entonces es una situación indefinida de lectura y escritura de datos reales...

No, no existe tal situación, se salta los ticks hasta que se procesa toda la lógica

 
Maxim Dmitrievsky:

No, no existen estas situaciones, el ontic se salta los ticks hasta que se procesa toda la lógica

Eso es lo que yo también pensé...

 
Andrei:

Estaba pensando lo mismo...

No sé, nunca me ha pasado, he operado con un montón de brokers de scalping en mt4 y mt5

 
Maxim Dmitrievsky:

No lo sé, nunca lo he hecho, operado con un montón de corredores de scalping en mt4 y mt5

¿Cómo lo has comprobado? Sólo lo he comprobado en mt4...
Razón de la queja: