English Русский 中文 Deutsch 日本語 Português
preview
Analizamos ejemplos de estrategias comerciales en el terminal de cliente

Analizamos ejemplos de estrategias comerciales en el terminal de cliente

MetaTrader 5Ejemplos |
748 15
Artyom Trishkin
Artyom Trishkin

Contenido


Introducción

A principios de la década de 1990, los gráficos de velas japonesas y los patrones de velas desarrollados por el analista técnico Steve Nison se introdujeron en los mercados financieros occidentales. Desde entonces, el conocimiento de los patrones de velas se ha vuelto tan esencial para los tráders como la capacidad de aplicar el análisis técnico clásico.

Hace un tiempo, en el directorio de asesores del terminal de cliente apareció la nueva carpeta Free Robots:


Esta carpeta contiene 28 asesores: ejemplos de estrategias comerciales para el estudio independiente y la aplicación de los principios establecidos en la estrategia para nuestros propios desarrollos. Las estrategias comerciales presentadas en la carpeta Robots gratuitos son asesores que negocian con patrones de velas respaldados por las señales de los indicadores.

Para confirmar las señales procedentes de los patrones de velas, se utilizan los valores de uno de los cuatro indicadores osciladores: CCI, MFI, RSI y Stochastic Oscillator. De esta forma, presentaremos para su estudio 7 asesores que negociarán con patrones de velas (cada uno con dos patrones: un patrón para posiciones largas y otro para posiciones cortas), y cada uno de estos asesores se presenta en cuatro ejemplares, de acuerdo con la cantidad de indicadores de confirmación.


Revisión de estrategias comerciales

Cada una de las estrategias comerciales usa dos patrones similares, pero diferentes en su dirección y nombre:

1. BlackCrows WhiteSoldiers


3 White Soldiers: El patrón de comprar "Tres soldados blancos" son 3 velas blancas consecutivas con un cuerpo de tamaño suficiente. Suponen una señal de una posible reversión de la tendencia bajista.

3 Black Crows: El patrón de venta "Tres cuervos negros" son 3 velas negras consecutivas con un cuerpo de tamaño suficiente. Suponen una señal de una posible reversión de la tendencia ascendente (alcista).

Basándose en los patrones de velas descritos anteriormente, el terminal ofrece cuatro asesores de entrenamiento:

  • BlackCrows WhiteSoldiers CCI.mq5 — asesor que opera con los patrones 3 White Soldiers y 3 Black Crows con confirmación de señales mediante el indicador CCI.
  • BlackCrows WhiteSoldiers MFI.mq5 — asesor que opera con los patrones 3 White Soldiers y 3 Black Crows con confirmación de señales mediante el indicador MFI.
  • BlackCrows WhiteSoldiers RSI.mq5 — asesor que opera con los patrones 3 White Soldiers y 3 Black Crows con confirmación de señales mediante el indicador RSI.
  • BlackCrows WhiteSoldiers Stoch.mq5 — asesor que opera con los patrones 3 White Soldiers y 3 Black Crows con confirmación de señales mediante el indicador Stochastic Oscillator.

2. BullishBearish Engulfing


Bullish Engulfing: El patrón de compra "envolvente alcista" se produce cuando, durante una tendencia bajista, una vela bajista es seguida por una vela alcista cuyo cuerpo envuelve completamente el cuerpo de la vela bajista. Dicho patrón supone una señal de una posible reversión de la tendencia bajista.

Bearish Engulfing: El patrón de venta "envolvente bajista" ocurre cuando, durante una tendencia alcista, una vela alcista es seguida por una vela bajista cuyo cuerpo envuelve completamente el cuerpo de la vela alcista. Dicho patrón supone una señal de una posible reversión de la tendencia ascendente (alcista).

Basándose en los patrones de velas descritos anteriormente, el terminal ofrece cuatro asesores de entrenamiento:

  • BullishBearish Engulfing CCI.mq5 — asesor que opera con patrones Bullish Engulfing y Bearish Engulfing con confirmación de señales mediante el indicador CCI.
  • BullishBearish Engulfing MFI.mq5 — asesor que opera con patrones Bullish Engulfing y Bearish Engulfing con confirmación de señales mediante el indicador MFI.
  • BullishBearish Engulfing RSI.mq5 — asesor que opera con patrones Bullish Engulfing y Bearish Engulfing con confirmación de señales mediante el indicador RSI.
  • BullishBearish Engulfing Stoch.mq5 — asesor que opera con patrones Bullish Engulfing y Bearish Engulfing con confirmación de señales mediante el indicador Stochastic Oscillator.


3. BullishBearish Harami


Bullish Harami: El patrón de compra "Harami alcista" se produce cuando una vela bajista larga es seguida por una vela alcista con su cuerpo completamente contenido dentro del cuerpo de la vela bajista en una tendencia bajista. Dicho patrón supone una señal de una posible reversión de la tendencia bajista.

Bearish Harami: El patrón de venta "Harami bajista" ocurre cuando una vela alcista larga es seguida por una vela bajista con su cuerpo completamente contenido dentro del cuerpo de la vela alcista durante una tendencia alcista. Dicho patrón supone una señal de una posible reversión de la tendencia ascendente (alcista).

Basándose en los patrones de velas descritos anteriormente, el terminal ofrece cuatro asesores de entrenamiento:

  • BullishBearish Harami CCI.mq5 — asesor que opera con patrones Bullish Harami y Bearish Harami con confirmación de señales mediante el indicador CCI.
  • BullishBearish Harami MFI.mq5 — asesor que opera con patrones Bullish Harami y Bearish Harami con confirmación de señales mediante el indicador MFI.
  • BullishBearish Harami RSI.mq5 — asesor que opera con patrones Bullish Harami y Bearish Harami con confirmación de señales mediante el indicador RSI.
  • BullishBearish Harami Stoch.mq5 — asesor que opera con patrones Bullish Harami y Bearish Harami con confirmación de señales mediante el indicador Stochastic Oscillator.


4. BullishBearish MeetingLines


Bullish Meeting Lines: El patrón de compra "velas de encuentro alcista" es una combinación de una vela bajista y una alcista que tienen precios de cierre iguales (o muy cercanos). La longitud de los cuerpos de ambas velas es mayor que el promedio.  Dicho patrón supone una señal de una posible reversión de la tendencia bajista.

Bearish Meeting Lines: El patrón de venta "velas de encuentro bajista" es una combinación de una vela alcista y una bajista que tienen precios de cierre iguales (o muy cercanos). La longitud de los cuerpos de ambas velas es mayor que el promedio. Dicho patrón supone una señal de una posible reversión de la tendencia ascendente (alcista).

Basándose en los patrones de velas descritos anteriormente, el terminal ofrece cuatro asesores de entrenamiento:

  • BullishBearish MeetingLines CCI.mq5 — asesor que opera con patrones Bullish Meeting Lines y Bearish Meeting Lines con confirmación de señales mediante el indicador CCI.
  • BullishBearish MeetingLines MFI.mq5 — asesor que opera con patrones Bullish Meeting Lines y Bearish Meeting Lines con confirmación de señales mediante el indicador MFI.
  • BullishBearish MeetingLines RSI.mq5 — asesor que opera con patrones Bullish Meeting Lines y Bearish Meeting Lines con confirmación de señales mediante el indicador RSI.
  • BullishBearish MeetingLines Stoch.mq5 — asesor que opera con patrones Bullish Meeting Lines y Bearish Meeting Lines con confirmación de señales mediante el indicador Stochastic Oscillator.


5. DarkCloud PiercingLine


Piercing Line: El patrón de compra "claro en las nubes" es una combinación de una vela bajista y una alcista. Es el análogo opuesto del patrón Dark Cloud Cover (cobertura de nubes negras).  Primero hay una vela negra grande, la siguiente tiene una apertura baja (por debajo del mínimo de la anterior) y un cierre por encima de la mitad de la primera vela.  Dicho patrón supone una señal de una posible reversión de la tendencia bajista.

Dark Cloud Cover: El patrón de venta "cobertura de nubes negras" es una combinación de una vela alcista y una bajista. Primero hay una vela blanca grande, la siguiente vela tiene un máximo de apertura (más alto que el máximo anterior) y un cierre por debajo de la mitad de la primera vela. Este es uno de los pocos casos en los que se considera el máximo y el mínimo. Dicho patrón supone una señal de una posible reversión de la tendencia ascendente (alcista).

Basándose en los patrones de velas descritos anteriormente, el terminal ofrece cuatro asesores de entrenamiento:

  • DarkCloud PiercingLine CCI.mq5 — asesor que opera con patrones PiercingLine y Dark Cloud Cover con confirmación de señales mediante el indicador CCI.
  • DarkCloud PiercingLine MFI.mq5 — asesor que opera con patrones PiercingLine y Dark Cloud Cover con confirmación de señales mediante el indicador MFI.
  • DarkCloud PiercingLine RSI.mq5 — asesor que opera con patrones PiercingLine y Dark Cloud Cover con confirmación de señales mediante el indicador RSI.
  • DarkCloud PiercingLine Stoch.mq5 — asesor que opera con patrones PiercingLine y Dark Cloud Cover con confirmación de señales mediante el indicador Stochastic Oscillator.


6. HangingMan Hammer


Hammer: El patrón de compra "Martillo" es una vela con un cuerpo pequeño y una sombra inferior larga que aparece después de una tendencia bajista. La aparición del "Martillo" supone una señal intensa de que la dominancia del mercado bajista está llegando a su fin.

Hanging Man: El patrón de venta "Ahorcado" es una vela con un cuerpo pequeño y una sombra inferior larga que aparece después de una tendencia alcista. La aparición del "Ahorcado" señala el final de la tendencia alcista.

Basándose en los patrones de velas descritos anteriormente, el terminal ofrece cuatro asesores de entrenamiento:

  • HangingMan Hammer CCI.mq5 — asesor que opera con patrones Hammer y Hanging Man con confirmación de señales mediante el indicador CCI.
  • HangingMan Hammer MFI.mq5 — asesor que opera con patrones Hammer y Hanging Man con confirmación de señales mediante el indicador MFI.
  • HangingMan Hammer RSI.mq5 — asesor que opera con patrones Hammer y Hanging Man con confirmación de señales mediante el indicador RSI.
  • HangingMan Hammer Stoch.mq5 — asesor que opera con patrones Hammer y Hanging Man con confirmación de señales mediante el indicador Stochastic Oscillator.


7. MorningEvening StarDoji 


Morning Star: El patrón de compra "estrella matutina" consta de tres velas y se produce durante una tendencia bajista:
1. A la vela negra larga le sigue una vela con un cuerpo pequeño (el color no importa) que no se cruza con el cuerpo de la vela negra.
2. El cuerpo pequeño de la segunda vela significa que el mercado ha pasado de una tendencia bajista a un equilibrio entre alcistas y bajistas.
3. La tercera vela de este patrón es una vela alcista cuyo cuerpo generalmente no se cruza con el cuerpo de la segunda vela, mientras que el nivel de cierre se encuentra dentro del cuerpo de la primera vela (bajista).
El patrón es una señal de una posible reversión de la tendencia bajista.

Morning Doji Star: El patrón de compra "estrella Doji matutina" es un caso especial del patrón "estrella matutina". En este caso, la segunda vela del patrón tiene los mismos precios de apertura y cierre, es decir, la segunda vela no tiene cuerpo. El patrón es una señal de una posible reversión de la tendencia bajista.

Evening Star: El patrón de venta "estrella vespertina" también consta de tres velas y se produce durante una tendencia ascendente:
1. A la vela blanca larga le sigue una vela con un cuerpo pequeño (el color no importa) que no se cruza con el cuerpo de la vela blanca.
2. El cuerpo pequeño de la segunda vela significa que el mercado ha pasado de una tendencia alcista a un equilibrio entre alcistas y bajistas.
3. La tercera vela de este patrón es una vela negra cuyo cuerpo generalmente no se cruza con el cuerpo de la segunda vela, mientras que el nivel de cierre se encuentra dentro del cuerpo de la primera vela (alcista).
El patrón es una señal de una posible reversión de la tendencia ascendente (alcista).

Evening Doji Star: El patrón de venta "estrella Doji vespertina" es un caso especial del patrón "estrella vespertina". En este caso, la segunda vela del patrón tiene los mismos precios de apertura y cierre, es decir, la segunda vela no tiene cuerpo. El patrón es una señal de una posible reversión de la tendencia bajista.

Basándose en los patrones de velas descritos anteriormente, el terminal ofrece cuatro asesores de entrenamiento:

  • MorningEvening StarDoji CCI.mq5 — asesor que opera con patrones Morning Star (Morning Doji Star) y Evening Star (Evening Doji Star) con confirmación de señales mediante el indicador CCI.
  • MorningEvening StarDoji MFI.mq5 — asesor que opera con patrones Morning Star (Morning Doji Star) y Evening Star (Evening Doji Star) con confirmación de señales mediante el indicador MFI.
  • MorningEvening StarDoji RSI.mq5 — asesor que opera con patrones Morning Star (Morning Doji Star) y Evening Star (Evening Doji Star) con confirmación de señales mediante el indicador RSI.
  • MorningEvening StarDoji Stoch.mq5 — asesor que opera con patrones Morning Star (Morning Doji Star) y Evening Star (Evening Doji Star) con confirmación de señales mediante el indicador Stochastic Oscillator.


Todos los indicadores usados en los asesores sirven para confirmar las entradas en una posición larga o corta (en presencia de las señales correspondientes de los patrones de velas) y para cerrar posiciones abiertas según las señales del indicador.

Las siguientes tablas muestran los valores de los indicadores utilizados para confirmar las entradas de las posiciones y el cierre de posiciones abiertas:

Indicador
Compra
Venta
 CCI
CCI (1)<-50 — el valor del indicador CCI en la última barra completada es menor que -50
CCI(1)>50 — el valor del indicador CCI en la última barra completada es mayor que 50
 IMF
MFI(1)<40 — el valor del indicador MFI en la última barra completada es menor que 40
MFI(1)>60 — el valor del indicador MFI en la última barra completada es mayor que 60
 RSI
RSI(1)<40: — el valor de la línea del indicador RSI en la última barra completada es menor que 40
RSI(1)>60: — el valor del indicador RSI en la última barra completada es mayor que 60
 Stochastic
Stochastic Signal(1)<30: — el valor de la línea de señal del indicador estocástico en la última barra completada es menor que 30
Stochastic Signal(1)>70 — el valor de la línea de señal del indicador estocástico en la última barra completada es mayor que 70

Las señales del indicador técnico para el cierre de posiciones se producen cuando el valor del indicador cruza el borde de la zona extrema, es decir, entra o sale de la zona de sobrecompra o sobreventa.

Indicador
Cierre de una posición larga
 Cierre de una posición corta
 CCI
El indicador CCI cruza el nivel 80 o el nivel -80 desde arriba hacia abajo
El indicador CCI cruza el nivel -80 o el nivel 80 desde abajo hacia arriba
 IMF
El indicador MFI cruza el nivel 70 o el nivel 30 desde arriba hacia abajo
El indicador MFI cruza el nivel 30 o el nivel 70 desde abajo hacia arriba
 RSI
El indicador RSI cruza el nivel 70 o el nivel 30 desde arriba hacia abajo
Cruce del indicador RSI del nivel 30 o nivel 70 desde abajo hacia arriba
 Stochastic
Cruce de la línea de señal del indicador Sthocastic del nivel 80 o el nivel 20 desde arriba hacia abajo
Cruce de la línea de señal del indicador estocástico del nivel 20 o el nivel 80 desde abajo hacia arriba

Un asesor independiente negocia con un par de patrones de velas en direcciones opuestas y se presenta en cuatro versiones de indicadores de confirmación.

Como resultado, tenemos 7 * 4 = 28 asesores diferentes, organizados según un esquema, idéntico para todos. Vamos a analizar la lógica unificada de todos los asesores utilizando esquemas de flujo.


Analizamos la lógica general

Si abre cualquiera de los asesores presentados en un editor de código y estudia su código, verá un esquema simple:


La lógica de los asesores se basa en banderas y variables declaradas a nivel global:

  • ExtSignalOpen — señal para abrir una posición. 1 — Buy, -1 — Sell, 0 — no hay señal,
  • ExtSignalClose — señal para el cierra de posición. 2 — long, -2 — short, 0 — sin señal,
  • ExtPatternInfo – descripción de texto del patrón encontrado actualmente,
  • ExtDirection — dirección de la posición a abrir. Descripción de texto,
  • ExtPatternDetected — bandera del patrón encontrado (true/false),
  • ExtConfirmed — bandera de la señal de patrón confirmada por el indicador (true/false),
  • ExtCloseByTime — indica que el cierre es requerido por el tiempo de mantenimiento de la posición (true/false),
  • ExtCheckPassed — bandera que indica si los datos se han recibido correctamente (true/false).
    Las banderas establecidas a nivel global son esencialmente semáforos para definir la lógica del comportamiento del asesor. Los valores se escriben en variables de texto para enviar información al diario de registro.
    La lógica del asesor es coherente y consta de un bloque de inicialización de banderas en el manejador OnInit() y cuatro etapas de funcionamiento en el manejador OnTick().
    • Etapa 1 — verificación de la aparición de una nueva barra y actualización del entorno y el estado de las banderas,
    • Etapa 2 — apertura de una posición,
    • Etapa 3 — cierre de la posición,
    • Etapa 4 — cierre de la posición una vez transcurrido su tiempo de mantenimiento.

    Vamos a analizar ahora la lógica de funcionamiento del asesor.

    Esquema de flujo de la lógica del asesor


    El esquema de flujo muestra las cuatro etapas de funcionamiento del asesor:

    Etapa 1:

    • Comprobamos la aparición de una nueva barra.
      Si es una barra nueva, comprobamos el estado actual:
      • Comprobamos las formaciones de velas para detectar la presencia de un patrón.
      • Si se halla un patrón, verificamos la confirmación de la señal del patrón utilizando el indicador.
      • Si se confirma la señal del patrón, imprimimos en el diario de registro la información sobre el patrón encontrado y establecemos los banderas para abrir una posición.

    Etapa 2:

    • Si hay una señal de apertura de posición y dicha posición no existe, imprimimos un mensaje sobre la señal para abrir una posición en el diario de registro y abrimos la posición.
    • Si la posición está abierta, restablecemos la bandera de apertura de posición.

    Etapa 3:

    • Si hay una señal para cerrar una posición y dicha posición existe, imprimimos un mensaje sobre la señal para cerrar una posición en el diario de registro y cerramos la posición.
    • Si no hay posición, restablecemos la bandera de cierre de posición.

    Etapa 4:

    • Si hay una señal para cerrar una posición después de que el tiempo de mantenimiento haya expirado y dicha posición existe, cerramos la posición con el tiempo de mantenimiento expirado.
    • Si no hay ninguna posición, restablecemos la bandera de cierre de posición una vez que haya expirado el tiempo de mantenimiento.


    Lista de funciones

    Veamos la lista de funciones del asesor y su descripción breve:

    CheckState() — verifica el estado del entorno:

    • Si no se encuentra el patrón, retorna false.
    • Si obtenemos un error al confirmar el patrón con el indicador, se retorna false.
    • Si el patrón no es confirmado por la señal del indicador, la bandera de apertura de posición se restablece.
    • Si el cierre se establece una vez que ha expirado el tiempo de mantenimiento de la posición, se establece la bandera correspondiente.

    PositionOpen() — apertura de una posición:

    • Se actualizan los datos del entorno comercial.
    • Dependiendo de la señal y, en consecuencia, del tipo de posición, los precios de colocación del StopLoss y el TakeProfit se ajustan a valores aceptables en relación con el precio de apertura y las restricciones del servidor.
    • Se abre una posición.
    • Si la posición no está abierta, se informa un error en el diario de registro y se retorna false.
    • Retorna true si se ha abierto correctamente.

    CloseBySignal() — cierre de una posición mediante señal:

    • Si no hay señal de cierre, se da el retorno desde la función.
    • El tipo de posición a cerrar está determinado por la dirección de la señal.
    • Se cierran todas las posiciones abiertas por el asesor con el tipo determinado por la dirección de la señal.

    CloseByTime() — cierre de posiciones con tiempo de mantenimiento expirado:

    • Si no hay posiciones abiertas por el asesor, se da el retorno desde la función.
    • Se cierran todas las posiciones abiertas por el asesor cuyo tiempo de mantenimiento haya expirado.

    PositionExist() — retorna la bandera de existencia de una posición en la dirección de la señal:

    • Se determina el tipo de posición correspondiente a la dirección de la señal.
    • Retorna la bandera de existencia de una posición abierta por un experto con un tipo determinado por la dirección de la señal.

    PositionExpiredByTimeExist() — retorna la bandera de existencia de una posición con tiempo de mantenimiento vencido:

    • Se determina el número de barras de vida útil de una posición.
    • Se retorna la bandera de existencia de la posición si su tiempo de mantenimiento es mayor que el número de barras especificadas en la configuración.

    BarsHold() — retorna la cantidad de barras de mantenimiento de la posición:

    • Se determina y retorna el número de barras entre la hora de apertura de la posición y la hora actual del servidor.

    Open(), Close(), Low(), High() — retorna el precio de la barra correspondiente según el índice:

    • Los precios correspondientes se solicitan en la barra indicada.
    • Si no se obtienen los precios, se establece una bandera de error.
    • Se retornan los precios obtenidos.

    MidPoint(), MidOpenClose(), AvgBody() — retornan los precios promedio calculados.

    CheckPattern() — verificación de la existencia de un patrón:

    • El algoritmo de búsqueda de patrones se ejecuta en la dirección Short.
    • Si se encuentra el patrón, se establece la bandera del patrón encontrado y se retorna true.
    • El algoritmo de búsqueda de patrones se ejecuta en la dirección Long.
    • Si se encuentra un patrón, se establece la bandera del patrón encontrado y se retorna true.
    • Si no se encuentran patrones, se retorna un bandera de error, que puede establecerse como false en las funciones de obtención de precios.

    CheckConfirmation() — verifica y establece la bandera de confirmación de la señal de patrón mediante la señal del indicador.

    CheckCloseSignal() — verifica las condiciones para la señal para cerrar posiciones en función de los valores de la bandera; si hay una señal, establece la bandera de cierre de posición.


    Conclusión

    Los 28 asesores ofrecidos para su consideración en la carpeta Experts\Free Robots funcionan según la misma lógica. La única diferencia entre ellos radica en los algoritmos de búsqueda de patrones de velas y en la obtención de los datos de los cuatro indicadores para confirmar las señales del patrón. En consecuencia, cualquiera de estos asesores puede usarse como plantilla para crear otros asesores basados en él, trabajar en otras formaciones de velas y obtener confirmaciones de patrones de otros indicadores. Lo único que hay que hacer para ello es cambiar la lógica de búsqueda de patrones en las direcciones Long y Short en la función CheckPattern() llamada desde la función CheckState(), a la que se accede en el primer paso del funcionamiento del asesor:

    //+------------------------------------------------------------------+
    //| Returns true in case of successful pattern check                 |
    //+------------------------------------------------------------------+
    bool CheckPattern()
      {
       ExtPatternDetected=false;
    //--- check if there is a pattern
       ExtSignalOpen=SIGNAL_NOT;
       ExtPatternInfo="\r\nPattern not detected";
       ExtDirection="";
    
    //--- check 3 Black Crows
       if((Open(3)-Close(3)>AvgBody(1)) && // long black
          (Open(2)-Close(2)>AvgBody(1)) &&
          (Open(1)-Close(1)>AvgBody(1)) &&
          (MidPoint(2)<MidPoint(3))     && // lower midpoints
          (MidPoint(1)<MidPoint(2)))
         {
          ExtPatternDetected=true;
          ExtSignalOpen=SIGNAL_SELL;
          ExtPatternInfo="\r\n3 Black Crows detected";
          ExtDirection="Sell";
          return(true);
         }
    
    //--- check 3 White Soldiers
       if((Close(3)-Open(3)>AvgBody(1)) && // long white
          (Close(2)-Open(2)>AvgBody(1)) &&
          (Close(1)-Open(1)>AvgBody(1)) &&
          (MidPoint(2)>MidPoint(3))     && // higher midpoints
          (MidPoint(1)>MidPoint(2)))
         {
          ExtPatternDetected=true;
          ExtSignalOpen=SIGNAL_BUY;
          ExtPatternInfo="\r\n3 White Soldiers detected";
          ExtDirection="Buy";
          return(true);
         }
    
    //--- result of checking
       return(ExtCheckPassed);
      }

    Para reemplazar el indicador de confirmación, debemos introducir las propiedades del indicador requeridas en los parámetros de entrada en lugar de las especificadas, por ejemplo, para CCI :

    //--- Input parameters
    input int  InpAverBodyPeriod=12;    // period for calculating average candlestick size
    input int  InpPeriodCCI     =37;    // CCI period
    input ENUM_APPLIED_PRICE InpPrice=PRICE_CLOSE; // price type

    En el manejador OnInit() , reemplazamos el bloque de creación, por ejemplo, CCI, con la creación de otro indicador:

    //+------------------------------------------------------------------+
    //| Expert initialization function                                   |
    //+------------------------------------------------------------------+
    int OnInit()
      {
       Print("InpSL=", InpSL);
       Print("InpTP=", InpTP);
    //--- set parameters for trading operations
       ExtTrade.SetDeviationInPoints(InpSlippage);    // slippage
       ExtTrade.SetExpertMagicNumber(InpMagicNumber); // Expert Advisor ID
       ExtTrade.LogLevel(LOG_LEVEL_ERRORS);           // logging level
    
       ExtAvgBodyPeriod=InpAverBodyPeriod;
    //--- indicator initialization
       ExtIndicatorHandle=iCCI(_Symbol, _Period, InpPeriodCCI, InpPrice);
       if(ExtIndicatorHandle==INVALID_HANDLE)
         {
          Print("Error creating CCI indicator");
          return(INIT_FAILED);
         }
    //--- OK
       return(INIT_SUCCEEDED);
      }

    Y luego en el asesor, en la función de confirmación de la señal del patrón CheckConfirmation() y en la función de cierre de posición según señales del indicador CheckCloseSignal(), utilizamos los datos del nuevo indicador con los valores requeridos para confirmar las direcciones Long y Short de los patrones :

    //+------------------------------------------------------------------+
    //| Returns true in case of successful confirmation check            |
    //+------------------------------------------------------------------+
    bool CheckConfirmation()
      {
       ExtConfirmed=false;
    //--- if there is no pattern, do not search for confirmation
       if(!ExtPatternDetected)
          return(true);
    
    //--- get the value of the stochastic indicator to confirm the signal
       double signal=CCI(1);
       if(signal==EMPTY_VALUE)
         {
          //--- failed to get indicator value, check failed
          return(false);
         }
    
    //--- check the Buy signal
       if(ExtSignalOpen==SIGNAL_BUY && (signal<-50))
         {
          ExtConfirmed=true;
          ExtPatternInfo+="\r\n   Confirmed: CCI<-50";
         }
    
    //--- check the Sell signal
       if(ExtSignalOpen==SIGNAL_SELL && (signal>50))
         {
          ExtConfirmed=true;
          ExtPatternInfo+="\r\n   Confirmed: CCI>50";
         }
    
    //--- successful completion of the check
       return(true);
      }
    


    //+------------------------------------------------------------------+
    //| Check if there is a signal to close                              |
    //+------------------------------------------------------------------+
    bool CheckCloseSignal()
      {
       ExtSignalClose=false;
    //--- if there is a signal to enter the market, do not check the signal to close
       if(ExtSignalOpen!=SIGNAL_NOT)
          return(true);
    
    //--- check if there is a signal to close a long position
       if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
         {
          //--- there is a signal to close a long position
          ExtSignalClose=CLOSE_LONG;
          ExtDirection="Long";
         }
    
    //--- check if there is a signal to close a short position
       if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)>80) && (CCI(2)<80)))
         {
          //--- there is a signal to close a short position
          ExtSignalClose=CLOSE_SHORT;
          ExtDirection="Short";
         }
    
    //--- successful completion of the check
       return(true);
      }

    Por consiguiente, vemos que estos asesores suponen una buena plantilla para crear y probar nuestros propios algoritmos para verificar varias formaciones de velas con confirmación de casi cualquier indicador adecuado.

    Traducción del ruso hecha por MetaQuotes Ltd.
    Artículo original: https://www.mql5.com/ru/articles/15479

    Artyom Trishkin
    Artyom Trishkin | 21 ago 2024 en 14:14
    Ivan Titov #:

    Comparado, de ahí la pregunta:

    Yo no hice estos códigos. Es por eso que escribí: Si usted nota una discrepancia, sólo tiene que añadir en su código.
    Ivan Titov
    Ivan Titov | 21 ago 2024 en 14:17
    Artyom Trishkin #:
    Yo no hice estos códigos. Es por eso que escribí: Si usted nota cualquier inconsistencia, sólo tiene que añadir en su código.

    Entiendo que esto es parte de la actualización de MT5. Lo añadiré a mi código - será borrado durante la próxima actualización de la terminal.

    Artyom Trishkin
    Artyom Trishkin | 21 ago 2024 en 14:21
    Ivan Titov #:

    Entiendo que esto es parte de la actualización de MT5. Voy a añadir por mí mismo - se borrará durante la próxima actualización de la terminal.

    ¿Qué le impide copiar el Asesor Experto a una carpeta separada y cambiar todo allí como usted necesita?

    Son de entrenamiento, sólo ejemplos.

    Ivan Titov
    Ivan Titov | 21 ago 2024 en 14:24
    Artyom Trishkin #:
    Son tutoriales, sólo ejemplos.

    Aprendemos de los errores... a cometer errores ;)

    Rashid Umarov
    Rashid Umarov | 16 sept 2024 en 11:43
    Ivan Titov #:
    comprobar Piercing Line

    Tienes razón - las condiciones no están escritas simétricamente. He comprobado la fuente original (el libro "Strategies of the World's Best Traders") - dice lo mismo.

    Por lo tanto, no es nuestro error, pero es necesario hacer correcciones. Voy a mirar en otras fuentes, ya que está escrito allí. Parece que el autor se olvidó de añadir una condición


    Obtenga una ventaja sobre cualquier mercado (Parte III): Índice de gasto de Visa Obtenga una ventaja sobre cualquier mercado (Parte III): Índice de gasto de Visa
    En el mundo de los macrodatos, hay millones de conjuntos de datos alternativos que pueden mejorar nuestras estrategias de negociación. En esta serie de artículos le ayudaremos a identificar los conjuntos de datos públicos más informativos.
    Características del Wizard MQL5 que debe conocer (Parte 33): Núcleos de procesos gaussianos Características del Wizard MQL5 que debe conocer (Parte 33): Núcleos de procesos gaussianos
    Los núcleos del proceso gaussiano son la función de covarianza de la distribución normal que podría desempeñar un papel en el pronóstico. Exploramos este algoritmo único en una clase de señal personalizada de MQL5 para ver si podría usarse como una señal de entrada y salida principal.
    Redes neuronales en el trading: Modelos del espacio de estados Redes neuronales en el trading: Modelos del espacio de estados
    Una gran cantidad de los modelos que hemos revisado hasta ahora se basan en la arquitectura del Transformer. No obstante, pueden resultar ineficientes al trabajar con secuencias largas. En este artículo le propongo familiarizarse con una rama alternativa de pronóstico de series temporales basada en modelos del espacio de estados.
    Algoritmo de colmena artificial — Artificial Bee Hive Algorithm (ABHA): Pruebas y resultados Algoritmo de colmena artificial — Artificial Bee Hive Algorithm (ABHA): Pruebas y resultados
    En este artículo, continuaremos analizando el algoritmo de colmena artificial ABHA profundizando en la codificación y observando los métodos restantes. Recordemos que cada abeja en el modelo está representada como un agente individual cuyo comportamiento dependerá de información interna y externa, así como del estado motivacional. Probaremos el algoritmo con varias funciones y resumiremos los resultados presentándolos en una tabla de calificación.