
Está perdiendo oportunidades comerciales:
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Registro
Entrada
Usted acepta la política del sitio web y las condiciones de uso
Si no tiene cuenta de usuario, regístrese
No puedo ver si este problema de velocidad de prueba puede ser resuelto sin usar las características de lenguaje de MT5.
En los tres casos, ¿el resultado final es el mismo?
Sí, por supuesto.
Empezó a ocurrir después de otra actualización del terminal. No cambié su librería y compilé el bot en el terminal antiguo para que funcionara como antes.
Esto empezó a pasar después de otra actualización del terminal. No cambié su biblioteca y compilé el bot en el terminal antiguo para que funcionara como antes.
Investigué un poco.
Asesor Experto.
En cada tick inMod se abre y cierra una posición. Y en cada tick se calcula el OrderCloseTime.
OnTester sirve como un criterio para comprobar la identidad de los resultados en diferentes configuraciones.
Funciones correspondientes del trabajo con el historial.
Metodología.
Una sola ejecución en la configuración como en la fuente (inMod = 5).
28.000 transacciones, casi cuatro segundos. Dado que necesitamos medir el rendimiento en modo de optimización, todas las lecturas de rendimiento siguientes se realizaron de esta forma.
Con recompilación obligatoria antes de la ejecución y sólo un Agente habilitado para la ejecución secuencial de pasadas.
Rendimiento.
Tabla de rendimiento (tiempo de ejecución en milisegundos) para b3815 y b2958.
MT4Orders del 20.07.2022 se utilizó en todas partes.
Conclusiones.
La duración de la prueba es de aproximadamente 1 hora y 10 minutos.
Retrocedo la biblioteca a la versión __MT4ORDERS__ "2020.01.12" y compilo el Asesor Experto en la compilación 2980.
El tiempo de funcionamiento del Asesor Experto con la función get_last_order_close_time es de unos 20 minutos.
Pruebe el código anterior en una versión antigua de la biblioteca (yo no la tengo).
Si hay una diferencia en el rendimiento, enviarlo a PM.
¿Es posible que haya una fuga de memoria o un uso de memoria mayor del necesario? ¿Quizás en this.tickets o en this.amount (::ArrayResize) o quizás en algún otro lugar?
El tamaño de las matrices sólo se incrementa con el tiempo. ¿Es esto imprescindible? ¿Es posible vaciarlas o quizás no cargar todas las operaciones anteriores?
¿Es posible que haya una fuga de memoria o un uso de memoria mayor del necesario? ¿Quizás en this.tickets o en this.amount (::ArrayResize) o quizás en algún otro lugar?
El tamaño de las matrices sólo se incrementa con el tiempo. ¿Es esto imprescindible? ¿Es posible vaciarlas o quizás no cargar todas las operaciones anteriores?
La biblioteca no almacena completamente en caché los datos históricos. La falta de memoria es posible sólo en teoría, pero no en la práctica.
Escriba un script que ordene todo el historial de operaciones utilizando la librería y vea cuánta memoria se consume.
La biblioteca no almacena completamente en caché los datos del historial. Conseguir una escasez de memoria es posible sólo en teoría, pero no en la práctica.
Escriba un script que ordene todo el historial de operaciones utilizando la biblioteca y vea cuánta memoria se consume.
en pruebas de estrategia el ea esta usando 25 GB por core.
editar: es una prueba de marco de tiempo de 1 año, por lo que no mucho.en pruebas de estrategia el ea esta usando 25 GB por core.
edit: es una prueba de marco de tiempo de 1 año, así que no mucho.La biblioteca (MT4Orders.mqh) no consume esa cantidad de memoria. Puedes ejecutar, por ejemplo, este EA para verlo por ti mismo.
Lo más probable es que estés trabajando con indicadores de forma incorrecta: creas nuevos manejadores de indicadores, pero no borras los antiguos.
La librería (MT4Orders.mqh) no consume esa cantidad de memoria. Puedes ejecutar, por ejemplo, este EA para comprobarlo.
Lo más probable es que estés trabajando con indicadores de forma incorrecta: creas nuevos manejadores de indicadores, pero no borras los antiguos.
Yo no uso ningún indicador.
Aunque tienes razón, la librería no consume esa cantidad de memoria, sin embargo sí la utiliza:
HistorySelect(0,INT_MAX);
Según esta página:
https://www.mql5.com/es/articles/211
"El intento de manejar todo el histórico de operaciones, en la mayoría de los casos, es erróneo. Cuando el número de operaciones/órdenes procesadas ronda los miles y decenas de miles, el trabajo del programa se ralentiza drásticamente."
En caso de que haya más de 1M de operaciones, tu librería las almacena todas en un array.
Aprecio que hayas hecho esta libreria, puente entre mt4 y mt5, y que la hayas compartido con todo el mundo, no tratando de destrozarla. Sólo me parece lamentable que sólo hay un lugar en línea que describe cómo obtener valores de swap y comisión correctamente (dado que el corredor en realidad les proporciona), y está escrito de una manera tan ofuscado.