Errores, fallos, preguntas - página 2313

 
Vladimir Karputov:

Tengo este problema en mi portátil, cuando una tarea sigue contando con el agente (por ejemplo, me equivoqué en el código con la posición de apertura y el pobre agente manda y manda órdenes de comercio, pero recibe baneos en respuesta, pero sigue bombardeando, lo que resulta en que todos los agentes han terminado hace tiempo los cálculos, pero este pobre hombre sigue martilleando y martilleando).

Es decir, en resumen: el agente tiene una tarea de la última misión, y sigue luchando con ella.

Hoy he tenido esto enfrente, después de que los agentes hayan estado fuera de servicio durante más de 24 horas.

Creo que hay un fallo con la autorización y el intercambio de datos, es decir, si no se transmite ningún asesor/historial durante mucho tiempo, el lado del cliente se vuelve a conectar y el agente sigue esperando que lleguen los archivos.
 
fxsaber :

Casi tres millones de ticks y sólo 16K OrderSend. Pero estas órdenes comerciales tardan un tercio del tiempo. Y en cada tick hay cálculos en el Asesor Experto.

De ahí mi pregunta. ¿Podría ejecutar el código de OrderSend en el perfilador? ¿En qué lugar se encuentra ese inconveniente?

Supongo que si sustituyes la función estándar por la tuya propia, funcionará más rápido. Probablemente, hay algunas comprobaciones y gestos costosos en OrderSend. Por ejemplo, si no hay funciones de Historial y OnTrade* en el Asesor Experto (+ indicadores), entonces formar los registros/eventos apropiados es una pérdida de tiempo.

Entiendo que para algunas personas una carrera dura muchos minutos. Pero hay casos como el anterior: unidades de segundos, si se presta atención a la velocidad de ejecución. Y aquí resulta que lanzo Optimize durante tres horas, y de ellas una hora es OrderSend, cuyo tiempo medio de ejecución es de 69 µs (ver captura de pantalla):

Hola,

¿Obtuviste una respuesta útil de Metaquotes?

Tengo un cliente que quiere utilizar el Probador de Estrategias de MT5 para mejorar el rendimiento. La estrategia EA puede utilizar fácilmente el modo "Sólo precios disponibles". Sin embargo, el backtest, que tarda 1,5 segundos con MT4, ¡se hace en 5 segundos con MT5!

La estrategia utiliza un trailing stop y parece utilizar OrderSend () durante el 90% del tiempo de backtest:


 
Alain Verleyen:

Hola,

¿Obtuviste una respuesta útil de Metaquotes?

Tengo un cliente que quiere utilizar el Probador de Estrategias de MT5 para mejorar el rendimiento. La estrategia EA puede utilizar fácilmente el modo "Sólo precios disponibles". Sin embargo, el backtest, que tarda 1,5 segundos con MT4, ¡se hace en 5 segundos con MT5!

La estrategia utiliza un trailing stop y parece utilizar OrderSend () durante el 90% del tiempo de backtest:

Todas las respuestas fueron dadas en este hilo solamente. Parece que se ha hecho algo.

MetaQuotes Software Corp.:
  1. Probador: Probador de estrategias optimizado y acelerado.

Lo resolví yo mismo a través de Virtual.


ZZY Muestra tu EA.

Библиотеки: Virtual
Библиотеки: Virtual
  • 2018.10.03
  • www.mql5.com
Статьи и техническая библиотека по автоматическому трейдингу: Библиотеки: Virtual
 
fxsaber:

Parece que se ha hecho algo

1930

Core 1  pass 0 returned result 99753711.00 in 0:00:03.729
Core 1  pass 1 returned result 99753711.00 in 0:00:03.432
Core 1  pass 2 returned result 99753711.00 in 0:00:03.401
Core 1  pass 3 returned result 99753711.00 in 0:00:03.354
Core 1  pass 4 returned result 99753711.00 in 0:00:03.323
Core 1  pass 5 returned result 99753711.00 in 0:00:03.385
Core 1  pass 6 returned result 99753711.00 in 0:00:03.448
Core 1  pass 7 returned result 99753711.00 in 0:00:03.369
Core 1  pass 8 returned result 99753711.00 in 0:00:03.369
Core 1  pass 9 returned result 99753711.00 in 0:00:03.385
Tester  optimization finished, total passes 10
Statistics      optimization done in 0 minutes 35 seconds
Statistics      shortest pass 0:00:03.323, longest pass 0:00:03.729, average pass 0:00:03.419


Virtual

Core 1  pass 0 returned result 99753711.00 in 0:00:02.231
Core 1  pass 1 returned result 99753711.00 in 0:00:01.217
Core 1  pass 2 returned result 99753711.00 in 0:00:01.217
Core 1  pass 3 returned result 99753711.00 in 0:00:01.185
Core 1  pass 4 returned result 99753711.00 in 0:00:01.170
Core 1  pass 5 returned result 99753711.00 in 0:00:01.201
Core 1  pass 6 returned result 99753711.00 in 0:00:01.186
Core 1  pass 7 returned result 99753711.00 in 0:00:01.201
Core 1  pass 8 returned result 99753711.00 in 0:00:01.185
Core 1  pass 9 returned result 99753711.00 in 0:00:01.202
Tester  optimization finished, total passes 10
Statistics      optimization done in 0 minutes 13 seconds
Statistics      shortest pass 0:00:01.170, longest pass 0:00:02.231, average pass 0:00:01.299


La diferencia es tres veces mayor que en 1881. Probablemente, se ajustó en otro lugar. Pero el tema de OrderSend probablemente no fue tocado.

 
fxsaber :

Todas las respuestas sólo se han dado en este hilo. Parece que se ha hecho algo.

Lo resolví yo mismo a través de Virtual.

Gracias por su respuesta.
 
Chicos. Vuelve a haber un error en el sitio.
No puedo responder a los mensajes en el mercado desde mi teléfono. La lista no aparece.
De vacaciones, sin ordenador.

Archivos adjuntos:
 

La optimización genera paquetes de 128 trabajos para cada Agente. ¿Es posible formar paquetes de diferente tamaño?

Esta es la situación

Todos los agentes, excepto uno, han completado sus tareas. Y tenemos que esperar a que se complete la optimización por culpa de un agente. Pero fue posible lograr la terminación casi simultánea del trabajo de todos los Agentes.

Consideremos, por ejemplo, como en la captura de pantalla, 8 Agentes y 5376 tareas. 5376 / 8 = 672 tareas. Así, se podrían formar paquetes de tamaño 336 (=672/2), 168 (672/4) u 84 (672/8) trabajos en cada uno. Y entonces todos los Agentes llegarían a la meta al mismo tiempo.


El valor de 128, en cambio, no tiene en cuenta esta multiplicidad. Esto da lugar a tiempos de optimización más largos si se utilizan varios núcleos.

 

Quise poner una nota en la KB y no funcionó. Y a juzgar por el hecho de que las últimas publicaciones no tienen ninguna calificación, parece que no soy el único con este problema.

Y al mismo tiempo, quiero admitir que el sistema de calificación(simple media aritmética ) hace que uno quiera más. Al fin y al cabo, un código recién publicado con una calificación de 5 estrellas será más alto que un código que lleva varios años en BE y tiene 49 calificaciones de 5 estrellas y una de 4. ¿Es esto justo?

En mi opinión, al menos esta fórmula sería mucho más justa:

double R=Average*pow(N,0.1);

Dónde:

R- la clasificación que busca

Puntuación media aritmética

N- número de valoraciones.

 
fxsaber:

La optimización genera paquetes de 128 trabajos para cada Agente. ¿Es posible formar paquetes de diferente tamaño?

Esta es la situación

Todos los agentes, excepto uno, han completado sus tareas. Y tenemos que esperar a que se complete la optimización por culpa de un agente. Pero fue posible lograr la terminación casi simultánea del trabajo de todos los Agentes.

Consideremos, por ejemplo, como en la captura de pantalla, 8 Agentes y 5376 tareas. 5376 / 8 = 672 tareas. Así, se podrían formar paquetes de tamaño 336 (=672/2), 168 (672/4) u 84 (672/8) trabajos en cada uno. Y entonces todos los Agentes llegarían a la meta al mismo tiempo.


El valor de 128, en cambio, no tiene en cuenta esta multiplicidad. Esto hace que el tiempo de optimización aumente si se utilizan varios núcleos.

En general apoyo esto, pero creo que sería más correcto habilitar la cancelación automática de los trabajos para los agentes (ya implementado pulsando el botón para desactivar la actividad del agente), si hay agentes libres y 5 veces más trabajos y redistribuir los trabajos de nuevo a todos los agentes, incluyendo los remotos.

 

¡Buenas tardes a todos! Perdón por la pregunta tonta. Chicos, ¿podrían decirme cómo hacer que la propiedad Pressed de un botón sea true cuando se hace clic con el botón izquierdo y false cuando se hace clic con el botón izquierdo? Ahora la situación es tal, que no pasa nada al pulsarlo, y al soltarlo Pulsado cambia su valor al contrario.

Entiendo que tengo que anular los manejadores de eventos CButton::OnMouseUp y CButton::OnMouseDown, pero no tengo ni idea de dónde hacerlo. Una pista, por favor. Gracias de antemano.