Probando el nuevo compilador MQL5 para plataformas x64 - ¡Cálculos de 2 a 10 veces más rápidos!
¡Bien hecho!
Aquí hay más pruebas y debates anteriores:
Profesionales en su campo.
Gracias.
Además, es muy probable que la próxima versión del 20 de mayo cuente con un depurador de datos históricos.
Lo mostraremos en la iFX Expo del 26 al 28 de mayo.
- iFX EXPO
- www.ifxexpo.com
Renat Fatkhullin:
- El nuevo compilador MQL5 de 64 bits es de 2 a 10 veces más rápido que el actual compilador MQL5.
El desarrollo del nuevo compilador ha llevado mucho tiempo, pero los logros han sido sorprendentes. Hay algunos problemas de optimización de las operaciones de cadena, pero intentaremos acelerarlas también. - El nuevo compilador está muy cerca de la calidad y la velocidad del compilador de Visual Studio 2012 x64.
Aún no hemos activado todos los métodos de optimización, ya que todavía los estamos probando. Por lo tanto, los resultados seguirán mejorando.
Además, lo más probable es que en la próxima versión esté disponible un depurador de datos históricos para el 20 de mayo.
Lo demostraremos en la iFX Expo del 26 al 28 de mayo.
El nuevo compilador se acerca mucho a la calidad y velocidad del compilador de Visual Studio 2012 x64
Aún no hemos activado todos los métodos de optimización, ya que todavía los estamos probando. Por ello, los resultados seguirán mejorando.
¡Buenas noticias! ¡Bien hecho!
Renat Fatkhullin:
Puede realizar más cálculos al mismo tiempo y pensar menos en cambiar a DLL. Esto es especialmente importante para los que hacen muchas matemáticas.
Sí, realmente no se me ocurren más tareas en las que se necesiten DLLs externas.
Además, la próxima versión del 20 de mayo probablemente tendrá un depurador de datos históricos.
Esta es realmente la característica más útil. Muchas gracias.
Personalmente sólo tengo una duda: los punteros a arrays. Para los arrays privados el problema se resuelve envolviendo un array en una clase.
Pero para los arrays pasados a la función OnCalculate() tengo que copiar los datos en búferes internos cada vez, y sólo entonces pasar punteros a los objetos analizadores y manejadores. Una vez he intentado pasar punteros usando memcpy, pero de alguna manera la velocidad era casi la misma, y en mi opinión, tales "trucos" no deben ser aplicados.
Tal vez la posibilidad de utilizar el tipo de referencia sería más aceptable. En general, la tarea es acceder a los elementos de la matriz sin copiarlos.
Sí, la verdad es que no se me ocurren más tareas en las que se necesiten DLL externas.
Resultó que la asignación del parámetro de entrada de desviación al campo de desviación de la instancia de la estructura MqlTradeRequest conduce a un error de generación de código.
Ejemplo hipotético (se ha eliminado todo lo demás):
sinput ulong deviation = 100; int OnInit() { MqlTradeRequest request = { 0 }; request.deviation = deviation; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- }Me sale"error de generación de código 1 1".
Si sólo asignas "100":
int OnInit() { MqlTradeRequest request = { 0 }; request.deviation = 100; //--- return(INIT_SUCCEEDED); } //+------------------------------------------------------------------+ //| Expert tick function | //+------------------------------------------------------------------+ void OnTick() { //--- }
...entonces la compilación se realizará sin errores. Nota, tengo AMD Athlon II X4 645, procesador de 3,1 GHz. Tal vez sea importante (esta misma semana MQL4 con servicedesk han cogido algún bug en AMD).
Mi compilador no se queja de nada más.
- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso
Como prometimos anteriormente, estamos lanzando un nuevo compilador MQL5 optimizado para la versión de 64 bits de MetaTrader 5.
Hemos mantenido la plena compatibilidad del código generado tanto para las versiones de 32 bits del terminal como para las versiones más antiguas de los terminales.
Ya puede actualizar a MetaTrader 5 build 1108 con su nueva funcionalidad en nuestro servidor MetaQuotes-Demo. Para activar el nuevo compilador de optimización, añada la clave Optimize=1 a [Expertos] en metaeditor.ini:
Para comprobar el rendimiento de los compiladores MQL4, MQL5 y C++, hemos utilizado las pruebas estándar de los compiladores. Se adjuntan todos los archivos de origen junto con la hoja de cálculo Excel, para que todo el mundo pueda volver a comprobarlo.
De momento, veamos los resultados de la prueba en el siguiente entorno:
Para ver el gráfico detallado, haga clic en él.
Cuáles son las conclusiones:
MQL5 es más rápido que MQL4 desde decenas de porcentajes hasta varias veces. La razón está en el entorno de ejecución y en los 32 bits. MetaTrader 5 tiene un tiempo de ejecución mucho más eficiente y en constante desarrollo.
El desarrollo del nuevo compilador llevó mucho tiempo, pero los beneficios fueron sorprendentes. Hay algunos problemas con la optimización de las operaciones de cadena, pero intentaremos acelerarlas también.
Aún no hemos activado todos los métodos de optimización, ya que todavía los estamos probando. Por tanto, los resultados seguirán mejorando.
¿Qué aporta a los comerciantes?
La posibilidad de hacer más cálculos en el mismo tiempo y menos pensar en cambiar a una DLL. Esto es especialmente importante para los que se dedican a las matemáticas pesadas.