Probando el nuevo compilador MQL5 para plataformas x64 - ¡Cálculos de 2 a 10 veces más rápidos! - página 2

 
Yury Kulikov:
Por ejemplo, las comunicaciones entre terminales.

Bueno, si lo retuerces así, entonces por supuesto, la DLL es una característica útil...

Pero yo personalmente para esta misma tarea decidí que realmente no necesito una DLL para eso. Ahora mismo estoy pensando en un EA que tome cotizaciones de una empresa de corretaje y envíe señales a otra, y que ni siquiera tenga MetaTrader. (DucaCopi, por cierto, me pregunto si MetaQuotes estará de acuerdo con este venerable corredor ?).

Estaba pensando en la dirección de DLL. Pero decidió que los archivos compartidos son mucho más seguros y razonables. Deja que MetaTrader escriba las señales en el archivo. Y que otro MetaTrader (o JForex o alguien más) los lea y ejecute.

 

Por cierto, he estado pensando en las referencias de los arrays...

Renat, te hago una sugerencia:

Ya que tenemos una biblioteca estándar, ¿no deberíamos añadir una variante de la función OnCalculate() con el siguiente prototipo?

intOnCalculate(constint rates_total,/tamaño de la serie temporal de entrada
constint prev_calculated,// barras procesadas en la llamada anterior
const CiTime* ptTime,// Hora
const CiOpen* poOpen,// Abrir
const CiHigh* phHigh,// Alto
const CiLow* plLow,// Low
const CiClose* pcClose,// Cerrar
const CiTickVolume* ptvTickVolume,// Volumen de ticks
const CiRealVolume* prvRealVolume,// Volumen real
const CiSpread* psSpread// Spread
);

?

En mi opinión, esto requeriría cambios muy pequeños en MetaTrader, pero por otro lado simplemente proporciona punteros a arrays, que pueden ser pasados a las clases manejadoras sin copiar. Y se populariza la idea de la propia Biblioteca Estándar.

 

Obtuve los primeros resultados de la comparación del rendimiento del compilador antiguo y el nuevo en un ejemplo de proyecto grande real (~20.000 líneas de código fuente).

Resultados del tiempo de ejecución del programa compilado con la versión antigua del compilador (4 ejecuciones):

2015.05.02 13:48:46.641 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.443 sec. 116 MB RAM used.
2015.05.02 13:48:27.879 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.427 sec. 116 MB RAM used.
2015.05.02 13:48:12.067 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.287 sec. 116 MB RAM used.
2015.05.02 13:47:49.719 *** (EURUSD,D1)       Start ***. Parsing of history deals (22575) and orders (22656) completed in 8.751 sec. 116 MB RAM used.

Resultados del tiempo de ejecución de un programa compilado en la nueva versión del compilador (4 ejecuciones):

2015.05.02 13:54:18.638 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.475 sec. 116 MB RAM used.
2015.05.02 13:54:01.995 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.616 sec. 116 MB RAM used.
2015.05.02 13:53:43.853 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 5.444 sec. 116 MB RAM used.
2015.05.02 13:53:25.809 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in 6.147 sec. 116 MB RAM used.

*La segunda y siguiente ejecución del programa se realizaron con la caché calentada - como se ve la caché calentada aumenta la productividad en un 15-30%.

Como se puede ver, los resultados son mejores en el nuevo compilador: se tardó ~6,4 segundos en analizar más de 20000 operaciones y pedidos en la primera ejecución y ~5,4 segundos en la segunda, es decir, se ganó un 15-20% de rendimiento.

La mejora del rendimiento podría haber sido mayor, pero la mayor parte del tiempo la ocupan las llamadas a funciones del sistema.

 

El nuevo compilador no detectó ningún error en el proyecto, que suma más de 20.000 líneas de código fuente. Es un resultado excelente, teniendo en cuenta que este proyecto se creó para la versión antigua del compilador.

Sin embargo, el nuevo compilador generaba varios mensajes de advertencia relacionados con la visualización incorrecta de las rutas de los archivos (requisito de escape de barras):

Se trata de un requisito justo, que puede cumplirse fácilmente con unas pequeñas modificaciones.

Por lo tanto, podemos concluir que incluso los grandes proyectos escritos en MQL5 están preparados para el nuevo compilador y el cambio a él no será un problema para los desarrolladores profesionales.

 
Sergey Eremin:
...
Me sale"error de generación de código 1 1".

...

También me sale este error.
 
La principal ganancia está en las matemáticas y en tus propios cálculos.

Si la mayor parte del trabajo duro está en las llamadas al sistema, la aceleración será pequeña.
 
Renat Fatkhullin:
La principal ganancia está en las matemáticas y los cálculos propios.

Si la mayor parte del trabajo duro está en las llamadas al sistema, la aceleración será pequeña.

Sigue siendo bueno, porque puedes crear tu propio entorno con un mínimo de llamadas a funciones del sistema.

(copiando el entorno una vez en sus clases y trabajando con él directamente).

 
George Merts:

Bueno, si lo retuerces así, entonces por supuesto, la DLL es una característica útil...

Pero yo personalmente para esta misma tarea decidí que realmente no necesito una DLL para eso. Ahora mismo estoy pensando en un EA que tome cotizaciones de una empresa de corretaje y envíe señales a otra, y que ni siquiera tenga MetaTrader. (DucaCopi, por cierto, me pregunto si MetaQuotes estará de acuerdo con este venerable corredor ?).

Pensaba en el dll. Pero he decidido que es más seguro y sensato utilizar archivos compartidos. Deja que MetaTrader escriba las señales en el archivo. Y otro MetaTrader (o JForex, o algún otro) - que lea y ejecute.

Existe una opción con canales con nombre, pero es necesario un servidor intermedio,

Hay ejemplos de cómo hacerlo en el foro.

 
Yury Kulikov:
Por ejemplo, las comunicaciones interterminales.

Alexandr Bryzgalov:

Hay una opción con canales con nombre, pero se necesita un servidor intermedio,

Hay ejemplos de cómo hacerlo en el foro.

No hace falta ningún canal con nombre. Estamos a la espera de que se añada la compatibilidad con SQL. Intercambio de datos a través de una tabla. SQL es un soporte integrado para sistemas multihilo y de alta carga.
 
Vasiliy Sokolov:

No hace falta ningún canal con nombre. A la espera de añadir la compatibilidad con SQL. Intercambio de datos a través de una tabla. SQL es un soporte integrado para sistemas multihilo de alta carga.
Sólo hablaba de lo que tenemos y si añadimos sql también podemos hablar de ello )