Una vez más, sobre el multihilo - página 4

 
meat:

Bueno, digamos que no todo lo que has enumerado está relacionado con las herramientas de mql5 :) Y la pregunta no era sobre cómo resolver (sortear) esta cuestión. Siempre se puede encontrar una forma de evitarlo, no hay duda. La pregunta es por qué no podemos añadir la funcionalidad adecuada a mql5 sin ningún detalle.

MQL5 tiene todo lo que necesitamos, sólo tenemos que aprender a usarlo.

Transferir parte de los cálculos al indicador y ejecutarlo desde un Asesor Experto.

Y nadie va a hacer la paralela básica para 2 docenas (siendo optimistas) de usuarios.

Документация по MQL5: Основы языка / Функции / Функции обработки событий
Документация по MQL5: Основы языка / Функции / Функции обработки событий
  • www.mql5.com
Основы языка / Функции / Функции обработки событий - Документация по MQL5
 
TheXpert:
Hay scripts para el multithreading. Y no lo necesitas en el probador

¿Cómo se ejecuta un script desde un Asesor Experto?

 
komposter:

Transfiera algunos de los cálculos al indicador, y ejecútelo desde el Asesor Experto.

Ya estás otra vez con el baile de la pandereta. Me refería a una aplicación normal.

Y nadie va a hacer la habitual puesta en paralelo para 2 docenas de usuarios (siendo optimistas).

Me pareció desde el principio que MQL5 se posiciona como un lenguaje para programadores más o menos expertos, en contraste con mql4. Esto significa que la optimización del algoritmo, paralelizándolo a través de múltiples hilos, debe ser una necesidad diaria. Por eso he llamado la atención sobre este punto al principio del tema. Y Renat, por alguna razón, reaccionó de forma muy dolorosa.

Resolver constantemente la cuestión de la optimización a través de un lugar, como muchos sugieren aquí, no es algo que uno quiera hacer en absoluto.

Además, ya he dicho al principio que no les pido que hagan un paralelismo normal. Soy perfectamente capaz de poner todo en paralelo yo mismo, usando WinApi. Todo lo que necesito es una dirección de la función. Por eso pedí añadir sólo punteros a funciones. Por supuesto, es deseable soportar la directiva __stdcall, pero no es necesario, puedes hacer las manipulaciones necesarias por tu cuenta.

Los punteros a las funciones son en realidad algo muy útil. Utilizarlos para crear hilos es sólo uno de los muchos usos. También se utilizan, por ejemplo, para especificar funciones de devolución de llamada en diversas operaciones asíncronas. Además, se transferirán a la DLL, lo que simplifica la comunicación entre la DLL y el Asesor Experto que la ha importado, es decir, la integración completa. En tiempo de ejecución, la DLL puede llamar directamente a la función MQL y obtener de ella la información necesaria. Ahora, para hacerlo, necesitamos generar un evento (por ejemplo, un tick), que llamará a un Asesor Experto y luego pasará la información requerida a la DLL... En definitiva, una molestia extra y un consumo de tiempo.

 
Sobre el multithreading.
  1. Añadir el multithreading al lenguaje implica crear una API especial que soporte el multithreading,
    que a su vez se ejecutará más lentamente que la API sin dicho soporte, espero que quede claro (loki, etc.).
  2. Hay que reescribir el optimizador del compilador de MQL5 - en realidad empeora las optimizaciones.
  3. Este es un lugar para los errores de usuario difíciles de encontrar.
Bueno y por último, no son muy pocos los usuarios que lo necesitan y la falta de apoyo se puede obviar.


Sobre los punteros a funciones.
La cuestión está abierta con respecto a su uso dentro del código MQL5.
Lamentablemente, no podremos pasar el puntero a la DLL - hemos tenido que sacrificar el acuerdo de llamada para la multiplataforma x86/x64.
 
mql5:
En cuanto al multithreading.

El hombre sólo está trolleando (creía que el lenguaje era...) por razonamientos teóricos y no entiende ni la naturaleza aplicada del lenguaje ni las consecuencias del multithreading.

De hecho, ni siquiera tiene una tarea real de concurrencia.

 

mql5:
 ...Ну и последнее, нужно это не очень малому числу пользователей и отсутствие поддержки можно обойти.

Me gusta la idea de usar scripts, pero ¿cómo se llaman desde el EA?

 
DC2008:

Me gusta la idea de usar scripts, pero ¿cómo se llaman desde el EA?

Desgraciadamente, no hay ninguna disposición para lanzar scripts desde MQL5.

Pero hay una manera, a través de una plantilla de un gráfico, si usted escribe una secuencia de comandos en él en lugar del Asesor de Expertos.
Cuando se aplica una plantilla de este tipo a un nuevo gráfico, se lanza el script (sin embargo, se trata de una "característica no documentada", que puede no estar disponible algún día)...

¿Cuál es su tarea?
¿Por qué no tiene un Asesor Experto listo para ejecutar en el gráfico adyacente, que hará su trabajo después de recibir un Evento?
Lanzar un nuevo programa MQL5 es costoso, debido a la protección de los archivos EX5.
 
mql5:
Desafortunadamente, los scripts no pueden ser lanzados desde MQL5.

Pero hay una manera, a través de una plantilla de gráfico, si ponemos un script en él en lugar del Asesor Experto.
Cuando se aplica una plantilla de este tipo a un nuevo gráfico, se lanza el script (sin embargo, se trata de una "característica no documentada", que puede no estar disponible algún día)...

¿Cuál es su tarea?
¿Por qué no tiene un Asesor Experto listo para ejecutar en el gráfico adyacente, que hará su trabajo después de recibir un Evento?
Lanzar un nuevo programa MQL5 es costoso, debido a la protección de los archivos EX5.

Tengo miles de objetos gráficos que analizar: eliminar los innecesarios, cambiar propiedades, calcular características estadísticas, etc. Incluso en un gráfico hay desfases, ¿y si hay varios?

 
En el caso de los objetos gráficos, el multithreading no ayudará ni siquiera en teoría.

El problema de trabajar con objetos gráficos debe resolverse algorítmicamente. Económicamente y no mezclar los comandos para cambiar y leer los objetos. Por ejemplo, 1000 lecturas y sólo 1000 escrituras serán mucho más rápidas que 1000 lecturas y escrituras.
 
mql5:
Sobre el multithreading.
  1. Añadir el multithreading al lenguaje implica crear una API especial que soporte el multithreading,
    que a su vez correrá más lento que la API sin dicho soporte, espero que quede claro (loki, etc.).
  2. Hay que reescribir el optimizador del compilador de MQL5 - en realidad empeora las optimizaciones.
  3. Este es un lugar para los errores de usuario difíciles de encontrar.
Bueno y por último, no son muy pocos los usuarios que lo necesitan y la falta de apoyo se puede obviar.


Sobre los punteros a funciones.
La cuestión está abierta con respecto a su uso dentro del código MQL5.
Desafortunadamente, pasar un puntero a una DLL no funcionará - hemos tenido que sacrificar la convención de llamada para la multiplataforma x86/x64.
Gracias por su exhaustiva respuesta. Ahora todo está más claro. Lo único referente a la imposibilidad de pasar un puntero a la DLL, supongo que te refieres a las DLL del sistema (es decir, al acuerdo __stdcall). Y en mi propia DLL puedo escribir cualquier otro acuerdo. ¿O es una exclusiva que no cumple ninguna norma?