Discusión sobre el artículo "Websockets para MetaTrader 5: conexiones de cliente asíncronas con la API de Windows"
Hola, a mi también me parece un artículo excelente.
Estoy desarrollando un EA que utiliza múltiples indicadores. Inicialmente opté por funcionalizar los cálculos de los indicadores para que pudieran ser utilizados en un gráfico de indicadores, así como en el EA. Al hacer pruebas en el probador de estrategias, he encontrado que la función Bars devuelve un valor diferente entre el indicador que se ejecuta en modo visual y el valor determinado por el EA. ¿Sabes cómo informar a los desarrolladores de este y otros errores que he encontrado en MLQ5?
La solución sencilla era usar iCustom que ya usaba en MQL4. Sin embargo, la versión MQL5 sólo permite CopyBuffer en el primer trazado del indicador y muchos de mis inidicadores tienen múltiples buffers trazados.
Las soluciones que se me ocurren son utilizar sus WebSockets para comunicarse entre múltiples indicadores y la EA, tuberías con nombre para hacer lo mismo, o separar los indicadores en parcelas de búfer individuales que implicará un aumento significativo de procesamiento debido a la multiplicty de cálculos idénticos, así como una pesadilla tratando de mantener una docena o más de los indicadores sincronizados para asegurar cálculos precisos.
Como WebSockets es asíncrono ¿cuáles son las implicaciones de la ea conseguir docenas de flujos de datos de los indicadores casi simultáneamente? ¿Puede mantener el ritmo o habría desbordamientos?
Cualquier sugerencia será muy apreciada.
Gracias por su respuesta
CapeCoddah
La solución sencilla era usar iCustom que ya usaba en MQL4. Sin embargo, la versión MQL5 sólo permite CopyBuffer en el primer trazado del indicador y muchos de mis inidicadores tienen múltiples buffers trazados.
Las soluciones que se me ocurren son utilizar sus WebSockets para comunicarse entre múltiples indicadores y la EA, tuberías con nombre para hacer lo mismo, o separar los indicadores en parcelas de búfer individuales que implicará un aumento significativo de procesamiento debido a la multiplicty de cálculos idénticos, así como una pesadilla tratando de mantener una docena o más de los indicadores sincronizados para asegurar cálculos precisos.
Como WebSockets es asíncrono, ¿cuáles son las implicaciones de que el ea reciba docenas de flujos de datos de los indicadores casi simultáneamente? ¿Puede mantener el ritmo o habría desbordamientos?
Cualquier sugerencia será muy apreciada.
Gracias por su respuesta
CapeCoddah
Hola, tu dices
La solución simple era utilizar iCustom que utilicé previamente en MQL4. Sin embargo, la versión de MQL5 permite solamente CopyBuffer en el primer diagrama del indicador y muchos de mis inidicators tienen almacenadores intermediarios múltiples trazados.
que no es corect. Puede copiar cualquier búfer que desee. Las tres sobrecargas de la función CopyBuffer te permiten copiar cualquier buffer que especifiques. Usando la primera versión (mostrada abajo) como ejemplo:int CopyBuffer( int indicator_handle, // tirador indicador int buffer_num, // número del búfer indicador int start_pos, // posición inicial int count, // cantidad a copiar double buffer[] // matriz de destino a copiar );
El segundo parámetro 'buffer_num' te permite especificar qué buffer copiar - empezando en el índice 0 como primer buffer, 1 para el segundo buffer, etc., permitiéndote copiar cualquier buffer que desees de tu indicador personalizado. Un ejemplo de esto es el iMACD incorporado que tiene 2 búferes (0 - MAIN_LINE, 1 - SIGNAL_LINE). Yo sugeriría que se centran en iCustom indicador para resolver su problema antes de intentar WebSockets o Sockets de cualquier tipo para el caso. Es mucho más simple solución, que no requiere ningún bibliotecas externas como C++ DLLs etc.. Siempre trate de usar el lenguaje MQL5 tanto como sea posible, y evitar DLLs menos que sea absolutamente necesario. Yo desarrollo en C, C ++, C # y más, y puedo decir por experiencia que se pegue a MQL5 (un lenguaje muy potente a pesar de sus limitaciones - como con cualquier otro lenguaje) es el mejor approch.
Déjame saber cómo progresas. Si te enfrentas a cualquier problema con 'CopyBuffer' no dude en preguntar. Si usted está aventurando a MQL5 de MQL4, algunas cosas se hacen de manera diferente, por lo tanto, su conocimiento MQL4 podría no ser directamente transferible. Pero sigue adelante, MQL5 es mucho mejor, mucho más potente y más rápido.
Buena suerte.
Puede que te ayude ver algún código de ejemplo en:
Brooky Fuerza de Tendencia para MT5
Ryan L Johnson, 2025.04.29 19:52
Este indicador llama a otros 3 indicadores de subventana. Todos los archivos van en su carpeta de Indicadores.Les agradezco a ambos por su respuesta a mi pregunta. Debo haber pasado por alto las definiciones de funciones sobrecargadas y sólo leí sobre la primera. ¿Saben si la Terminal es lo suficientemente inteligente como para procesar en paralelo las llamadas iCustom para maximizar la utilización del procesador ya que planeo variar el parámetro de símbolo para cada uno de los 28 pares y planeo tener múltiples llamadas iCustom como la Brooky Trend Strength.
Además, ¿podría alguno de ustedes decirme dónde puedo publicar comentarios sobre errores en MQ5 y también donde sugerencias para los administradores de Mq. He encontrado algunos, más recientemente la diferencia Bars entre el terminal y el probador de estrategia. Además, tengo una configuración de 3 screem con la pantalla principal en el extremo izquierdo. Tratando de mover un panel. El puntero del ratón de arrastre está en la pantalla más a la izquierda, pero el panel de arrastre está en el centro. Creo que el Terminal o Windows se está volviendo loco cuando el ratón se mueve un píxel y luego cambia de pantalla para mover el panel de un píxel y otra vez.
Bars() se hipo donde hay datos de precios que faltan - donde rates_total no lo hará. Si no recuerdo mal lo que leí en el pasado, Bars() se puede arreglar haciendo referencia a las marcas de tiempo. Podría valer la pena una búsqueda.
Tengo una configuración de 3 pantallas con la pantalla principal en el extremo izquierdo. Tratar de mover un panel, como el Navegador o los paneles de Mercado, de la izquierda a la derecha es muy tedioso. El puntero del ratón de arrastre está en la pantalla más a la izquierda, pero el panel de arrastre está en el medio. Creo que el Terminal o Windows se está volviendo loco cuando el ratón se mueve un píxel y luego cambia de pantalla para mover el panel de un píxel y volver de nuevo.
Realmente no sé en este caso. Tengo 3 ordenadores, cada uno con su propio monitor y terminal. Sé que Windows generalmente tiene configuraciones de visualización de múltiples monitores, incluyendo imagen-en-imagen tal vez como una solución.
¿Puede alguien más con múltiples monitores reales en una sola máquina intervenir aquí, por favor?
¡¡¡Gran Información!!!
Gracias Ryan, tu comentario respecto a bars vs rates_total es apropiado. Mi problema es que los dos son idénticos en Terminal pero en el STrategy Tester Visualize, Bars es uno mayor lo que me llevó a mi bobo por no leer la documentación hasta el final. Voy a tomar tu aportación y usarla para iCustom. Supongo que debe haber una dirección iCustom distinta para cada combinación de Symbol y Time specifications.
Además, ¿hay alguna manera de que un EA muestre Texto en la pantalla en el Probador de Estrategias? En Mq4 lo hacía automáticamente pero ahora no. Uso muchos objetos de clase para mostrar información y poner una segunda copia en la plantilla ralentiza aún más el Probador de Estrategias.
Sobre la pantalla de 3 paneles, creo que el problema es que el terminal no actualiza correctamente la ubicación del monitor cuando el ratón se mueve de la pantalla 2 a la pantalla 1.
Yo tengo 2 mini pcs que soportan 3 monitores cada uno así que tengo las 3 pantallas conectadas a ambos minis y uso HDMI1 para un pc y HDMI2 para el otro. Funciona de maravilla con Fire Tvs de 43" aunque hay que asegurarse de que los mandos están bien configurados para controlar un solo monitor (llamar al soporte de amazon). El único inconveniente es que el botón de encendido y apagado apaga todos los monitores y a veces tengo que desenchufar para sincronizar la alimentación.
CapeCoddah
- Un único fichero indicador en un único directorio puede ser reutilizado por múltiples instancias de iCustom().
- Un solo manejador de indicador puede ser reutilizado por múltiples instancias de CopyBuffer().
- Ahora entiendo por qué está utilizando Bars(), ya que rates_total por sí solo está limitado a un único marco temporal. Presumiblemente, está utilizando Bars() en un bucle separado para cada marco temporal.
Además, ¿hay alguna manera de que un EA muestre texto en la pantalla en el Probador de Estrategias? En Mq4 lo hacía automáticamente pero ahora no. Utilizo muchos objetos de clase para mostrar información y poner una segunda copia en la plantilla ralentiza aún más el Probador de Estrategias.
En la pantalla de 3 paneles, creo que el problema es que el terminal no actualiza correctamente la ubicación del monitor cuando el ratón se mueve de la pantalla 2 a la pantalla 1.
- 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
Artículo publicado Websockets para MetaTrader 5: conexiones de cliente asíncronas con la API de Windows:
El artículo «WebSockets para MetaTrader 5: uso de la API de Windows» ilustraba la utilización de la API de Windows para la implementación de un cliente de WebSocket en aplicaciones MetaTrader 5. La implementación allí presentada estaba limitada por su modo operativo sincrónico.
En este artículo, revisamos la aplicación de la API de Windows para construir un cliente websocket para programas MetaTrader 5, con el objetivo de lograr una funcionalidad de cliente asincrónica. Una metodología práctica para lograr este objetivo implica la creación de una biblioteca vinculada dinámicamente (DLL) personalizada que exporta funciones adecuadas para la integración con aplicaciones MetaTrader 5.
En consecuencia, este artículo discutirá el proceso de desarrollo de la DLL y posteriormente presentará una demostración de su aplicación a través de un ejemplo de programa MetaTrader 5.
Autor: Francis Dube