Uno de los beneficios del lenguaje MQL5 es la posibilidad de utilizar indicadores y Asesores Expertos multimoneda. Puedes consultar el manejador de eventos OnTickMarketWatch multimoneda en MQL5 en la CodeBase.
El uso del concepto propuesto en el script no siempre es conveniente. Por ejemplo, en caso de múltiples eventos, puede haber un desbordamiento en la cola de eventos.
Aquí te dejo una nota de la Referencia de MQL5:
El terminal del cliente agrega eventos que aparecen a la cola de eventos. Por lo tanto, los eventos se procesan uno tras otro de acuerdo con el orden en que fueron recibidos. Hay una excepción para el evento NewTick. Si la cola ya tiene tal evento o este evento está siendo procesado, el nuevo evento NewTick no se agrega a la cola.
La cola de eventos tiene un tamaño limitado. En caso de desbordamiento de la cola, los eventos antiguos se eliminan sin ser procesados para permitir la recepción de nuevos eventos. Por lo tanto, se recomienda escribir manejadores de eventos eficientes, y no se recomienda usar bucles infinitos (hay una excepción para los scripts que manejan solo el evento Start).
Además, a veces es necesario recalcular los valores del indicador solo cuando aparece una nueva barra. Otra situación es si necesitas desactivar operaciones "al vuelo" en algún símbolo en un Asesor Experto multimoneda, cambiar el marco de tiempo de algún símbolo o alguna otra cosa.
Este "algo más" podría ser datos externos. El Panel de Control MCM (Modo Multimoneda) se basa en esta idea.
Por cierto, también se puede utilizar en operaciones con una sola moneda.
Características del "Panel de Control MCM" (versión de concurso):
Cuenta con un número mínimo de funciones necesarias para utilizar el modo multimoneda en Asesores Expertos e Indicadores:
- Agregar/Eliminar símbolos para operar y analizar.
- Permite rastrear los eventos de "nuevo tick" y "nueva barra" para cualquier símbolo y periodo.
- Todas las configuraciones se pueden cambiar "al vuelo" sin reiniciar el Asesor Experto o el Indicador.
- El Panel puede ser utilizado con nuestros Asesores Expertos e Indicadores.
- También se puede incluir en tu código, se cargará junto con ellos.
- Es transparente. No necesitas agregar el código del Panel de Control MCM a tus Asesores Expertos o Indicadores.
Usando el "Panel de Control MCM" puedes añadir tus propias funcionalidades. A continuación, más detalles.
El guardado/restauración de la configuración del Panel de Control no está soportado en esta versión.
El lanzamiento del "Panel de Control MCM" puede hacerse de varias maneras:
- Adjuntar el indicador "iControl panel MCM" al gráfico.
- Ejecutar el script "scControl panel MCM". Este script carga el indicador "iControl panel MCM".
- Cargar el Panel desde tu Asesor Experto o Indicador. Consulta "exControl panel MCM" para más detalles.
En el tercer caso, el Panel se cargará junto con nuestro Asesor Experto o Indicador y se adjuntará al gráfico.
Tu Asesor Experto debe tener el manejador de eventos OnChartEvent() para procesar los eventos del Panel de Control MCM.
Interfaz
La interfaz del usuario es sencilla, se implementa como un menú. El tamaño y los colores del menú se pueden configurar mediante los parámetros de entrada.
Se ve de la siguiente manera:

Diseño
El Panel se utiliza para configurar los eventos para los Asesores Expertos e Indicadores multimoneda.
El tamaño y la posición del Panel dependen del tamaño del gráfico y del tamaño de la fuente (definido en los parámetros de entrada). Para liberar espacio de trabajo, el Panel se puede minimizar.

El tamaño del Panel se puede cambiar al modificar el tamaño de la fuente en los parámetros de entrada (tamaño de fuente=10 por defecto):

Puedes establecer cualquier color que desees.
Por ejemplo, el esquema Rosa:

El esquema EMO:

Fácil de usar
El menú es intuitivo, fácil de usar.
El botón del "Panel de Control MCM" contiene funciones adicionales (no incluidas en esta versión):

Usando el botón "Gráfico" puedes cambiar fácilmente el símbolo y el marco de tiempo actuales, solo elige:

La opción "Eventos" te permite habilitar/deshabilitar eventos "al vuelo" (sin reiniciar el Asesor Experto o el Indicador) para algún símbolo y especificar el evento necesario. Estos eventos pueden ser procesados dentro de la función OnChartEvent() de tu Asesor Experto o Indicador. El menú de símbolos contiene solo los símbolos seleccionados desde "Market Watch". Puedes combinar cualquier evento, todos ellos serán procesados.
Por ejemplo, no es necesario preocuparse por la aparición de un nuevo tick/barra para símbolos en marcos de tiempo, el motor del Panel enviará los eventos:

Aquí tienes la opción de "Ayuda":

Conocimientos y su Implementación
Mi solución está publicada en manejador de eventos OnTickMarketWatch multimoneda, pero este Panel tiene algunas características adicionales:
- El "Panel de Control MCM" proporciona una interfaz no implementada directamente en el terminal del cliente. Te permite usar el modo multimoneda a través del manejador de eventos OnChartEvent(). Otra característica es la posibilidad de cambiar configuraciones "al vuelo".
- Para generar los eventos para el manejador de eventos OnChartEvent(), el Panel de Control MCM utiliza sus propios "agentes" (indicadores, lanzados por el Panel de Control MCM en algún símbolo), proporcionando el evento para el trading multimoneda.
- El Panel puede ser incluido en Asesores Expertos o Indicadores.
- El Panel de Control MCM proporciona nuevas posibilidades para los desarrolladores de MQL5.
- En mi opinión, el Panel es un ejemplo de una nueva estructura de Asesores Expertos e Indicadores. Proporcionaré algunos ejemplos más adelante.
Información sobre eventos y alertas
El Panel cuenta con una barra de estado para mostrar eventos.
Instalación del Panel de Control MCM
Descomprime el archivo zip mcm_control_panel.zip en la carpeta del terminal del cliente. Después de eso, aparecerán los siguientes archivos:
- /mql5/experts/exControl panel MCM.mq5 - ejemplo de Asesor Experto;
- /mql5/scripts/scControl panel MCM.mq5 - ejemplo de Script;
- /mql5/indicators/iControl panel MCM.mq5 - indicador, el motor principal del "Panel de Control MCM";
- /mql5/indicators/Spy Control panel MCM.mq5 - indicador, agente del "Panel de Control MCM"
- /mql5/include/Control panel MCM.mqh - un conjunto de clases y funciones del "Panel de Control MCM".
A continuación, compila los Indicadores, el Script y el Asesor Experto.
Lanzamiento del Panel de Control MCM
El lanzamiento del Panel de Control MCM se realiza al adjuntar el indicador iControl panel MCM.mq5 a cualquier gráfico.
El Panel puede ser lanzado desde el Asesor Experto, simplemente adjunta el Asesor "exControl panel MCM" al gráfico:

Como ejemplo de multimoneda, escribí el Asesor Experto MultiTrend. El indicador traza la tendencia del USD, basado en el análisis de 4 pares de divisas:
Aquí está el código:
//+------------------------------------------------------------------+ //| MultiTrend.mq5 | //| Copyright 2010, Lizar | //| https://www.mql5.com/ru/users/Lizar | //+------------------------------------------------------------------+ #define VERSION "1.00 Build 2 (09 Dec 2010)" #property copyright "Copyright 2010, Lizar" #property link "https://www.mql5.com/ru/users/Lizar" #property version VERSION #property description "Este Asesor Experto utiliza el Panel de Control MCM" input color bg_color=Gray; // Color del menú input color font_color=Gainsboro; // Color del texto input color select_color=Yellow; // Color del texto seleccionado input int font_size=10; // Tamaño de la fuente #include <Control panel MCM.mqh> //<--- Archivo de inclusión //+------------------------------------------------------------------+ //| Función de inicialización del experto | //+------------------------------------------------------------------+ int OnInit() { //--- Inicialización del Panel de Control MCM. //--- No es necesario establecer colores, si no se especifica, se usarán los colores predeterminados. InitControlPanelMCM(bg_color,font_color,select_color,font_size); //--- return(0); } //+------------------------------------------------------------------+ //| Función de desinicialización del experto | //+------------------------------------------------------------------+ void OnDeinit(const int reason) { DeinitControlPanelMCM(); //<--- Desinicialización del Panel de Control MCM } //+------------------------------------------------------------------+ //| Manejador de eventos OnChartEvent. | //| Consulta la Referencia de MQL5 para más detalles. | //| Puede ser usado con el Panel de Control MCM para trading multimoneda | //+------------------------------------------------------------------+ void OnChartEvent(const int id, // identificador del evento: // si id-CHARTEVENT_CUSTOM==0 - evento de inicialización (cuando prev_calculated==0) const long& lparam, // marco de tiempo const double& dparam, // precio const string& sparam // nombre del símbolo ) { if(id>=CHARTEVENT_CUSTOM) { Print(TimeToString(TimeCurrent(),TIME_SECONDS)," -> id=", id-CHARTEVENT_CUSTOM, ": ",sparam," ",EventDescription(lparam)," precio=",dparam); } } //+------------------------------------------------------------------+
Los parámetros de OnChartEvent().
El Panel de Control genera eventos personalizados. Estos eventos pueden ser procesados en el Asesor Experto o Indicador usando el manejador de eventos OnChartEvent().
Los parámetros de entrada:
- id - id del evento:
si id-CHARTEVENT_CUSTOM !=0 - corresponde al índice de símbolo en la ventana de "Market Watch"; - lparam - bandera de evento. Consulta la enumeración ENUM_CHART_EVENT_SYMBOL en Control panel MCM.mqh.
- dparam - precio del tick o precio de apertura de la nueva barra en algún marco de tiempo.
- sparam - nombre del símbolo
Lista de eventos soportados en el Panel de Control MCM
Usando el parámetro lparam, el Panel de Control puede enviar hasta 64 eventos personalizados diferentes por símbolo. En esta versión se soportan los siguientes eventos:
- Evento de "Inicialización" (Inicialización);
- Evento de "Nuevo tick" (tick);
- Evento de "Nueva barra" en gráfico M1 (M1);
- Evento de "Nueva barra" en gráfico M2 (M2);
- Evento de "Nueva barra" en gráfico M3 (M3);
- Evento de "Nueva barra" en gráfico M4 (M4);
- Evento de "Nueva barra" en gráfico M5 (M5);
- Evento de "Nueva barra" en gráfico M6 (M6);
- Evento de "Nueva barra" en gráfico M10 (M10);
- Evento de "Nueva barra" en gráfico M12 (M12);
- Evento de "Nueva barra" en gráfico M15 (M15);
- Evento de "Nueva barra" en gráfico M20 (M20);
- Evento de "Nueva barra" en gráfico M30 (M30);
- Evento de "Nueva barra" en gráfico H1 (H1);
- Evento de "Nueva barra" en gráfico H2 (H2);
- Evento de "Nueva barra" en gráfico H3 (H3);
- Evento de "Nueva barra" en gráfico H4 (H4);
- Evento de "Nueva barra" en gráfico H6 (H6);
- Evento de "Nueva barra" en gráfico H8 (H8);
- Evento de "Nueva barra" en gráfico H12 (H12);
- Evento de "Nueva barra" en gráfico diario D1);
- Evento de "Nueva barra" en gráfico semanal (W1);
- Evento de "Nueva barra" en gráfico mensual (MN1);
La descripción del evento, devuelta por EventDescription(), se presenta entre paréntesis (Inicialización, tick, Mxx, etc.). La función EventDescription se puede encontrar en Control panel MCM.mqh (siguiendo la enumeración ENUM_CHART_EVENT_SYMBOL).
El evento de "Inicialización" se genera cuando prev_calculated=0, se puede usar para preparar los datos, por ejemplo, puedes recalcular los valores del indicador.
Configuración de Eventos
Para establecer los eventos necesarios, haz clic en el botón "Eventos", selecciona el símbolo y el tipo de evento. Los eventos seleccionados se muestran en color amarillo (o en el color seleccionado en los parámetros de entrada del indicador). Puedes elegir uno o más eventos, todos ellos podrán ser procesados por nuestro Asesor Experto multimoneda. Para aplicar cambios, haz clic en el botón "Habilitar/Deshabilitar eventos".
El mismo proceso se puede realizar para todos los símbolos necesarios.

Aquí tienes un registro de la pestaña "Expertos":

Publicaciones relacionadas
- Promedio Móvil: Asesor Experto para MetaTrader 5
- Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en Estrellas de la Mañana/Atardecer y CCI
- Cómo Crear un Asesor Experto con MQL5: Señales de Trading Basadas en Estrellas y Estocástico
- Señales de Trading con MQL5: Patrones de Estrellas y MFI
- Crossover de 2 MA: Tu Asesor Experto para MetaTrader 4