Preguntas de los principiantes MQL5 MT5 MetaTrader 5 - página 320

 

Estimados programadores, ¡por favor, avisen a quien lo sepa!

Tengo un Asesor Experto para MT4 que cierra un montón de órdenes (500-2500) al alcanzar un beneficio total. Como me he dado cuenta, cierra las órdenes una a una ordenándolas según la magia, de menor a mayor.

Así que, aquí está la pregunta: ¿es posible añadir a su Asesor Experto la función de lanzar un script al cierre de la orden que cerraría las órdenes pero ordenándolas por mago desde el final - de mayor a menor?

¿Acelerará esta idea la velocidad de cierre de las órdenes?

En algún lugar me dijeron que se pueden enviar hasta 4 peticiones al servidor simultáneamente.
 
Tapochun:
Entonces tienes que mirar el código... tal vez sea el código... ¿hay una línea así en las impresiones?
No. Todo ha sido probado antes, sin preguntas... ¿Qué otra cosa podría ser?


 
Novikov:

Estimados programadores, por favor, aconséjenme, ¡quien sabe!

Tengo un Asesor Experto para MT4 que cierra un montón de órdenes (500-2500) al alcanzar un beneficio total. Como he observado cierra los pedidos uno a uno ordenándolos según la magia - de menor a mayor.

Entonces, la pregunta es si es posible añadir a Expert Advisor una función para lanzar un script al cierre de la orden que cierre las órdenes pero las ordene por mago desde el final - de mayor a menor?

¿Y esta idea acelerará la velocidad de las órdenes de cierre?

En algún lugar me dijeron que se pueden enviar hasta 4 peticiones al servidor simultáneamente.

No se puede ejecutar el script desde el Asesor Experto. Realmente puede enviar al servidor varias peticiones de diferentes EAs al mismo tiempo. Si se sincronizan varios EAs, es realmente posible obtener alguna ganancia de rendimiento.

Pero si yo fuera tú, no me golpearía la cabeza contra la puerta abierta. Prefiero cambiar a MetaTrader5. La función OrderSendAsync permite cerrar posiciones por lotes a una velocidad increíble de 100-200 órdenes en un par de segundos:

Foro sobre comercio, sistemas de comercio automatizados y pruebas de estrategia

¡Promotores! Error 10024 (Demasiadas solicitudes)

C-4, 2014.11.07 15:55

De todas formas resumiendo mi pequeña investigación.

Conseguí empujar 50 peticiones en 50 milisegundos; 100 peticiones en 180mseg; 200 en 2100mseg; 500 peticiones en 9000mseg; 1000 peticiones en 23000mseg. (el tiempo es una media). Es decir, cuanto más hay que empujar, más tiempo se necesita. Puede ser una cuestión de codificación analfabeta.

El tiempo de ejecución real de un paquete de peticiones es, por supuesto, más largo. Este tiempo parece ser igual al peor de los casos: tiempo de envío de la solicitud + tiempo de ejecución de la misma. En cualquier caso, en el límite tiende al tiempo medio de ejecución de la orden por parte de la bolsa + el tiempo empleado en la comunicación con el servidor de operaciones. Si el número de solicitudes es inferior a 60, no es necesario comunicarse con el servidor de comercio, enviar todas las solicitudes y esperar a que se cumplan. El envío en sí tarda entre 40 y 60 milisegundos. Si hay más solicitudes, es más difícil. Hay que esperar la respuesta del servidor, volver a enviar órdenes, esperar el rechazo, etc. Así que existe este intercambio de mensajes a través de la red. Cuando hay muchas solicitudes, la reserva se libera gradualmente a medida que se cumplen las solicitudes. Los envíos posteriores llegan en pequeñas porciones, una o dos solicitudes a la vez, y esta es la red. En consecuencia, el tiempo crece. De todos modos, el código parece funcionar correctamente, sólo hay que entender el mecanismo de envío/recepción de peticiones.

Adjunto el código que prueba dicho envío.

p.s. En resumen, 60 peticiones son más que suficientes incluso para el comercio HFT. En realidad, se necesita un análisis consciente de las acciones comerciales: se envía una orden, se obtiene el resultado, se analiza el entorno comercial y se envía una nueva si es necesario. El ciclo completo superará claramente la escala de 40-60 milisegundos + el tiempo medio de ejecución de una orden.


 
R0MAN:
No. Todo lo que se utiliza para probar sin preguntas... ¿algún consejo sobre qué más podría ser?


Pruebe con datos nuevos. ¿Has probado a ejecutarlo en un terminal diferente?
 
Tapochun:
Pruebe con datos nuevos. ¿Has probado a ejecutarlo en un terminal diferente?
No. Hoy he instalado uno nuevo de bx. Traté de probarlo. Probaré con otro... Publicaré los resultados aquí.
 
C-4:

No es posible ejecutar un script desde un EA. En efecto, es posible enviar varias solicitudes de diferentes EAs al servidor al mismo tiempo. Si se sincronizan varios EAs, sí es posible obtener alguna ganancia de rendimiento.

Pero si yo fuera tú, no me golpearía la cabeza contra la puerta abierta. Prefiero cambiar a MetaTrader5. La función OrderSendAsync le permite cerrar posiciones en lotes a una velocidad increíble de 100-200 órdenes en un par de segundos:



¿Qué tiene que ver MT5 y además 100-200 órdenes? ¿Y qué 100-200 órdenes en MT5? ¡Estos son 100-200 instrumentos de negociación en MT5! Al fin y al cabo, sólo se puede abrir una orden en un símbolo, si no me equivoco.

Y tengo una acumulación de un gran número de órdenes en 28 instrumentos, y al mismo tiempo, ¡en parte con lotes!

Si tienes algo que sugerir en el tema de la pregunta, te lo agradecería, ¡y dar consejos que no estén relacionados con la pregunta es innecesario y no es constructivo!

 
C-4:

No es posible ejecutar un script desde un EA. En efecto, es posible enviar varias solicitudes de diferentes EAs al servidor al mismo tiempo. Si se sincronizan varios EAs, sí es posible obtener alguna ganancia de rendimiento.

Pero si yo fuera tú, no me golpearía la cabeza contra la puerta abierta. Prefiero cambiar a MetaTrader5. La función OrderSendAsync le permite cerrar posiciones en lotes a una velocidad increíble de 100-200 órdenes en un par de segundos:


¡О! Vasiliy, si estás aquí por favor revisa mi pregunta, gracias.

 
R0MAN:
¡Oh! Vasily, si estás aquí, por favor, mira mi pregunta, gracias.

¡Hola! Lo he comprobado. Lamentablemente, nunca me había encontrado con un error de este tipo. Lo único que se me ocurre es comprobar la carpeta del historial en el probador por ejemplo aquí y:\NMetaTrader 5\Nbases del probador\NAdmiralMarkets-MT5\Nhistoria. Si no hay archivos para el símbolo requerido, intente copiar los datos manualmente desde la carpeta principal y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ y reinicie el probador. No hay otras ideas hasta ahora.

s.e. Aunque es extraño. El probador debería copiar automáticamente el historial. Pero no se sabe qué.

 
C-4:
¡Hola! Lo he comprobado. Lamentablemente, nunca me había encontrado con un error de este tipo. Lo único que se me ocurre es comprobar la carpeta del historial en el probador por ejemplo aquí y:\NMetaTrader 5\Nbases del probador\NAdmiralMarkets-MT5\Nhistoria. Si no hay archivos para el símbolo requerido, intente copiar los datos manualmente desde la carpeta principal y:\MetaTrader 5\bases\AdmiralMarkets-MT5\ y reinicie el probador. De momento no tengo ninguna otra idea.
Gracias. Volveré al campus... Estoy en mi teléfono móvil ahora mismo.
 
Novikov:

¿Qué tiene que ver MT5 con esto, y sobre todo 100-200 órdenes? ¿Y qué son esas 100-200 órdenes en MT5? ¡Se trata de 100-200 instrumentos de negociación en MT5! Al fin y al cabo, sólo se puede abrir una orden para un símbolo, si no me equivoco.

¡Y tengo una acumulación de un gran número de órdenes en 28 instrumentos y al mismo tiempo en parte con lotes!

Si tienes algo que sugerir en este tema, te lo agradecería, ¡dar consejos que no estén relacionados con la pregunta es inútil y poco constructivo!

Una vez más (lea atentamente):

En MetaTrader4 sólo se pueden cerrar órdenes de forma secuencial: enviar una orden para cerrar una orden, esperar su ejecución, pasar a la siguiente orden, etc. Por esta razón, el tiempo para cerrar un lote de órdenes en MetaTrader4 es sustancial y no puede ser reducido por medios triviales. Sin embargo, puede cargar varios Asesores Expertos en sus propios gráficos y hacer que intercambien información entre ellos y cierren las órdenes mediante un comando común. Cada experto cierra las órdenes sólo en su símbolo. Dado que hay varios hilos comerciales en MetaTrader4, no se bloquearían entre sí ni se enviarían órdenes entre sí. Sin embargo, la organización de un grupo de expertos de este tipo es complicada y, a juzgar por tu nivel de conocimientos, no te aconsejaría nada parecido.

Si todavía crees que he escrito demasiadas palabras, aquí tienes un breve resumen:

1. La respuesta a tu pregunta es no, no puedes ejecutar un script desde un Asesor Experto.

2. No se puede aumentar la velocidad de ejecución de las órdenes comerciales en MetaTrader4 sin utilizar métodos complejos.

La única manera de resolver su pregunta normalmente es utilizando la función OrderSendAsync, que no existe en MetaTrader4.