Inicio Trading Sistemático Publicación

Crea tu Asesor Experto con MQL5: Señales de Trading Basadas en 'Dark Cloud Cover' y 'Piercing Line' + RSI

Archivos adjuntos
300.zip (6.5 KB, Descargar 0 veces)

El MQL5 Wizard es una herramienta increíble para aquellos que quieren crear Asesores Expertos listos para utilizar, basados en las clases de la biblioteca estándar que vienen con el terminal cliente. Si quieres verificar rápidamente tus ideas de trading, solo necesitas crear tu propia clase de señales de trading. La estructura de esta clase y ejemplos se pueden encontrar en el artículo MQL5 Wizard: Cómo Crear un Módulo de Señales de Trading.

La idea general 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.

En el libro "Estrategias de los mejores traders" (en ruso), se consideran muchas estrategias de trading, y aquí nos centraremos en patrones de velas de reversión, confirmados por Stochástico, CCI, MFI y el RSI.

La mejor manera 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, basta con crear la clase derivada de CCandlePattern y añadir las características necesarias (por ejemplo, confirmación por osciladores).

Aquí analizaremos las señales basadas en el patrón de velas de reversión "Dark Cloud Cover/Piercing Line", confirmado por el indicador RSI. El módulo de señales de trading se basa en la clase CCandlePattern, que es un ejemplo sencillo de su uso para crear señales de trading con patrones de velas.


1. Patrones de velas de reversión: "Dark Cloud Cover" y "Piercing Line"

1.1. Dark Cloud Cover

Este es un patrón de reversión bajista que ocurre al final de una tendencia alcista. Se forma una vela blanca larga el primer día y se genera un hueco al alza el segundo día. Sin embargo, el cierre del segundo día está por debajo del punto medio de la primera vela.

Patrón de vela 'Dark Cloud Cover'

Figura 1. Patrón de vela 'Dark Cloud Cover'

El reconocimiento del patrón "Dark Cloud Cover" se implementa en el método CheckPatternDarkCloudCover() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de vela "Dark Cloud Cover"        |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover() {
    //--- Dark Cloud Cover
    if((Close(2) - Open(2) > AvgBody(1) && // (vela blanca larga)
        (Close(1) < Close(2) && // 
        (Close(1) > Open(2) && // (cierre dentro del cuerpo anterior)
        (MidOpenClose(2) > CloseAvg(1) && // (tendencia alcista)
        (Open(1) > High(2))) { // (abre en un nuevo máximo)
        return(true);
    //---
    return(false);
}

El método CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) de la clase CCandlePattern se utiliza para verificar la formación del patrón "Dark Cloud Cover".


1.2. Piercing Line

El hueco hacia abajo en el segundo día perpetúa la tendencia bajista. Sin embargo, el cierre del segundo día está por encima del punto medio del cuerpo del primer día. Esto sugiere a los bajistas que podría estar formándose un fondo. Esta acción del precio no es tan discernible utilizando gráficos de barras como lo es con gráficos de velas. Cuanto más penetre el cierre del segundo día en el cuerpo del primer día, más probable será que la señal de reversión tenga éxito.

Patrón de vela 'Piercing Line'

Figura 2. Patrón de vela 'Piercing Line'

El reconocimiento del patrón "Piercing Line" se implementa en el método CheckPatternPiercingLine() de la clase CCandlePattern:

//+------------------------------------------------------------------+
//| Verifica la formación del patrón de vela "Piercing Line"          |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine() {
    //--- Piercing Line
    if((Close(1) - Open(1) > AvgBody(1) && // (vela blanca larga)
        (Open(2) - Close(2) > AvgBody(1) && // (vela negra larga)
        (Close(1) > Close(2) && //  
        (Close(1) < Open(2) && // (cierre dentro del cuerpo anterior)
        (MidOpenClose(2) < CloseAvg(2) && // (tendencia bajista)
        (Open(1) < Low(2))) { // (abre por debajo del mínimo anterior)
        return(true);
    //---
    return(false);
}

El método CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) de la clase CCandlePattern se utiliza para verificar la formación del patrón "Piercing Line".


2. Señales de Trading, Confirmadas por el Indicador RSI

Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el indicador RSI. El valor del RSI debe estar por debajo/superior a los niveles críticos (40 para posiciones largas y 60 para posiciones cortas).

El cierre de las posiciones abiertas depende de los valores del RSI. Esto puede realizarse en 2 casos:

  • Si el RSI ha alcanzado el nivel crítico opuesto (70 para posiciones largas y 30 para cortas).
  • Si la señal de reversión no está confirmada (cuando el RSI alcanza los siguientes niveles: 30 para largas y 70 para cortas).

Patrón 'Dark Cloud Cover' confirmado por el RSI

Figura 3. Patrón 'Dark Cloud Cover', confirmado por el RSI


  • int CDC_PL_RSI::LongCondition() - verifica condiciones para abrir posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
  • int CDC_PL_RSI::ShortCondition() - verifica condiciones para abrir posición corta (devuelve 80) y cerrar la posición larga (devuelve 40).

2.1. Abrir posición larga/Cerrar posición corta

  1. La formación del patrón "Piercing Line" debe ser confirmada por el indicador RSI: RSI(1) < 40 (el valor del RSI de la última barra completada debe ser menor que 40).

  2. La posición corta debe cerrarse si el indicador RSI ha cruzado hacia arriba los niveles críticos 70 o 30.

//+------------------------------------------------------------------+
//| Verifica 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 CDC_PL_RSI::LongCondition() {
    int result=0;
    //--- idx puede ser usado para determinar el modo de trabajo del EA
    //--- 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 nuevas barras
    int idx   =StartIndex();
    //--- verificación de condiciones para abrir posición larga
    //--- formación del patrón Piercing Line y RSI<30
    if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1) < 40))
        result=80;
    //--- verificació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(((RSI(1) > 30) && (RSI(2) < 30)) || ((RSI(1) > 70) && (RSI(2) < 70)))
        result=40;
    //--- retorno del resultado
    return(result);
}

2.2. Abrir posición corta/Cerrar posición larga

  1. La formación del patrón "Dark Cloud Cover" debe ser confirmada por el indicador RSI: RSI(1) > 60 (el valor del RSI del último bar completado debe ser mayor que 60).

  2. La posición larga debe cerrarse si el indicador RSI ha cruzado hacia abajo los niveles críticos 70 o 30.

//+------------------------------------------------------------------+
//| Verifica 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 CDC_PL_RSI::ShortCondition() {
    int result=0;
    //--- idx puede ser usado para determinar el modo de trabajo del EA
    //--- 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 nuevas barras
    int idx   =StartIndex();
    //--- verificación de condiciones para abrir posición corta
    //--- formación del patrón Dark Cloud Cover y RSI>60
    if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1) > 60))
        result=80;
    //--- verificación de condiciones para cerrar posición larga
    //--- cruce de línea de señal de niveles sobrecomprados/sobrevendidos (hacia abajo 70, hacia abajo 30)
    if(((RSI(1) < 70) && (RSI(2) > 70)) || ((RSI(1) < 30) && (RSI(2) > 30)))
        result=40;
    //--- retorno del resultado
    return(result);
}

2.3. Creando un Asesor Experto usando MQL5 Wizard

La clase CDC_PL_RSI no está incluida en las clases de la Biblioteca Estándar, así que para usarla, es necesario descargar el archivo adc_pl_rsi.mqh (ver adjuntos) y guardarlo en la carpeta client_terminal_data\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 MQL5 Wizard:

Creando Asesor Experto con MQL5 Wizard

Figura 4. Creando Asesor Experto con MQL5 Wizard

Especifica el nombre del Asesor Experto:

Propiedades generales del Asesor Experto

Figura 5. Propiedades generales del Asesor Experto

Después, selecciona los módulos de señales de trading que usarás.

Propiedades de señales del Asesor Experto

Figura 6. Propiedades de señales del Asesor Experto

En nuestro caso, solo utilizamos un módulo de señales de trading.

Añadiendo el módulo de señales basado en Dark Cloud Cover/Piercing Line confirmado por RSI:

Propiedades de señales del Asesor Experto

Figura 7. Propiedades de señales del Asesor Experto

Módulo de señales de trading añadido:

Propiedades de señales del Asesor Experto

Figura 8. Propiedades de señales del Asesor Experto

Puedes seleccionar cualquier propiedad de trailing, pero usaremos "Trailing Stop no utilizado":

Propiedades de gestión de dinero del Asesor Experto

Figura 9. Propiedades de gestión de dinero del Asesor Experto

En cuanto a las propiedades de gestión de dinero, usaremos "Trading con volumen de operación fijo":

Propiedades de gestión de dinero del Asesor Experto

Figura 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_ADC_PL_RSI.mq5, que se guardará en terminal_data_folder\MQL5\Experts\.

Los parámetros de entrada por defecto del Asesor Experto generado:

//--- 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 un trato
input double         Signal_StopLevel       =50.0;   // Nivel de Stop Loss (en puntos)
input double         Signal_TakeLevel       =50.0;    // Nivel de Take Profit (en puntos)

debe ser reemplazado 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 un trato
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 críticos 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 del umbral:

  • 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, 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 los "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 umbral. Debido a este hecho, el ThresholdOpen y ThresholdClose deben ser establecidos 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 pruebas retrospectivas

Analicemos la prueba retrospectiva del Asesor Experto sobre datos históricos (EURUSD H1, período de prueba: 2010.01.01-2011.02.23, PeriodRSI=20, MA_period=14).

En la creación del Asesor Experto usamos un volumen fijo (Trading Fixed Lot, 0.1), el algoritmo de Trailing Stop no se utiliza (Trailing no utilizado).

Resultados de la prueba del Asesor Experto

Figura 11. Resultados de la prueba del Asesor Experto, basado en Dark Cloud Cover/Piercing Line + RSI


El mejor conjunto de parámetros de entrada se puede encontrar utilizando el Strategy Tester del terminal cliente MetaTrader 5.

El código del Asesor Experto, creado por MQL5 Wizard, está adjunto en expert_ad_pl_rsi.mq5.

Publicaciones relacionadas

Comentarios (0)