El Asistente MQL5 es una herramienta increíble que te permite crear Asesores Expertos listos para usar, basados en las clases de la librería estándar que se entrega junto con el terminal del cliente (puedes consultar más sobre Creando Asesores Expertos en MQL5 Wizard). Esta herramienta es perfecta para testear tus ideas de trading rápidamente: solo necesitas crear tu propia clase de señales de trading. La estructura de esta clase y un ejemplo pueden encontrarse en el artículo MQL5 Wizard: Cómo Crear un Módulo de Señales de Trading.
La idea básica es la siguiente: la clase de señales de trading se deriva de CExpertSignal. Luego, es necesario sobreescribir los métodos virtuales LongCondition() y ShortCondition() con tus propios métodos.
Existen libros como "Estrategias de los Mejores Traders" (en ruso) que analizan diversas estrategias de trading. Aquí nos enfocaremos en patrones de velas reversales, confirmados por los osciladores Estocástico, CCI, MFI y RSI.
Lo ideal es crear una clase separada, derivada de CExpertSignal para verificar la formación de patrones de velas. Para confirmar las señales de trading generadas por los patrones de velas, es suficiente con escribir la clase, derivada de CCandlePattern, y agregar las características necesarias (por ejemplo, la confirmación por osciladores).
En esta ocasión, analizaremos las señales basadas en los patrones de velas reversales de "Líneas de Encuentro Alcistas/Bajistas", confirmadas por el indicador MFI (Índice de Facilitación del Mercado). El módulo de señales de trading se basa en la clase CCandlePattern, un ejemplo sencillo de su uso para la creación de señales de trading con patrones de velas.
1. Patrones de Velas Reversales "Líneas de Encuentro"
- 1.1. Líneas de Encuentro Alcistas
El patrón consiste en dos velas (una bajista y otra alcista) con precios de cierre iguales (o muy cercanos). El cuerpo de ambas velas debe ser mayor que el promedio de la longitud del cuerpo.
El patrón de "Líneas de Encuentro Alcistas" indica la reversión de una tendencia bajista.

Fig. 1. Patrón "Líneas de Encuentro Alcistas"
La identificación del patrón de "Líneas de Encuentro Alcistas" se implementa en el método CheckPatternBullishMeetingLines() de la clase CCandlePattern:
//+--------------------------------------------------------------------+ //| Comprueba la formación del patrón de velas "Líneas de Encuentro Alcistas" | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishMeetingLines() { //--- Líneas de Encuentro Alcistas if((Open(2)-Close(2)>AvgBody(1)) && // larga negra ((Close(1)-Open(1))>AvgBody(1)) && // larga blanca (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // cierre doji return(true); //--- return(false); }
El método CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) de la clase CCandlePattern se utiliza para verificar la formación del patrón de velas "Líneas de Encuentro Alcistas".
El patrón consiste en dos velas (una alcista y otra bajista) con precios de cierre iguales (o muy cercanos). El cuerpo de ambas velas debe ser mayor que el promedio de la longitud del cuerpo.
El patrón de "Líneas de Encuentro Bajistas" indica la reversión de una tendencia alcista.

Fig. 2. Patrón "Líneas de Encuentro Bajistas"
La identificación del patrón de "Líneas de Encuentro Bajistas" se implementa en el método CheckPatternBearishMeetingLines() de la clase CCandlePattern:
//+--------------------------------------------------------------------+ //| Comprueba la formación del patrón de velas "Líneas de Encuentro Bajistas" | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishMeetingLines() { //--- Líneas de Encuentro Bajistas if((Close(2)-Open(2)>AvgBody(1)) && // larga blanca ((Open(1)-Close(1)>AvgBody(1)) && // larga negra (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // cierre doji return(true); //--- return(false); }
El método CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) de la clase CCandlePattern se utiliza para verificar la formación del patrón de velas "Líneas de Encuentro Bajistas".
2. Señales de Trading Confirmadas por el Indicador MFI
Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el indicador MFI. El valor del indicador MFI debe ser menor a 40 (para posiciones largas) o mayor a 60 (para posiciones cortas).
El cierre de las posiciones abiertas depende de los valores del indicador MFI. Esto puede hacerse en 2 casos:
- si el MFI ha alcanzado el nivel crítico opuesto (70 para posición larga y 30 para posición corta)
- si la señal inversa no está confirmada (cuando el indicador MFI alcanza los siguientes niveles: 30 para posición larga y 70 para posición corta)

Fig. 3. Patrón "Líneas de Encuentro Bajistas", confirmado por el indicador MFI
- int CML_MFI::LongCondition() - verifica condiciones para abrir posición larga (devuelve 80) y cerrar posición corta (devuelve 40);
- int CML_MFI::ShortCondition() - verifica condiciones para abrir posición corta (devuelve 80) y cerrar posición larga (devuelve 40).
2.1. Abrir posición larga/Cerrar posición corta
La formación del patrón de "Líneas de Encuentro Alcistas" debe ser confirmada por el indicador MFI: MFi(1)<40 (el valor del indicador MFI de la última barra completada debe ser menor que 40).
La posición corta debe cerrarse si el indicador MFI ha cruzado hacia arriba los niveles críticos (70 o 30).
//+------------------------------------------------------------------+ //| Comprueba las condiciones para entrar y salir del mercado | //| 1) Entrada al mercado (abrir posición larga, resultado=80) | //| 2) Salida del mercado (cerrar posición corta, resultado=40) | //+------------------------------------------------------------------+ int CML_MFI::LongCondition() { int result=0; //--- idx puede ser usado para determinar el modo de trabajo del Asesor Experto //--- idx=0 - en este caso EA verifica condiciones de trading en cada tick //--- idx=1 - en este caso EA verifica condiciones de trading solo en barras de noticias int idx =StartIndex(); //--- comprobación de condiciones para abrir posición larga //--- formación del patrón de Líneas de Encuentro Alcistas y MFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (MFI(1)<40)) result=80; //--- comprobación de condiciones para cerrar posición corta //--- cruce de línea de señal de niveles sobrecomprados/sobrevendidos (hacia arriba 30, hacia arriba 70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- devolver resultado return(result); }
2.2. Abrir posición corta/Cerrar posición larga
La formación del patrón de "Líneas de Encuentro Bajistas" debe ser confirmada por el indicador MFI: MFI(1)>60 (el valor del indicador MFI de la última barra completada debe ser mayor que 60).
La posición larga debe cerrarse si el indicador MFI ha cruzado hacia arriba/abajo los niveles críticos (70 o 30).
//+------------------------------------------------------------------+ //| Comprueba las condiciones para entrar y salir del mercado | //| 1) Entrada al mercado (abrir posición corta, resultado=80) | //| 2) Salida del mercado (cerrar posición larga, resultado=40) | //+------------------------------------------------------------------+ int CML_MFI::ShortCondition() { int result=0; //--- idx puede ser usado para determinar el modo de trabajo del Asesor Experto //--- idx=0 - en este caso EA verifica condiciones de trading en cada tick //--- idx=1 - en este caso EA verifica condiciones de trading solo en barras de noticias int idx =StartIndex(); //--- comprobación de condiciones para abrir posición corta //--- formación del patrón de Líneas de Encuentro Bajistas y MFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (MFI(1)>60)) result=80; //--- comprobación de condiciones para cerrar posición larga //--- cruce de línea de señal de niveles sobrecomprados/sobrevendidos (hacia arriba 70, hacia abajo 30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- devolver resultado return(result); }
2.3. Creando un Asesor Experto usando MQL5 Wizard
La clase CML_MFI no está incluida en las clases de la librería estándar, para usarla es necesario descargar el archivo aml_mfi.mqh (ver adjuntos) y guardarlo en la carpeta terminal_dataolder\MQL5\Include\Expert\Signal\MySignals. Lo mismo debe hacerse con el archivo acandlepatterns.mqh. Puedes usarlo en MQL5 Wizard después de reiniciar el MetaEditor.
Para crear un Asesor Experto, lanza el Asistente MQL5:

Fig. 4. Creando Asesor Experto con MQL5 Wizard
Especificamos el nombre del Asesor Experto:

Fig. 5. Propiedades generales del Asesor Experto
Luego necesitamos seleccionar los módulos de señales de trading que se utilizarán.

Fig. 6. Propiedades de la señal del Asesor Experto
En nuestro caso, utilizamos solo un módulo de señales de trading.
Añadiendo el módulo de Señales basadas en Líneas de Encuentro Alcistas/Bajistas por MFI:

Fig. 7. Propiedades de la señal del Asesor Experto
Módulo de señales de trading añadido:

Fig. 8. Propiedades de la señal del Asesor Experto
Puedes seleccionar cualquier propiedad de trailing, pero usaremos "Trailing Stop no utilizado":

Fig. 9. Propiedades de gestión de dinero del Asesor Experto
Respecto a las propiedades de gestión de dinero, utilizaremos "Trading con volumen de operación fijo":

Fig. 10. Propiedades de gestión de dinero del Asesor Experto
Al presionar el botón "Finalizar", obtendremos el código del Asesor Experto generado, ubicado en Expert_AML_MFI.mq5, que se guardará en terminal_data_folder\MQL5\Experts\.
Los parámetros de entrada predeterminados del Asesor Experto generado son:
//--- entradas para la señal principal input int Signal_ThresholdOpen =10; // Valor umbral de señal para abrir [0...100] input int Signal_ThresholdClose =10; // Valor umbral de señal para cerrar [0...100] input double Signal_PriceLevel =0.0; // Nivel de precio para ejecutar una operación input double Signal_StopLevel =50.0; // Nivel de Stop Loss (en puntos) input double Signal_TakeLevel =50.0 // Nivel de Take Profit (en puntos)
deben ser reemplazados por:
//--- entradas para la señal principal input int Signal_ThresholdOpen =40; // Valor umbral de señal para abrir [0...100] input int Signal_ThresholdClose =20; // Valor umbral de señal para cerrar [0...100] input double Signal_PriceLevel =0.0 // Nivel de precio para ejecutar una operación input double Signal_StopLevel =0.0 // Nivel de Stop Loss (en puntos) input double Signal_TakeLevel =0.0 // Nivel de Take Profit (en puntos)
Los parámetros de entrada Signal_ThresholdOpen/Signal_ThresholdClose permiten especificar niveles umbrales para abrir y cerrar posiciones.
En el código de los métodos LongCondition() y ShortCondition() de la clase de señales de trading, hemos especificado los valores fijos de los umbrales:
- Abrir posición: 80;
- Cerrar posición: 40.
El Asesor Experto, generado por MQL5 Wizard, abre y cierra posiciones utilizando los "votos" de los módulos de señales de trading. El voto del módulo principal (como contenedor, que consiste en todos los módulos añadidos) también se utiliza, pero sus métodos LongCondition() y ShortCondition() siempre devuelven 0.
Los resultados de los votos del módulo principal también se utilizan en el promedio de "votos". En nuestro caso tenemos: módulo principal + 1 módulo de señales de trading, así que debemos tener en cuenta este hecho al establecer los valores de los umbrales. Debido a esto, los ThresholdOpen y ThresholdClose deben establecerse como 40=(0+80)/2 y 20=(0+40)/2.
Los valores de los parámetros de entrada Signal_StopLevel y Signal_TakeLevel se establecen en 0, lo que significa que el cierre de las posiciones solo se realizará cuando las condiciones de cierre sean verdaderas.
2.4. Resultados de la Prueba de Historia
Analicemos la prueba del Asesor Experto en datos históricos (EURUSD H1, periodo de prueba: 2000.01.01-2011.03.16, PeriodMFI=12, MA_period=4).
En la creación del Asesor Experto utilizamos el volumen fijo (Trading con Lote Fijo, 0.1), no se usa el algoritmo de Trailing Stop (No se usa Trailing).

Fig. 11. Resultados de la prueba del Asesor Experto, basado en Líneas de Encuentro Alcistas/Bajistas + MFI
El mejor conjunto de parámetros de entrada se puede encontrar utilizando el Tester de Estrategias del terminal cliente de MetaTrader 5.
El código del Asesor Experto, creado por MQL5 Wizard, se adjunta en expert_aml_mfi.mq5.
Publicaciones relacionadas
- Señales de Trading con Patrón Hammer/Hanging Man y Estocástico en MetaTrader 5
- Señales de Trading con MQL5: Patrones de Estrellas y MFI
- 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
- Crea tu Asesor Experto: Señales de Trading con 3 Cuervos Negros/3 Soldados Blancos y MFI