English Русский 中文 Deutsch 日本語 Português 한국어 Français Italiano Türkçe
preview
Aprendiendo a diseñar un sistema de trading con Alligator

Aprendiendo a diseñar un sistema de trading con Alligator

MetaTrader 5Trading | 20 enero 2023, 15:41
925 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Bienvenidos a un nuevo artículo de la serie dedicada a la creación de sistemas comerciales basados en indicadores técnicos populares. En esta parte hablaremos del indicador Alligator: aprenderemos qué es, qué mide, cómo calcularlo, cómo interpretarlo y cómo utilizarlo. A continuación, crearemos un sistema comercial basado en estrategias sencillas para ver cómo funciona el indicador en la práctica. Una vez más, el trabajo sobre el indicador se dividirá en varios temas:

  1. Definición del indicador Alligator
  2. Estrategias con el indicador Alligator
  3. Esquemas de estrategias con el indicador Alligator
  4. Sistema comercial con Alligator
  5. Conclusión

Recomendamos a todos los lectores que repitan todo comentado aquí y que escriban ellos mismos todos los códigos: es una práctica que desarrollará sus habilidades, además de mejorar su comprensión del tema. En este artículo, utilizaremos MetaTrader 5 y el MetaEditor incorporado para escribir el código MQL5. Si no sabe cómo descargar o usar MetaTrader 5, lea la sección "Escribiendo el código MQL5 en el MetaEditor" en uno de los artículos anteriores: allí se describe todo con detalle.

¡Atención! Toda la información del presente artículo se ofrece «tal cual», únicamente con fines ilustrativos, y no supone ningún tipo de recomendación. El artículo no garantiza ningún resultado en absoluto. Todo lo que ponga en práctica usando este artículo como base, lo hará bajo su propia cuenta y riesgo; el autor no garantiza resultado alguno.

Definición del indicador Alligator

Alligator es un indicador técnico de seguimiento de tendencias creado por Bill Williams. El indicador se basa en la idea de que una tendencia no existe durante toda la vida de un instrumento financiero, sino solo entre el 15 y el 30% del tiempo, y que la mayor parte del tiempo, entre el 85% y el 70%, el precio del instrumento se mueve de forma lateral. Como resulta, a veces tenemos una tendencia alcista, a veces una tendencia bajista, pero la mayor parte del tiempo el movimiento es simplemente plano. En artículos anteriores, hemos hablado muchas veces sobre las tendencias. Por ejemplo, podemos leer una descripción detallada de las tendencias, sus tipos y cómo identificarlas en un artículo anterior que le resultará especialmente útil en el contexto actual. El indicador usa en sus cálculos los números de Fibonacci y es una combinación de tres medias móviles SMA suavizadas con periodos 5, 8 y 13. Estas tres medias suavizadas conforman los componentes del indicador Alligator:

  • Las mandíbulas del caimán
  • Los dientes del caimán
  • Los labios del caimán

Las líneas indicadoras se calculan usando las siguientes fórmulas:

Mandíbulas del caimán = SMMA (precio medio, 13, 8)

Dientes del caimán = SMA (precio medio, 8, 5)

Labios del caimán = SMMA (precio medio, 5, 3)

Precio medio = (máximo + mínimo)/2

donde:

SMMA - media móvil suavizada

Median Price — precio mediano del instrumento

High — precio máximo

Low — precio mínimo

Este ha sido el cálculo de las líneas indicadoras. Sin embargo, en realidad no necesitaremos calcular el indicador manualmente, puesto que ya existe un indicador listo para usar en el terminal comercial MetaTrader 5, y todo lo que deberemos hacer es seleccionarlo de la lista.

Abra MetaTrader 5, elija el menú "Insertar" --> Indicadores --> Bill Williams --> Alligator.

 Iniciamos el indicador Alligator integrado en el gráfico

Se abrirá una ventana con los parámetros del indicador:

 Parámetros del indicador Alligator estándar

1 - periodo de cálculo de la línea de la mandíbula

2 - desplazamiento horizontal de las mandíbulas

3 - periodo de cálculo de la línea de los dientes

4 - desplazamiento horizontal de los dientes

5 - periodo de cálculo de la línea de los labios

6 - desplazamiento de los labios en horizontal

7 - método de suavizado

8 - precio utilizado para los cálculos.

En la siguiente ventana podrá ajustar el estilo del indicador:

 Ventana de parámetros del indicador Alligator

1 - color de la línea de la mandíbula

2 - tipo de la línea de la mandíbula

3 - grosor de la línea de la mandíbula

4 - color de la línea de los dientes

5 - tipo de línea de los dientes

6 - grosor de la línea de los dientes

7 - color de la línea de los labios

8 - tipo de línea de los labios

9 - grosor de la línea de los labios

Seleccionamos los parámetros necesarios del indicador, presionamos el botón OK y el indicador se iniciará en el gráfico como mostramos a continuación:

 Indicador Alligator en el gráfico

En la captura de pantalla anterior, podemos ver que el indicador se ha iniciado, y que aparecen tres líneas en el gráfico:

1 - línea de los labios del caimán

2 - línea de los dientes del caimán

3 - línea de la mandíbula del caimán

El indicador puede leerse analizando la posición de las líneas en relación con el precio. Si el precio está por encima de las líneas de los labios, los dientes y las mandíbulas del caimán, podremos hablar de una tendencia alcista. Si el precio está por debajo de estas líneas, podremos decir que la tendencia es bajista. Si el precio se mueve entre estas tres líneas, podremos decir que estamos en una tendencia lateral.

Estrategias con el indicador Alligator

Hay muchas formas diferentes de usar el indicador Alligator en el trading. En este artículo, analizaremos algunas estrategias sencillas, solo para ver cómo se puede utilizar el indicador. El propósito principal es estudiar el indicador, por lo que las estrategias no están destinadas a usarse en una cuenta real sin realizar las pruebas adecuadas. Además, puede que usted necesite optimizar dichas estrategias para encontrar el uso más adecuado.

    Estrategia uno: identificador de tendencias Alligator

      Esta estrategia generará señales de tendencia alcista o bajista según determinadas condiciones establecidas. Si el valor de los labios es superior a los dos valores de los dientes y las mandíbulas, y al mismo tiempo el valor de los dientes es superior al de las mandíbulas, será una señal alcista. Por el contrario, si el valor de los labios está por debajo de los valores de dientes y las mandíbulas, y al mismo tiempo el valor de los dientes está por debajo de las mandíbulas, se trataría de una señal bajista.

      Labios > Dientes, Labios > Mandíbulas y Dientes > Mandíbulas --> Señal alcista

      Labios < Dientes, Labios < Mandíbulas y Dientes < Mandíbulas --> Señal bajista

        Segunda estrategia: sistema de señales Alligator

          En esta estrategia, obtendremos señales de compra y venta basadas en el cruce de las líneas de los labios, los dientes y las mandíbulas. Si el valor de los labios es superior al de los dientes y las mandíbulas, tendremos una señal de compra. De lo contrario, si el valor de los labios está por debajo del valor de los dientes y las mandíbulas, tendremos una señal de venta.

          Labios > Dientes, Labios > Mandíbulas --> Compra

          Labios < Dientes, Labios < Mandíbulas --> Venta

            Estrategia tres: sistema de señales avanzado Alligator

              En esta estrategia, obtendremos señales de compra y venta basadas en el cruce de las líneas de los labios, los dientes y las mandíbulas, y en el cruce del precio de cierre y el valor de los dientes. Si la línea de los labios está por debajo de la línea de los dientes y las mandíbulas, y el precio de cierre está por encima de la línea de los dientes, tendremos una señal de compra. De lo contrario, si la línea de los labios está por encima de la línea de los dientes y las mandíbulas, y el precio de cierre está por debajo de la línea de los dientes, tendremos una señal de venta.

              Labios < Dientes, Labios < Mandíbulas y Precio de Cierre > Dientes --> Compra

              Labios > Dientes, Labios > Mandíbulas y Precio de cierre < Dientes --> Venta

              Esquemas de estrategias con el indicador Alligator

              Obviamente, podemos escribir sistemas comerciales usando como base estas estrategias, pero antes de hacerlo, crearemos varios esquemas paso a paso que resultarán muy útiles para desarrollarlas.

                Estrategia uno: identificador de tendencias Alligator

                  Con esta estrategia, crearemos un sistema comercial que podremos usar para generar señales de divergencia alcistas o bajistas. Para ello, el sistema comprobará los valores siguientes:

                  • El valor de Jaws
                  • El valor de Teeth
                  • El valor de Lips

                  El sistema comercial detectará la posición de estas líneas entre sí y generará una señal. Si la línea de los labios está por encima de la línea de los dientes, los labios están por encima de las mandíbulas y la línea de los dientes está por encima de la línea de las mandíbulas, el sistema comercial deberá devolver una señal en forma de comentario en el gráfico, así como los siguientes valores del indicador:

                  • La señal alcista
                  • Valor de Jaws = n
                  • Valor de Teeth = n
                  • Valor de Lips = n

                  En caso contrario, si la línea de los labios está por debajo de la línea de los dientes, los labios están por debajo de las mandíbulas y, al mismo tiempo, la línea de los dientes está por debajo de las mandíbulas, el sistema comercial debería devolver una señal bajista en forma de comentario en el gráfico, así como los siguientes valores del indicador:

                  • La señal bajista
                  • Valor de Jaws = n
                  • Valor de Teeth = n
                  • Valor de Lips = n

                  Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

                  Esquema de la estrategia Alligator Trend Identifier

                    Segunda estrategia: sistema de señales Alligator

                      Con esta estrategia, crearemos un sistema comercial que podrá utilizarse para generar señales de compra o venta. Para ello, el sistema comprobará constantemente los siguientes valores y determinará su posición relativa.

                      • El valor de los labios
                      • El valor de los dientes
                      • El valor de las mandíbulas

                      Si la línea de los labios está por encima de la línea de los dientes y la línea de los labios está por encima de la línea de las mandíbulas, el sistema comercial deberá devolver una señal de compra en forma de comentario en el gráfico, así como los siguientes valores del indicador:

                      • Compra
                      • Valor de Jaws = n
                      • Valor de Teeth = n
                      • Valor de Lips = n

                      En el caso contrario, si la línea de los labios está por debajo de la línea de los dientes y la línea de los labios está por debajo de la línea de las mandíbulas, el sistema comercial deberá devolver una señal de venta en forma de comentario en el gráfico, así como los siguientes valores del indicador:

                      • Venta
                      • Valor de Jaws = n
                      • Valor de Teeth = n
                      • Valor de Lips = n

                      Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

                      Esquema de la estrategia Alligator signals

                        Estrategia tres: sistema de señales avanzado Alligator

                          Con esta estrategia, crearemos un sistema comercial que podrá utilizarse para generar señales de compra o venta. Para ello, el sistema comprobará constantemente los siguientes valores y determinará su posición relativa.

                          • El valor de los labios
                          • El valor de los dientes
                          • El valor de las mandíbulas
                          • El precio de cierre

                          Si la línea de los labios está por debajo de la línea de los dientes, la línea de los labios está por debajo de la línea de las mandíbulas y el precio de cierre sube por encima de la línea de los dientes, el sistema comercial deberá devolver una señal en forma de comentario en el gráfico, así como los siguientes valores del indicador:

                          • Compra
                          • Valor de Lips = n
                          • Valor de Teeth = n
                          • Precio de cierre: n
                          • Valor de Jaws = n

                          Si la línea de los labios está por encima de la línea de los dientes, la línea de los labios está por encima de la línea de las mandíbulas y el precio de cierre cae por debajo de la línea de los dientes, el sistema comercial deberá devolver una señal de venta en forma de comentario en el gráfico, así como los siguientes valores del indicador:

                          • Venta
                          • Valor de Lips = n
                          • Valor de Teeth = n
                          • Precio de cierre: n
                          • Valor de Jaws = n

                          Este esquema paso a paso le ayudará a desarrollar un sistema comercial para esta estrategia:

                          Esquema de la estrategia Alligator Signals System Enhancement

                          Sistema comercial con Alligator

                          En esta parte, crearemos sistemas comerciales para cada una de las estrategias analizadas. Los sistemas se ejecutarán en MetaTrader 5 y generarán señales de forma automática. Empezaremos escribiendo un sistema comercial básico para generar una señal con los valores de los componentes de Alligator. Veamos cómo se escribe el código de una estrategia de este tipo paso a paso:

                          Primero crearemos arrays para cada uno de los componentes del caimán (labios, dientes, mandíbulas).

                             double jawsArray[];
                             double teethArray[];
                             double lipsArray[]; 
                          
                          

                          Luego, estableceremos la clasificación de los datos en el array usando la función ArraySetAsSeries: Parámetros de la función:

                          • array[]
                          • flag
                             ArraySetAsSeries(jawsArray,true);
                             ArraySetAsSeries(teethArray,true);
                             ArraySetAsSeries(lipsArray,true);
                          
                          

                          Después definiremos Alligator usando la función iAlligator. Parámetros de la función:

                          • symbol — nombre del símbolo; nosotros tenemos "_Symbol", es decir, calcularemos el indicador según el símbolo del gráfico actual.
                          • period — marco temporal para el cálculo; el valor "_Period" señalará que el indicador se calculará en el marco temporal actual.
                          • jaw_period — periodo medio para calcular la línea de las mandíbulas, utilizaremos 13.
                          • jaw_shift — establece el desplazamiento horizontal para la línea de las mandíbulas, aquí será 8.
                          • teeth_period — periodo medio para calcular la línea de los dientes, utilizaremos 8.
                          • teeth_shift — establece el desplazamiento horizontal para la línea de los dientes, usaremos 5.
                          • lips_period — periodo medio para calcular la línea de los labios, en nuestro caso, será 5.
                          • lips_shift — establece el desplazamiento horizontal para la línea de los labios, aquí será 3.
                          • ma_method — tipo de suavizado de la media móvil, MODE_SMA.
                          • applied_price — define el tipo de precio usado para el cálculo; utilizaremos el precio medio.
                          int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);

                          A continuación, definiremos los datos y guardaremos los resultados utilizando la función CopyBuffer. Parámetros de la función:

                          • indicator_handle — manejador del indicador, alligatorDef
                          • buffer_num — número del búfer de indicador, 0 - mandíbulas, 1 - dientes, 2 - labios.
                          • start_pos — indica la posición del inicio del cálculo; estableceremos 0
                          • count — cantidad de datos a copiar; indicaremos 3.
                          • buffer[] — define el array de precios a copiar, tendremos jawsArray, teethArray, lipsArray.
                             CopyBuffer(alligatorDef,0,0,3,jawsArray);
                             CopyBuffer(alligatorDef,1,0,3,teethArray);
                             CopyBuffer(alligatorDef,2,0,3,lipsArray);
                          
                          

                          Luego obtendremos los valores de los tres componentes

                             double jawsValue=NormalizeDouble(jawsArray[0],5);
                             double teethValue=NormalizeDouble(teethArray[0],5);
                             double lipsValue=NormalizeDouble(lipsArray[0],5);
                          
                          

                          e imprimiremos un comentario con los valores resultantes de los componentes del indicador.

                             Comment("jawsValue = ",jawsValue,"\n",
                             "teethValue = ",teethValue,"\n",
                             "lipsValue = ",lipsValue);
                          
                          

                          El código completo de un sistema comercial de este tipo será como sigue:

                          //+------------------------------------------------------------------+
                          //|                                      Simple Alligator System.mq5 |
                          //|                                  Copyright 2022, MetaQuotes Ltd. |
                          //|                                             https://www.mql5.com |
                          //+------------------------------------------------------------------+
                          #property copyright "Copyright 2022, MetaQuotes Ltd."
                          #property link      "https://www.mql5.com"
                          #property version   "1.00"
                          //--------------------------------------------------------------------
                          void OnTick()
                            {
                             //creating price array
                             double jawsArray[];
                             double teethArray[];
                             double lipsArray[];   
                             //Sorting data
                             ArraySetAsSeries(jawsArray,true);
                             ArraySetAsSeries(teethArray,true);
                             ArraySetAsSeries(lipsArray,true);
                             //define Alligator
                             int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);      
                             //define data and store result
                             CopyBuffer(alligatorDef,0,0,3,jawsArray);
                             CopyBuffer(alligatorDef,1,0,3,teethArray);
                             CopyBuffer(alligatorDef,2,0,3,lipsArray);
                             //Getting value of current data
                             double jawsValue=NormalizeDouble(jawsArray[0],5);
                             double teethValue=NormalizeDouble(teethArray[0],5);
                             double lipsValue=NormalizeDouble(lipsArray[0],5);
                             //comment on the chart
                             Comment("jawsValue = ",jawsValue,"\n",
                             "teethValue = ",teethValue,"\n",
                             "lipsValue = ",lipsValue);
                            }
                          //+------------------------------------------------------------------+
                          
                          

                          Después compilaremos el código del asesor experto, y este aparecerá en la ventana del Navegador, en el terminal MetaTrader 5:

                          Asesor Simple Alligator System en el navegador

                          Clicamos dos veces en el archivo o lo arrastramos y soltamos en el gráfico. Después de eso, aparecerá la ventana del asesor:

                          Ventana del asesor Simple Alligator System

                          Permitimos el comercio automático "Allow Algo Trading", pulsamos OK y el programa se iniciará en el gráfico:

                          Asesor Simple Alligator System en el gráfico

                          En la esquina superior derecha del gráfico, se mostrará una indicación de que el asesor se está ejecutando. Ahora estamos listos para recibir las señales generadas por el asesor. A continuación se muestra un ejemplo de una señal de este tipo obtenida durante las pruebas:

                           Señal del asesor Simple Alligator System

                          En el gráfico anterior, se muestra un comentario con los siguientes valores en la esquina superior izquierda del gráfico:

                          Valor de Jaws = n

                          Valor de Teeth = n

                          Valor de Lips = n

                            Estrategia uno: identificador de tendencias Alligator

                              Vamos a crear un sistema comercial basado en esta estrategia. A continuación, le mostraremos el código completo de este sistema:

                              //+------------------------------------------------------------------+
                              //|                                   Alligator Trend Identifier.mq5 |
                              //|                                  Copyright 2022, MetaQuotes Ltd. |
                              //|                                             https://www.mql5.com |
                              //+------------------------------------------------------------------+
                              #property copyright "Copyright 2022, MetaQuotes Ltd."
                              #property link      "https://www.mql5.com"
                              #property version   "1.00"
                              //+------------------------------------------------------------------+
                              void OnTick()
                                {
                              //creating three arrays of Alligator components
                                 double jawsArray[];
                                 double teethArray[];
                                 double lipsArray[];
                              //Sorting data
                                 ArraySetAsSeries(jawsArray,true);
                                 ArraySetAsSeries(teethArray,true);
                                 ArraySetAsSeries(lipsArray,true);
                              //define Alligator
                                 int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                              //define data and store result
                                 CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                 CopyBuffer(alligatorDef,1,0,13,teethArray);
                                 CopyBuffer(alligatorDef,2,0,13,lipsArray);
                              //Getting value of current data
                                 double jawsValue=NormalizeDouble(jawsArray[0],5);
                                 double teethValue=NormalizeDouble(teethArray[0],5);
                                 double lipsValue=NormalizeDouble(lipsArray[0],5);
                              //conditions of strategy
                                 if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
                                   {
                                    Comment("Bullish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                                 if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
                                   {
                                    Comment("Bearish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                                }
                              //+------------------------------------------------------------------+
                              
                              

                              Diferencias en este código.

                              Condiciones de la estrategia para generar una señal alcista:

                                 if(lipsValue>teethValue && lipsValue>jawsValue && teethValue>jawsValue)
                                   {
                                    Comment("Bullish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                              
                              

                              En caso de una señal bajista:

                                 if(lipsValue<teethValue && lipsValue<jawsValue && teethValue<jawsValue)
                                   {
                                    Comment("Bearish","\n",
                                            "jawsValue = ",jawsValue,"\n",
                                            "teethValue = ",teethValue,"\n",
                                            "lipsValue = ",lipsValue);
                                   }
                              
                              

                              A continuación, compilaremos el código, buscaremos el archivo resultante en el Navegador del terminal y ejecutaremos el asesor en el gráfico del símbolo comercial:

                              Asesor Alligator Trend Identifier en el gráfico

                              Como podemos ver en el gráfico de arriba, tenemos un asesor ejecutándose en el gráfico: se muestra una indicación en la esquina superior derecha. Ahora podremos obtener señales alcistas o bajistas basándonos en esta estrategia. Más abajo podemos ver ejemplos de este tipo de señales.

                              Un ejemplo de señal alcista:

                              Alligator Trend Identifier - señal alcista

                              En el gráfico anterior, se muestra un comentario con los siguientes valores en la esquina superior izquierda del gráfico:

                              • La señal alcista
                              • Valor de Jaws = n
                              • Valor de Teeth = n
                              • Valor de Lips = n 
                              Las tres líneas están por debajo del precio, por lo que se ha formado una señal alcista.

                              En caso de una señal bajista:

                               Alligator Trend Identifier - señal bajista

                              En el gráfico anterior, en la esquina superior izquierda del gráfico, se muestra un comentario con una señal bajista y los siguientes valores:

                              • La señal bajista
                              • Valor de Jaws = n
                              • Valor de Teeth = n
                              • Valor de Lips = n

                              Tres líneas están por encima del precio, por lo que se ha formado una señal bajista.

                                Segunda estrategia: sistema de señales Alligator

                                  El código completo del sistema comercial que opera según esta estrategia tendrá el aspecto siguiente:

                                  //+------------------------------------------------------------------+
                                  //|                                    Alligator Signals System .mq5 |
                                  //|                                  Copyright 2022, MetaQuotes Ltd. |
                                  //|                                             https://www.mql5.com |
                                  //+------------------------------------------------------------------+
                                  #property copyright "Copyright 2022, MetaQuotes Ltd."
                                  #property link      "https://www.mql5.com"
                                  #property version   "1.00"
                                  //+------------------------------------------------------------------+
                                  void OnTick()
                                    {
                                  //creating three arrays of Alligator components
                                     double jawsArray[];
                                     double teethArray[];
                                     double lipsArray[];
                                  //Sorting data
                                     ArraySetAsSeries(jawsArray,true);
                                     ArraySetAsSeries(teethArray,true);
                                     ArraySetAsSeries(lipsArray,true);
                                  //define Alligator
                                     int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                  //define data and store result
                                     CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                     CopyBuffer(alligatorDef,1,0,13,teethArray);
                                     CopyBuffer(alligatorDef,2,0,13,lipsArray);
                                  //Getting value of current data
                                     double jawsValue=NormalizeDouble(jawsArray[0],5);
                                     double teethValue=NormalizeDouble(teethArray[0],5);
                                     double lipsValue=NormalizeDouble(lipsArray[0],5);
                                  //conditions of strategy
                                     if(lipsValue>teethValue && lipsValue>jawsValue)
                                       {
                                        Comment("Buy","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                     if(lipsValue<teethValue && lipsValue<jawsValue)
                                       {
                                        Comment("Sell","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                    }
                                  //+------------------------------------------------------------------+
                                  
                                  

                                  Diferencias en este código.

                                  Las condiciones de esta estrategia.

                                  Si hay una señal de compra:

                                     if(lipsValue>teethValue && lipsValue>jawsValue)
                                       {
                                        Comment("Buy","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                  
                                  

                                  Si hay una señal de venta:

                                     if(lipsValue<teethValue && lipsValue<jawsValue)
                                       {
                                        Comment("Sell","\n",
                                                "jawsValue = ",jawsValue,"\n",
                                                "teethValue = ",teethValue,"\n",
                                                "lipsValue = ",lipsValue);
                                       }
                                  
                                  

                                  Compilamos el código, buscamos el archivo del asesor resultante en el Navegador del terminal y ejecutamos el asesor en el gráfico del símbolo comercial:

                                  Asesor Alligator Signals System en el gráfico

                                  En la esquina superior derecha del gráfico, veremos una indicación de que el asesor está funcionando. El asesor está funcionando y puede generar señales de compra y venta. A continuación, veremos varios ejemplos de pruebas.

                                  Si hay una señal de compra:

                                  Asesor Alligator Signals System - señal de compra

                                   

                                  Como podemos ver, la señal deseada se forma con los siguientes valores:

                                  • Compra
                                  • Valor de Jaws = n
                                  • Valor de Teeth = n
                                  • Valor de Lips = n
                                  Las tres líneas están por debajo del precio, por lo que se ha formado una señal de compra.

                                  Si hay una señal de venta:

                                   Asesor Alligator Signals System - señal de venta

                                  Tenemos una señal con los siguientes valores:

                                  • Venta
                                  • Valor de Jaws = n
                                  • Valor de Teeth = n
                                  • Valor de Lips = n

                                  Las tres líneas están por encima del precio, por lo que se ha formado una señal de venta.

                                    Estrategia tres: sistema de señales avanzado Alligator

                                      El código completo del sistema comercial que opera según esta estrategia tendrá el aspecto siguiente:

                                      //+------------------------------------------------------------------+
                                      //|                         Alligator Signals System Enhancement.mq5 |
                                      //|                                  Copyright 2022, MetaQuotes Ltd. |
                                      //|                                             https://www.mql5.com |
                                      //+------------------------------------------------------------------+
                                      #property copyright "Copyright 2022, MetaQuotes Ltd."
                                      #property link      "https://www.mql5.com"
                                      #property version   "1.00"
                                      //+------------------------------------------------------------------+
                                      void OnTick()
                                        {
                                      //creating three arrays of Alligator components
                                         double jawsArray[];
                                         double teethArray[];
                                         double lipsArray[];
                                         MqlRates pArray[];
                                      //Sorting data
                                         ArraySetAsSeries(jawsArray,true);
                                         ArraySetAsSeries(teethArray,true);
                                         ArraySetAsSeries(lipsArray,true);
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                      //define Alligator
                                         int alligatorDef=iAlligator(_Symbol,_Period,13,8,8,5,5,3,MODE_SMMA,PRICE_MEDIAN);
                                      //define data and store result
                                         CopyBuffer(alligatorDef,0,0,13,jawsArray);
                                         CopyBuffer(alligatorDef,1,0,13,teethArray);
                                         CopyBuffer(alligatorDef,2,0,13,lipsArray);
                                      //Getting value of current data
                                         double jawsValue=NormalizeDouble(jawsArray[0],5);
                                         double teethValue=NormalizeDouble(teethArray[0],5);
                                         double lipsValue=NormalizeDouble(lipsArray[0],5);
                                      //conditions of strategy
                                         if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
                                           {
                                            Comment("Buy","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                         if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
                                           {
                                            Comment("Sell","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                        }
                                      //+------------------------------------------------------------------+
                                      
                                      

                                      Diferencias en este código.

                                      Ahora crearemos un array adicional para los precios utilizando la función MqlRates, que almacenará la información sobre el precio, el volumen y el spread.

                                      MqlRates pArray[];

                                      Luego recuperaremos los datos históricos de MqlRates utilizando la función CopyRates. Parámetros de la función:

                                      • symbol — nombre del símbolo; en nuestro caso, _Symbol
                                      • timeframe — periodo de tiempo a calcular (_period)
                                      • start_pos — indica la posición del inicio del cálculo; estableceremos 0
                                      • count — cantidad de datos para copiar; indicaremos 1
                                      • rates_array[] — array al que copiamos los datos, pArray
                                      int Data=CopyRates(_Symbol,_Period,0,1,pArray);

                                      Condiciones de la estrategia.

                                      Si hay una señal de compra:

                                         if(lipsValue<teethValue && lipsValue<jawsValue && pArray[0].close>teethValue)
                                           {
                                            Comment("Buy","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                      
                                      

                                      Si hay una señal de venta:

                                         if(lipsValue>teethValue && lipsValue>jawsValue && pArray[0].close<teethValue)
                                           {
                                            Comment("Sell","\n",
                                                    "jawsValue = ",jawsValue,"\n",
                                                    "teethValue = ",teethValue,"\n",
                                                    "closingPrice = ",pArray[0].close,"\n",
                                                    "lipsValue = ",lipsValue);
                                           }
                                      
                                      

                                      Después de compilar el código y ejecutar el programa, el asesor comenzará a funcionar en el gráfico, generando señales de compra y venta:

                                       Asesor Alligator Signals System Enhancement en el gráfico

                                      El icono en la esquina superior derecha del gráfico nos muestra que el indicador está en funcionamiento y puede generar señales. A continuación, le mostraremos varios ejemplos de este tipo de señales.

                                      Si hay una señal de compra:

                                       Asesor Alligator Signals System Enhancement - señal de compra

                                      En el gráfico anterior, se muestra un comentario con los siguientes valores en la esquina superior izquierda del gráfico:

                                      • Compra
                                      • Valor de Jaws = n
                                      • Valor de Teeth = n
                                      • Precio de cierre: n
                                      • Valor de Lips = n 
                                      Ya que las tres líneas están por encima de los precios y el precio de cierre ha resultado por encima de la línea de los dientes del caimán.

                                      Si hay una señal de venta:

                                       Asesor Alligator Signals System Enhancement - señal de venta

                                      En el gráfico anterior, hay un comentario en la esquina superior izquierda:

                                      • Venta
                                      • Valor de Jaws = n
                                      • Valor de Teeth = n
                                      • Precio de cierre: n
                                      • Valor de Lips = n

                                      Aquí, las tres líneas están por debajo de los precios y el precio de cierre ha resultado por debajo de la línea de los dientes del caimán.

                                      Conclusión

                                      En este artículo, hemos analizado el indicador técnico Alligator, que puede utilizarse para confirmar una tendencia. Asimismo, hemos descubierto cómo calcularlo manualmente. También hemos visto ejemplos de estrategias simples para ver cómo se puede utilizar este indicador. Las estrategias son las siguientes:

                                      • El identificador de tendencia Alligator, para generar señales alcistas o bajistas basadas en la posición de las tres líneas Alligator.
                                      • El sistema de señales Alligator, que genera señales de compra y venta basadas en el cruce de tres líneas indicadoras.
                                      • El sistema de señal Alligator avanzado, que genera señales de compra y venta basadas en el cruce de las tres líneas del indicador y la posición del precio de cierre en relación con el indicador. 

                                      Asimismo, hemos desarrollado esquemas paso a paso para cada estrategia analizada que nos serán útiles a la hora de escribir el código del sistema comercial. Además, hemos escrito asesores en MQL5 para cada estrategia, hemos obtenido programas que pueden funcionar en la plataforma comercial MetaTrader 5, y también hemos visto varios ejemplos de señales generadas para estas estrategias. Una vez más, resultará esencial que ponga a prueba cuidadosamente cualquier nuevo conocimiento antes de aplicarlo a su cuenta real: así se asegurará de que se adapte a su estilo y comprensión del comercio. Al fin y al cabo, lo que funciona para otros no tiene por qué funcionar para usted. Además, no olvides que el objetivo principal de las estrategias es ilustrativo.

                                      Esperamos que el lector escriba su propio código repitiendo todo lo que hemos hablado en este artículo. Este enfoque le permitirá desarrollar sus habilidades de programación de forma más eficaz y también podrá aportarle nuevas ideas. Si le ha gustado este artículo, o si lo ha encontrado útil, por favor, lea mis artículos anteriores de la misma serie donde aprendemos a desarrollar sistemas comerciales basados en indicadores técnicos populares. Ya hemos analizado Stochastic, RSI, Bollinger Bands, Moving Averages, Envelopes, MACD, ADX y otros indicadores.

                                      Traducción del inglés realizada por MetaQuotes Ltd.
                                      Artículo original: https://www.mql5.com/en/articles/11549

                                      DoEasy. Elementos de control (Parte 21): Elemento de control SplitContainer. Separador de paneles DoEasy. Elementos de control (Parte 21): Elemento de control SplitContainer. Separador de paneles
                                      En este artículo, crearemos una clase de objeto auxiliar de separador de paneles para el control SplitContainer.
                                      Aprendizaje automático y Data Science (Parte 07): Regresión polinomial Aprendizaje automático y Data Science (Parte 07): Regresión polinomial
                                      La regresión polinomial es un modelo flexible diseñado para resolver de forma eficiente problemas que un modelo de regresión lineal no puede gestionar. En este artículo, aprenderemos a crear modelos polinómicos en MQL5 y a sacar provecho de ellos.
                                      Cómo construir un EA que opere automáticamente (Parte 03): Nuevas funciones Cómo construir un EA que opere automáticamente (Parte 03): Nuevas funciones
                                      Aprenda a crear un EA que opere automáticamente de forma sencilla y segura. En el artículo anterior, comenzamos a desarrollar el sistema de órdenes que se va a utilizar en el EA automático. Sin embargo, solo construimos una de las funciones o procedimientos necesarios.
                                      DoEasy. Elementos de control (Parte 20): El objeto WinForms SplitContainer DoEasy. Elementos de control (Parte 20): El objeto WinForms SplitContainer
                                      Hoy comenzaremos a desarrollar el control SplitContainer del conjunto de elementos de MS Visual Studio. Este elemento constará de dos paneles separados por un divisor móvil vertical u horizontal.