Crea tu Propio Asesor Experto en MetaTrader 5 con MQL5 Wizard: Señales de Trading con Dark Cloud Cover y CCI

Mike 2011.02.25 02:37 19 0 0

El MQL5 Wizard te permite crear Asesores Expertos listos para usar, basados en las clases de la biblioteca estándar que se entregan junto con el terminal cliente (puedes ver más detalles en el artículo Cómo crear Asesores Expertos listos en MQL5 Wizard). Esta herramienta es ideal para comprobar rápidamente tus ideas de trading; solo necesitas crear tu propia clase de señales de trading. La estructura de esta clase y un ejemplo están disponibles 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.

Hay un libro titulado "Estrategias de los mejores traders" (en ruso), que considera muchas estrategias de trading, y nos enfocaremos en patrones de velas de reversión, confirmados por los osciladores Estocástico, CCI, MFI y RSI.

La mejor forma 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 escribir la clase, derivada de CCandlePattern, y agregar las características necesarias (por ejemplo, la confirmación por osciladores).

A continuación, consideraremos las señales basadas en el patrón de velas de reversión "Dark Cloud Cover/Piercing Line", confirmado por el indicador CCI. 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

Es un patrón de reversión bajista que ocurre al final de una tendencia alcista. Se forma una larga vela blanca en el primer día y se crea un hueco hacia arriba en el segundo día. Sin embargo, el segundo día cierra por debajo del punto medio del primer día.

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

Fig. 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) && // (cierra 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 de vela "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 se encuentra 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 de precios no es tan discernible usando gráficos de barras como lo es con gráficos de velas. Cuanto más profundo sea 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.

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

Fig. 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) && // (cierra 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 de vela "Piercing Line".


2. Señales de trading confirmadas por el indicador CCI

Las señales de trading para abrir posiciones largas o cortas deben ser confirmadas por el indicador CCI. El valor del CCI debe ser mayor/menor que los niveles críticos (-50 para posiciones largas y 50 para posiciones cortas).

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

  • si la línea del CCI ha alcanzado el nivel crítico opuesto (80 para posiciones largas y -80 para posiciones cortas)
  • si la señal de reversión no está confirmada (cuando el CCI alcanza los siguientes niveles: -80 para posiciones largas y 80 para posiciones cortas)

Fig. 3. Patrón 'Dark Cloud Cover', confirmado por el indicador CCI

Fig. 3. Patrón "Dark Cloud Cover", confirmado por el indicador CCI


  • int CDC_PL_CCI::LongCondition() - verifica condiciones para abrir una posición larga (devuelve 80) y cerrar la posición corta (devuelve 40);
  • int CDC_PL_CCI::ShortCondition() - verifica condiciones para abrir una 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 CCI: CCI(1) < -50 (el valor del CCI de la última barra completada debe ser menor que -50).

  2. La posición corta debe cerrarse si el indicador CCI ha cruzado hacia arriba el nivel crítico -80 o cruzado hacia abajo el nivel crítico 80.

//+------------------------------------------------------------------+
//| 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_CCI::LongCondition() {
    int result = 0;
    //--- idx puede ser usado para determinar el modo de trabajo del Asesor Experto
    //--- idx=0 - en este caso EA verifica las condiciones de trading en cada tick
    //--- idx=1 - en este caso EA verifica las condiciones de trading solo en nuevas barras
    int idx = StartIndex();
    //--- verificando condiciones para abrir posición larga
    //--- formación del patrón Piercing Line y CCI < -50
    if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (CCI(1) < -50))
        result = 80;
    //--- verificando condiciones para cerrar posición corta
    //--- cruce de niveles de sobrecompra/sobreventa (hacia abajo -80, hacia abajo -80)
    if(((CCI(1) > -80) && (CCI(2) < -80)) || ((CCI(1) < -80) && (CCI(2) > -80)))
        result = 40;
    //--- devolver 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 CCI: CCI(1) > 50 (el valor del CCI del último bar completado debe ser mayor que 50).

  2. La posición larga debe cerrarse si el indicador CCI ha cruzado hacia abajo los niveles -80 o 80.

//+------------------------------------------------------------------+
//| 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_CCI::ShortCondition() {
    int result = 0;
    //--- idx puede ser usado para determinar el modo de trabajo del Asesor Experto
    //--- idx=0 - en este caso EA verifica las condiciones de trading en cada tick
    //--- idx=1 - en este caso EA verifica las condiciones de trading solo en nuevas barras
    int idx = StartIndex();
    //--- verificando condiciones para abrir posición corta
    //--- formación del patrón Dark Cloud Cover y CCI > 50
    if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (CCI(1) > 50))
        result = 80;
    //--- verificando condiciones para cerrar posición larga
    //--- cruce de niveles de sobrecompra/sobreventa (hacia abajo -80, hacia abajo 80)
    if(((CCI(1) < 80) && (CCI(2) > 80)) || ((CCI(1) < -80) && (CCI(2) > -80)))
        result = 40;
    //--- devolver resultado
    return(result);
}


2.3. Creando un Asesor Experto utilizando MQL5 Wizard

La clase CDC_PL_CCI no está incluida en las clases de la biblioteca estándar; para usarla, es necesario descargar el archivo acdc_pl_cci.mqh (ver adjuntos) y guardarlo en la carpeta client_terminal_data\MQL5\Include\Expert\Signal\MySignals. Lo mismo debe hacerse con el archivo candlepatterns.mqh. Puedes usarlo en MQL5 Wizard después de reiniciar el MetaEditor.

Para crear un Asesor Experto, lanza el MQL5 Wizard:

Fig. 4. Creando un Asesor Experto utilizando MQL5 Wizard

Fig. 4. Creando un Asesor Experto utilizando MQL5 Wizard

Especificamos el nombre del Asesor Experto:

Fig. 5. Propiedades generales del Asesor Experto

Fig. 5. Propiedades generales del Asesor Experto

Después, necesitamos seleccionar los módulos de señales de trading que utilizaremos.

Fig. 6. Propiedades de señales del Asesor Experto

Fig. 6. Propiedades de señales del Asesor Experto

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

Agregando el módulo de Señales basadas en Dark Cloud Cover/Piercing Line confirmadas por CCI:

Fig. 7. Propiedades de señales del Asesor Experto

Fig. 7. Propiedades de señales del Asesor Experto

Módulo de señales de trading agregado:

Fig. 8. Propiedades de señales del Asesor Experto

Fig. 8. Propiedades de señales del Asesor Experto

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

Fig. 9. Propiedades de trailing del Asesor Experto

Fig. 9. Propiedades de trailing del Asesor Experto

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

Fig. 10. Propiedades de gestión del dinero del Asesor Experto

Fig. 10. Propiedades de gestión del dinero del Asesor Experto

Al presionar el botón "Finalizar", obtendremos el código del Asesor Experto generado, que estará ubicado en Expert_ADC_PL_CCI.mq5, guardado en terminal_data_folder\MQL5\Experts\.

Los parámetros de entrada predeterminados 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 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 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, 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 necesitamos tener en cuenta este hecho al establecer los valores umbrales. Debido a esto, el ThresholdOpen y el 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 se cumplan las condiciones de cierre.


2.4. Resultados de la retroprueba de historia

Vamos a considerar la retroprueba del Asesor Experto en datos históricos (EURUSD H1, periodo de prueba: 2010.01.01-2011.03.16, PeriodCCI=15, MA_period=19).

En la creación del Asesor Experto utilizamos un volumen fijo (Trading con Lote Fijo, 0.1), no se utiliza el algoritmo de Trailing Stop (Trailing no utilizado).

Fig. 11. Resultados de prueba del Asesor Experto, basado en Dark Cloud Cover/Piercing Line + CCI

Fig. 11. Resultados de prueba del Asesor Experto, basado en Dark Cloud Cover/Piercing Line + CCI


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_adc_pl_cci.mq5.


Lista
Comentarios 0