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.0213:48:46.641 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in6.443 sec. 116 MB RAM used.
2015.05.0213:48:27.879 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in6.427 sec. 116 MB RAM used.
2015.05.0213:48:12.067 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in6.287 sec. 116 MB RAM used.
2015.05.0213:47:49.719 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in8.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.0213:54:18.638 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in5.475 sec. 116 MB RAM used.
2015.05.0213:54:01.995 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in5.616 sec. 116 MB RAM used.
2015.05.0213:53:43.853 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in5.444 sec. 116 MB RAM used.
2015.05.0213:53:25.809 *** (EURUSD,D1) Start ***. Parsing of history deals (22575) and orders (22656) completed in6.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.
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,
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.
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 )
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):
Resultados del tiempo de ejecución de un programa compilado en la nueva versión del compilador (4 ejecuciones):
*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.
...
Me sale"error de generación de código 1 1".
...
La principal ganancia está en las matemáticas y los cálculos propios.
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).
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.
Por ejemplo, las comunicaciones interterminales.
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. 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.