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

 
Renat:

Te recomiendo que vuelvas a leer tu post original, presta atención a todos tus epítetos, y luego vete abajo a las respuestas.

Las respuestas se dieron con calma, con algunas preguntas suaves como "Para paralizar los cálculos de algo hay que darse cuenta primero", luego se dieron las respuestas y se explicó el estado actual de las cosas "lo que realmente se debe paralizar".

Pero en lugar de un aprendizaje rápido, vomitaste más tonterías y nos pusiste los perros. El resultado fue una dura respuesta.

Vale, estoy de acuerdo con los epítetos, me he pasado un poco, y pido disculpas por ello. Sin embargo, no he dicho nada grosero, sólo una crítica demasiado emotiva, pero es totalmente inadecuada para la dureza con la que reaccionas. En ningún sitio he dicho que los desarrolladores sean unos inútiles y no entiendan nada, así que no exageres.

Ya que he sacado este tema, sé bien para qué se necesita y hay mucho que paralelizar. No todos los algoritmos se limitan a "¡hola mundo!", los hay mucho más complejos y que consumen muchos recursos. Por eso es muy extraño escuchar esas enseñanzas morales sobre lo que hay que paralelizar y lo que no, cuando ni siquiera se ha visto el algoritmo.

En cuanto a la implementación de código en la DLL, así como el uso de OpenCL, no tiene relevancia para MQL. Y la pregunta era sobre la programación en MQL.

OpenCL: Мост в параллельные миры
OpenCL: Мост в параллельные миры
  • 2012.05.16
  • Sceptic Philozoff
  • www.mql5.com
В конце января 2012 года компания-разработчик терминала MetaTrader 5 анонсировала нативную поддержку OpenCL в MQL5. В статье на конкретном примере изложены основы программирования на OpenCL в среде MQL5 и приведены несколько примеров "наивной" оптимизации программы по быстродействию.
 

OpenCL funciona dentro del código MQL5.

Aquí hay un ejemplo de código.

 
meat:

En cuanto a la implementación del código en la DLL, así como el uso de OpenCL, esto ya no es relevante para MQL. Y estábamos hablando de programar en MQL.

Hay scripts para el multithreading. Y no lo necesitas en el probador
 
meat:

¿Y cuál fue su respuesta? Empezaste a decirme que tienes un gran terminal y un probador, trabajando en múltiples flujos. Y no he dicho ni una palabra sobre tu terminal. Me refería a otra cosa: el multihilo en el código MQL. Cuando un algoritmo puede dividirse en varias partes, y cada parte se ejecuta en paralelo. Y tú, sin haber entendido el punto, empiezas a ser grosero. Bueno, como veo, con este enfoque no hay ningún planteamiento constructivo, así que no tiene sentido seguir con la discusión.

Hay algunas soluciones constructivas incluso con el estado actual de las cosas. Varios programas mql (Asesores Expertos y/o indicadores) pueden intercambiar mensajes, y en consecuencia, tareas y resultados de ejecución de tareas - por supuesto, si usted crea y organiza un protocolo de intercambio apropiado. Todos los Asesores Expertos trabajan en diferentes hilos (cada uno en su propio hilo), por lo tanto, este esquema de cálculo conjunto es obviamente multihilo y los cargará uniformemente si hay varios núcleos.

El intercambio de mensajes (utilizando las herramientas de mql5) es posible a través de

1. eventos terminales

2. canales con nombre

3. DLL

4. archivos

5. etc.

De este conjunto de herramientas, puedes elegir la más adecuada o utilizar más de una (todas a la vez). Cada método tiene sus ventajas y desventajas, por ejemplo, las tuberías con nombre permiten transferir información a través de la red local, por lo que existe la posibilidad de paralelizar la tarea para más de un procesador multinúcleo.

Buena suerte.

 
Renat:

OpenCL funciona dentro del código MQL5.

Aquí hay un ejemplo de código.

El hecho de que funcione es la mitad de la batalla. Pero, ¿cómo editarlo y depurarlo después? Si está contenida en una constante de cadena, ¿cómo buscaría un error? Significa que debe ser desarrollado en un programa externo y luego insertado en MQL. Pero si te ocupas constantemente de este tipo de portes, te volverás loco, como señalé en el primer post. Dado que el desarrollo del código se hace en otro lugar de todos modos, ¿qué sentido tiene ponerlo todo en MQL? Es más fácil compilar como una DLL e importarla.

Por supuesto, entiendo que el propósito es crear un código abierto, sin utilizar ninguna dll autoescrita. Pero se trata de casos especiales. Por lo general, el programa está escrito para uno mismo y no para los demás. Y poca gente querría dedicarse constantemente a manipulaciones sin sentido al arrastrar el código de un programa a otro.

Pero si se hace un compilador integrado para todo esto, es otra historia. Y por cierto, ¿por qué no? Es decir, es como una sintaxis C ahí dentro. Es decir, se podría utilizar todo como parte del código mql normal, simplemente añadiendo funciones adicionales a su MetaEditor. Y entonces el compilador formatearía el fragmento de código correspondiente de forma adecuada, añadiendo \N el código, etc.

 
meat:

El hecho de que funcione es la mitad de la batalla. ¿Cómo se edita y depura después? Si está en la constante de la cadena, ¿cómo podemos encontrar el error? Significa que debe desarrollarse en un programa externo y luego insertarse en MQL. Pero si te ocupas constantemente de este tipo de portes, te volverás loco, como señalé en el primer post. Dado que el desarrollo del código se hace en otro lugar de todos modos, ¿qué sentido tiene ponerlo todo en MQL? Es más fácil compilar como una DLL e importarla.

Por supuesto, entiendo que el propósito es crear un código abierto, sin utilizar ninguna dll autoescrita. Pero se trata de casos especiales. Por lo general, el programa está escrito para uno mismo y no para los demás. Y poca gente querría dedicarse constantemente a manipulaciones sin sentido al arrastrar el código de un programa a otro.

Pero si se hace un compilador integrado para todo esto, es otra historia. Y por cierto, ¿por qué no? Es decir, es como una sintaxis C ahí dentro. Es decir, se podría utilizar todo como parte del código mql normal, simplemente añadiendo funciones adicionales a su MetaEditor. Y entonces el compilador formatearía el fragmento de código correspondiente de forma adecuada, añadiendo \N el código, etc.

Quien quiera, que busque oportunidades. Quién no quiere, razona © Proverbio

 
MetaDriver:

Hay soluciones constructivas incluso con el statu quo. Varios programas mql (Asesores Expertos y/o indicadores) pueden intercambiar mensajes, y en consecuencia, tareas y resultados de ejecución de tareas - por supuesto, si usted crea y organiza un protocolo de intercambio apropiado. Todos los Asesores Expertos trabajan en diferentes hilos (cada uno en su propio hilo), por lo tanto, este esquema de cálculos conjuntos es obviamente multihilo y los cargará de manera bastante uniforme si hay varios núcleos.

El intercambio de mensajes(utilizando las herramientas de mql5) es posible a través de

1. eventos terminales

2. canales con nombre

3. DLL.

4. archivos

5. etc.

De este conjunto de herramientas, puede elegir la más adecuada o utilizar más de una (todas a la vez). Cada método tiene sus ventajas y desventajas, por ejemplo, las tuberías con nombre permiten transferir información a través de la red local, por lo que existe la posibilidad de paralelizar la tarea para más de un procesador multinúcleo.

Buena suerte.

Bueno, digamos que no todas son herramientas mql5 :) Y no se trataba de cómo resolver (sortear) este problema. Siempre se puede encontrar una forma de evitarlo, no hay duda. La pregunta es por qué no podemos añadir la funcionalidad correspondiente a mql5, para no tener que deshacernos de ella.

Hay que admitir que no es racional y fiable lanzar un montón de Asesores Expertos con gráficos apropiados sólo para organizar su procesamiento en varios hilos.

 
Poca gente necesita el multithreading en los indicadores o Asesores Expertos. Y normalmente esta gente es capaz de implementar este multihilo por sí misma, a través de dlls y otras cosas.
 
Reshetov:

Quien quiere, busca posibilidades. Quién no quiere, las razones © Proverbio

En primer lugar hay que entender la viabilidad :) Me refiero a la razonabilidad de usar MQL5 en general, y MT5, respectivamente, si vale la pena cambiar a esta plataforma. Si, como en MT4, para que funcione correctamente hay que utilizar algún asistente, lanzar varios Asesores Expertos o trasladar el código a DLL, entonces no tiene sentido cambiar la basura por una basura. Si el código debe ser escrito en DLL, entonces es más fácil y seguro utilizar una plataforma con una API abierta, que tener un relleno adicional en forma de Asesor Experto (y un terminal en funcionamiento en su conjunto).

 
meat:

En primer lugar hay que entender la viabilidad :) Me refiero a la razonabilidad de usar MQL5 en general, y MT5, respectivamente, si vale la pena cambiar a esta plataforma. Si, como en MT4, para que funcione correctamente hay que usar algo de magia, ejecutar varios EAs o pasar el código a DLL, entonces no tiene sentido cambiar un pedazo de culo por otro. Si el código tiene que ser escrito en DLL, entonces es más fácil y más seguro utilizar inmediatamente una plataforma con una API abierta, que tener un relleno adicional en forma de Asesor Experto (y un terminal en funcionamiento en su conjunto).

Nadie está obligando a nadie a cambiar a MQL5. Por ejemplo, echaba de menos la funcionalidad de MQL4, así que tuve que cambiar a MQL5.

Por ejemplo, toda la funcionalidad puede ser implementada en С++ y MQL5 debe contener sólo la parte ejecutiva y todo el material debe ser atado con un protocolo usando canales con nombre. Hay muchas variantes. Todo lo que necesitas es una fuerte voluntad.

Связь с MetaTrader 5 через именованные каналы без применения DLL
Связь с MetaTrader 5 через именованные каналы без применения DLL
  • 2012.10.15
  • MetaQuotes Software Corp.
  • www.mql5.com
Перед многими разработчиками встает одинаковая проблема - как пробиться в песочницу торгового терминала без применения небезопасных DLL. Одним из простых и безопасных методов является использование стандартных именованных каналов (Named Pipes), которые работают как обычные файловые операции. Они позволяют организовать межпроцессорное клиент-серверное взаимодействие между программами. Посмотрите практические примеры на C++ и MQL5 в виде сервера, клиента, обмен данными между ними и замер производительности.