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

Aprendiendo a diseñar un sistema de trading con Accelerator Oscillator

MetaTrader 5Trading | 10 enero 2023, 15:51
647 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 este artículo, nos familiarizaremos con otra herramienta técnica cuyo uso correcto mejorará nuestros resultados comerciales. Vamos a trabajar con el indicador Accelerator Oscillator (AC), estudiando con detalle qué es, qué mide y cómo calcularlo. Asimismo, usaremos estrategias sencillas para aprender a utilizar el indicador. También crearemos nuestros propios sistemas comerciales basados en las estrategias discutidas.

Los siguientes temas le ayudarán a analizar detalladamente este indicador:

  1. Definición del indicador Accelerator Oscillator
  2. Estrategias con el indicador Accelerator Oscillator
  3. Esquemas de estrategia con Accelerator Oscillator
  4. Sistemas comerciales basados en Accelerator Oscillator
  5. Conclusión

En este artículo escribiremos los códigos en el lenguaje incorporado MQL5 (MetaQuotes Language 5) y ejecutaremos las aplicaciones obtenidas en el terminal comercial MetaTrader 5. 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. Todas las estrategias de las que hablaremos aquí se presentan exclusivamente como material de aprendizaje. Si decide utilizarlas para otros fines, asegúrese de probarlas para comprobar que funcionan y resultan adecuadas para usted. Además, recomendamos a los lectores que pongan en práctica por sí mismos todo lo que vamos a discutir: así mejorarán sus habilidades comerciales y programáticas. En cualquier caso, la práctica siempre resulta útil.

¡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 Accelerator Oscillator

El Accelerator Oscillator (AC) es un indicador de impulso desarrollado por Bill Williams, y mide el cambio del impulso en el mercado. Una disminución del impulso en una tendencia alcista podría indicar que existe menos interés en comprar un instrumento financiero. Esto puede verse seguido por una inversión del impulso, después de lo cual la dirección del movimiento en sí se invierte hacia la venta. Por lo tanto, si el impulso disminuye en una tendencia bajista, esto podría indicar una disminución del interés por la venta del instrumento financiero, que podría ir seguida de un aumento de la fuerza de los compradores. Hablamos de un indicador adelantado, porque cambia antes de que cambie el precio.

Así pues, el principal objetivo de este indicador consiste en medir la aceleración y desaceleración de la fuerza del mercado en ambas direcciones (alcista o bajista). Esto nos dará una idea de cuánto durará el movimiento actual de los precios y nos permitirá estar preparado para cualquier cambio.

A continuación, le mostramos la fórmula de cálculo del indicador, que nos permitirá calcular el valor manualmente:

AC = AO - SMA (AO, 5)

donde:

AC — Accelerator Oscillator.

AO — indicador Awesome Oscillator, del que hablamos en el artículo anterior.

SMA — media móvil simple.

5 — periodo de SMA.

El indicador AO de esta fórmula se calcula del siguiente modo:

MEDIAN PRICE = (HIGH + LOW) / 2 

AO = SMA (MEDIAN PRICE, 5) - SMA (MEDIAN PRICE, 34)

No obstante, ahora no necesitaremos calcular el indicador manualmente, ya que existe un indicador listo para usar en el terminal comercial MetaTrader 5. Todo lo que deberemos hacer es seleccionarlo de la lista con otros indicadores disponibles. Abra el terminal, seleccione el menú Insertar --> Indicadores --> Bill Williams --> Accelerator Oscillator

 Iniciando el indicador AC incorporado

Se abrirá una ventana con los parámetros del indicador, en la que podremos establecer los ajustes deseados. La ventana tendrá el aspecto siguiente:

 Parámetros del indicador AC

1 — color para los indicadores ascendentes

2 — grosor del histograma del indicador

3 — color para los indicadores descendentes

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 AC en el gráfico

Como podemos ver en el gráfico anterior, ha aparecido una ventana adicional del indicador en la parte inferior, en la que los valores de AC oscilan en torno a cero, mostrando el impulso actual.

El nivel cero indicará el equilibrio entre el movimiento alcista y bajista en el mercado. Si el histograma de AC está por encima de cero, podemos esperar un movimiento alcista y viceversa, si el histograma de AC está por debajo de cero, podemos esperar una continuación del movimiento bajista.


Estrategias con el indicador Accelerator Oscillator

En esta parte, analizaremos algunas estrategias sencillas basadas en el indicador Accelerator Oscillator. No olvide que antes de usar cualquier estrategia en su cuenta real, deberá ponerla a prueba. De esta forma, podrá determinar si esta estrategia comercial funciona y resulta adecuada para usted.

    Estrategia uno: cruce de AC y el nivel cero

      Según esta estrategia, el indicador AC se usa para producir una señal alcista o bajista basada en la comparación de dos valores: el indicador AC actual y su posición en relación con el nivel cero. Si el valor actual de AC está por encima del nivel cero, esto indicará un sentimiento alcista en el mercado. En caso contrario, si el valor actual de AC es inferior a cero, se tratará de una señal bajista.

      Esquemáticamente, podemos decir que:

      AC > Nivel cero --> Señal alcista

      AC < Nivel cero --> Señal bajista

        Estrategia dos: Fuerza de AC

          Según esta estrategia, obtendremos una señal sobre la fuerza del movimiento del indicador Accelerator Oscillator comparando el valor actual de AC con los valores máximo y mínimo de los diez indicadores anteriores. Así, se generará una señal basada en la posición de estos valores entre sí. Si el valor actual de AC es superior al valor máximo, se tratará de una señal de fuerza. En el caso contrario, si el valor actual de AC está por debajo del mínimo de las últimas 10 indicadores, se tratará de una señal de movimiento débil.

          Esquemáticamente, podemos decir que:

          AC > AC máximo --> indicador de AC fuerte

          AC < AC mínimo --> indicador de AC débil

            Estrategia tres: AC y MA

              En esta estrategia, obtendremos una señal de compra o venta basada en el análisis de cinco valores: el precio de cierre, una media móvil exponencial de 50 periodos, el valor actual del indicador AC, y los valores máximo y mínimo de los diez indicadores anteriores. Así, se generará una señal basada en la posición de estos valores entre sí. Si el AC actual está por encima del valor máximo y el precio de cierre está por encima de la EMA de 50 periodos, tendremos una señal de compra. En el escenario opuesto, si el AC actual está por debajo del valor mínimo y el precio de cierre está por debajo de la EMA de 50 periodos, tendremos una señal de compra.

              De forma esquemática:

              AC > AC Máximo y Precio de Cierre > EMA de 50 periodos --> Compra

              AC < AC Mínimo y Precio de Cierre < EMA de 50 periodos --> Venta 

              Esquemas de estrategia con Accelerator Oscillator

              A continuación, desarrollaremos esquemas paso a paso para cada una de las estrategias analizadas; esto nos ayudará a desarrollar sistemas comerciales basados en ellas.

                Estrategia uno: cruce de AC y el nivel cero

                  Como parte de esta estrategia, crearemos un sistema comercial que generará y mostrará automáticamente señales alcistas o bajistas en el gráfico, comparando constantemente dos valores: el AC actual y el nivel cero del indicador. Partiendo de las posiciones de estos valores en relación con los demás, se sacará una conclusión sobre la situación del mercado. Si el valor AC es superior a cero, el sistema comercial mostrará una señal en forma de comentario en el gráfico con los siguientes valores:

                  • Alcista
                  • El valor de AC

                  Si el valor del indicador AC es inferior a cero, el sistema comercial mostrará un comentario en el gráfico con una señal bajista y el valor del indicador:

                  • Bajista
                  • El valor de AC

                  Esquema paso a paso para desarrollar un sistema comercial utilizando esta estrategia:

                   Esquema de desarrollo de la estrategia AC Zero Crossover

                    Estrategia dos: Fuerza de AC

                      Como parte de esta estrategia, crearemos un sistema comercial que generará señales sobre la fuerza del movimiento de AC comparando constantemente tres valores: el valor actual de AC, y también el máximo y el mínimo del indicador entre los diez valores anteriores. Luego compararemos los dos valores y determinaremos su posición en relación con el otro. Si el valor actual de AC es superior al máximo de los diez indicadores, el comentario en el gráfico señalará un movimiento fuerte y los siguientes valores adicionales:

                      • El indicador AC fuerte
                      • El valor de AC
                      • El AC máximo
                      • El AC mínimo

                      Si el valor del indicador AC está por debajo del valor mínimo, el sistema comercial mostrará un comentario en el gráfico con una señal de movimiento débil y los siguientes valores del indicador:

                      • El indicador AC débil
                      • El valor de AC
                      • El AC máximo
                      • El AC mínimo

                      Esquema paso a paso para desarrollar un sistema comercial utilizando esta estrategia:

                       Esquema de la estrategia de fuerza de AC

                        Estrategia tres: AC y MA

                          Como parte de esta estrategia, crearemos un sistema comercial que generará y mostrará automáticamente señales de compra y venta en el gráfico, comparando constantemente cinco valores: el AC actual, el máximo y el mínimo del indicador, el precio de cierre y la media móvil. Según la posición de estos valores entre sí, el sistema generará una señal comercial. Si el valor actual del indicador está por encima del valor máximo de AC y el precio de cierre está por encima de la media móvil, el programa debería mostrar un comentario en el gráfico con los siguientes valores:

                          • Compra
                          • El precio de cierre
                          • El valor de AC
                          • El AC máximo
                          • El AC mínimo
                          • El valor MA

                          Si el valor actual de AC está por debajo del mínimo del indicador y el precio de cierre está por debajo de la media móvil, el sistema comercial debería generar una señal y mostrar en el gráfico como un comentario los siguientes valores:

                          • Venta
                          • El precio de cierre
                          • El valor de AC
                          • El AC máximo
                          • El AC mínimo
                          • El valor MA

                          Esquema paso a paso para desarrollar un sistema comercial utilizando esta estrategia:

                           AC _ MA Strategy blueprint

                          Sistemas comerciales basados en Oscilador Acelerador

                          En este apartado, aprenderemos cómo crear un sistema comercial para cada una de las estrategias analizadas. En primer lugar, crearemos un sistema comercial sencillo que mostrará un comentario en el gráfico con el valor actual del indicador AC. Este nos servirá de base a la hora de crear otras estrategias. Bien, vamos a escribir el código.

                          Para ello, crearemos el array acArray usando la función "double":

                          double acArray[];

                          A continuación, tenemos la función ArraySetAsSeries, que retorna true en caso de éxito, o false en caso de fallo (bool). Parámetros de la función:

                          • array[] — es un array; en nuestro caso, aoArray.
                          • flag — establece la bandera "true" para indicar la dirección de indexación en el array.
                          ArraySetAsSeries(acArray,true);

                          A continuación, definiremos el indicador AC usando la función iAC, que retornará el manejador del indicador. Parámetros de la función:

                          • symbol — símbolo sobre el que se calcula el indicador; utilizaremos el actual (_Symbol).
                          • period — periodo del cálculo del indicador; utilizaremos el periodo actual (_period).
                          int acDef = iAC(_Symbol,_Period);

                          Luego recuperaremos los datos del búfer de indicador de AC usando la función CopyBuffer. Parámetros de la función: 

                          • indicator_handle — manejador estándar del indicador acDef
                          • buffer_num — número del búfer de indicador; lo estableceremos en 0.
                          • 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, en nuestro caso, será acArray
                          CopyBuffer(acDef,0,0,3,acArray);

                          Después definiremos el valor de AC; para ello, crearemos la variable double acVal para él y normalizaremos utilizando la función NormalizeDouble. Parámetros de la función Normalizedouble:

                          • value — número a normalizar; usaremos acArray[0].
                          • digits — número de dígitos después del punto decimal. En nuestro ejemplo, será 7.
                          double acVal = NormalizeDouble(acArray[0],7);

                          Luego generaremos un comentario en el gráfico con el valor actual de AC utilizando la función Comment:

                          Comment("AC Value is ",acVal);

                          A continuación, le mostramos el código completo para crear la estrategia mencionada:

                          //+------------------------------------------------------------------+
                          //|                                                    Simple AC.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()
                            {
                             double acArray[];
                             ArraySetAsSeries(acArray,true);
                             int acDef = iAC(_Symbol,_Period);
                             CopyBuffer(acDef,0,0,3,acArray);
                             double acVal = NormalizeDouble(acArray[0],7);
                             Comment("AC Value is ",acVal);
                            }
                          //+------------------------------------------------------------------+
                          

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

                           Asesor Simple AC en el Navegador en el terminal

                          Clique dos veces en el archivo o arrástrelo y suéltelo en el gráfico. La ventana del asesor volverá a aparecer:

                           Ventana del asesor Simple AC

                           Asesor Simple AC en el gráfico

                          En la esquina superior derecha del gráfico, veremos una indicación de que el asesor está funcionando. Ahora estamos listos para recibir las señales generadas por el asesor. A continuación, le mostraremos un ejemplo de dicha señal:

                           Señal del asesor Simple AC

                          Como podemos ver, en la esquina superior izquierda del gráfico tenemos un comentario con el valor actual de AC.

                            Estrategia uno: cruce de AC y el nivel cero

                              Veamos el código completo para crear esta estrategia:

                              //+------------------------------------------------------------------+
                              //|                                            AC Zero Crossover.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()
                                {
                                 double acArray[];
                                 ArraySetAsSeries(acArray,true);
                                 int acDef = iAC(_Symbol,_Period);
                                 CopyBuffer(acDef,0,0,3,acArray);
                                 double acVal = NormalizeDouble(acArray[0],7);
                                 if(acVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AC Value is ",acVal);
                                   }
                                 if(acVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AC Value is ",acVal);
                                   }
                                }
                              //+------------------------------------------------------------------+
                              

                              Diferencias en este código:

                              Las condiciones de la estrategia.

                              Un ejemplo de señal alcista:

                                 if(acVal > 0)
                                   {
                                    Comment("Bullish","\n"
                                            "AC Value is ",acVal);
                                   }
                              

                              Un ejemplo de señal bajista:

                                 if(acVal < 0)
                                   {
                                    Comment("Bearish","\n"
                                            "AC Value is ",acVal);
                                   }
                              

                              Este código se debería compilar sin errores. A continuación, ejecutaremos el archivo resultante en el terminal. El asesor se ejecutará en el gráfico y tendrá un aspecto parecido al siguiente:

                               Asesor AC Zero Crossover en el gráfico

                              Como podemos ver, en la esquina superior derecha del gráfico ha aparecido una indicación señalando que el asesor está funcionando en el gráfico. El asesor está listo para generar señales.

                              En el caso de una señal alcista:

                               Asesor AC Zero Crossover - señal alcista

                              En la esquina superior izquierda del gráfico, se mostrará un comentario con la señal y los valores según la estrategia comercial:

                              • Alcista
                              • El valor de AC

                              En caso de una señal bajista:

                               Asesor AC Zero Crossover - señal bajista

                              En la esquina superior izquierda del gráfico, aparecerá un comentario con la señal y los siguientes valores:

                              • Bajista
                              • El valor de AC
                                Estrategia dos: Fuerza de AC

                                  Veamos el código completo para crear esta estrategia:

                                  //+------------------------------------------------------------------+
                                  //|                                                  AC Strength.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()
                                    {
                                     double acArray[];
                                     ArraySetAsSeries(acArray,true);
                                     int acDef = iAC(_Symbol,_Period);
                                     CopyBuffer(acDef,0,0,11,acArray);
                                     double acCurrVal = NormalizeDouble(acArray[0],7);
                                     int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                     int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);
                                     double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                     double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                     if(acCurrVal>acMaxVal)
                                       {
                                        Comment("AC is strong ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                     if(acCurrVal<acMinVal)
                                       {
                                        Comment("AC is weak ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                    }
                                  //+------------------------------------------------------------------+
                                  

                                  Diferencias en este código.

                                  Determinamos el valor de AC:

                                  double acCurrVal = NormalizeDouble(acArray[0],7);

                                  Luego determinaremos el valor máximo entre todos los elementos del array AC utilizando la función ArrayMaximum, que retornará el valor máximo encontrado. Parámetros de la función:

                                  • array[] — es un array; en nuestro caso, aoArray.
                                  • start — punto de partida de la búsqueda. Ajustaremos este parámetro a 1.
                                  • count — número total de elementos del array a comprobar. Estableceremos este parámetro en WHOLE_ARRAY para buscar en todo el array.
                                  int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);

                                  A continuación, determinaremos el valor mínimo entre todos los elementos del array AC utilizando la función ArrayMinimum, que retornará el mínimo encontrado. Parámetros de la función:

                                  • array[] — es un array; en nuestro caso, aoArray.
                                  • start — punto de partida de la búsqueda. Ajustaremos este parámetro a 1.
                                  • count — número total de elementos del array a comprobar. Estableceremos este parámetro en WHOLE_ARRAY para buscar en todo el array.
                                  int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);

                                  Luego normalizaremos los valores máximo y mínimo usando la función NormalizeDouble.

                                     double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                     double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                  

                                  Las condiciones de la estrategia.

                                  En caso de una señal fuerte:

                                     if(acCurrVal>acMaxVal)
                                       {
                                        Comment("AC is strong ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                  

                                  En el caso de una señal débil:

                                     if(acCurrVal<acMinVal)
                                       {
                                        Comment("AC is weak ","\n",
                                                "AC Value is ",acCurrVal,"\n",
                                                "AC Max is ",acMaxVal,"\n",
                                                "AC Min is ",acMinVal);
                                       }
                                  

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

                                  Asesor AC Strength 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á en marcha y ya puede generar una señal. A continuación, veremos varios ejemplos de pruebas.

                                  Ejemplo de una señal de AC fuerte:

                                  Asesor AC Strength - señal fuerte

                                  En la esquina superior izquierda del gráfico, aparecerá un comentario con la señal y los siguientes valores:

                                  • El indicador AC fuerte
                                  • El valor de AC
                                  • El AC máximo
                                  • El AC mínimo

                                  Ejemplo de una señal de AC débil:

                                  Asesor AC Strength - señal débil

                                  Como podemos ver, tenemos una señal y los siguientes valores:

                                  • El indicador AC débil
                                  • El valor de AC
                                  • El AC máximo
                                  • El AC mínimo
                                    Estrategia tres: AC y MA

                                      Echemos un vistazo al código completo para crear esta estrategia:

                                      //+------------------------------------------------------------------+
                                      //|                                             AC & MA Strategy.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()
                                        {
                                         MqlRates pArray[];
                                         double acArray[];
                                         double maArray[];
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(acArray,true);
                                         ArraySetAsSeries(maArray,true);
                                         int acDef = iAC(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                                         CopyBuffer(acDef,0,0,3,acArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                         int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                         int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);
                                         double closingPrice = pArray[0].close;
                                         double acVal = NormalizeDouble(acArray[0],7);
                                         double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                         double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                         double maVal = NormalizeDouble(maArray[0],7);
                                         if(acVal > acMaxVal && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                         if(acVal < acMinVal && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                        }
                                      //+------------------------------------------------------------------+
                                      

                                      Diferencias en este código:

                                      Creamos los arrays pArray, acArray y maArray. Usamos la función double para acArray y maArray, y la función MqlRates para pArray para almacenar la información sobre el precio, el volumen y el spread.

                                         MqlRates pArray[];
                                         double acArray[];
                                         double maArray[];
                                      

                                      Asignamos la bandera AS_SERIES a los arrays acArray y maArray, y también definimos Data a través de la función CopyRates, que permite obtener los datos históricos de la estructura MqlRates. Parámetros de la función:

                                      • symbol_name — nombre del símbolo; indicaremos _Symbol para usar el actual
                                      • timeframe — periodo de cálculo; utilizaremos el periodo actual (_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 en la que se copian los datos
                                         int Data=CopyRates(_Symbol,_Period,0,1,pArray);
                                         ArraySetAsSeries(acArray,true);
                                         ArraySetAsSeries(maArray,true);
                                      

                                      Definimos los indicadores AC, MA:

                                      Para AC, utilizaremos la función iCA como antes. Para la media móvil MA, usaremos la función iMA con estos parámetros:

                                      • symbol — nombre del símbolo; en nuestro caso, _Symbol
                                      • period — periodo; en nuestro caso, _period
                                      • ma_period — periodo para calcular la media; para nosotros será 50 
                                      • ma_shift — desplazamiento horizontal; lo estableceremos en 0 
                                      • ma_method — tipo de suavización de la media móvil; utilizaremos la exponencial. 
                                      • applied_price — define el tipo de precio utilizado para el cálculo; nosotros utilizaremos el precio de cierre
                                         int acDef = iAC(_Symbol,_Period);
                                         int maDef = iMA(_Symbol,_Period,50,0,MODE_EMA,PRICE_CLOSE);
                                      

                                      Luego recuperaremos los datos del búfer de los indicadores AC y MA usando la función "CopyBuffer".

                                         CopyBuffer(acDef,0,0,3,acArray);
                                         CopyBuffer(maDef,0,0,3,maArray);
                                      

                                      Después hallaremos los valores máximo y mínimo en el array acArray,

                                         int acMaxArray = ArrayMaximum(acArray,1,WHOLE_ARRAY);
                                         int acMinArray = ArrayMinimum(acArray,1,WHOLE_ARRAY);
                                      

                                      y determinaremos los valores de AC, AC máximo, AC mínimo y la media móvil exponencial.

                                         double acVal = NormalizeDouble(acArray[0],7);
                                         double acMaxVal = NormalizeDouble(acArray[acMaxArray],7);
                                         double acMinVal = NormalizeDouble(acArray[acMinArray],7);
                                         double maVal = NormalizeDouble(maArray[0],7);
                                      

                                      Condiciones de la estrategia.

                                      Señal de compra:

                                         if(acVal > acMaxVal && closingPrice > maVal)
                                           {
                                            Comment("Buy","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      

                                      Señal de venta:

                                         if(acVal < acMinVal && closingPrice < maVal)
                                           {
                                            Comment("Sell","\n"
                                                    "Closing Price is ",closingPrice,"\n",
                                                    "Ac Value is ",acVal,"\n",
                                                    "AC Max is ",acMaxVal,"\n",
                                                    "AC Min is ",acMinVal,"\n",
                                                    "MA Value is ",maVal);
                                           }
                                      

                                      Luego compilaremos el código del asesor y este aparecerá en la ventana del Navegador en el terminal, desde donde lo ejecutaremos en el gráfico:

                                      Asesor de la estrategia AC _ MA en el gráfico

                                      Como podemos ver, en la esquina superior derecha del gráfico ha aparecido una indicación señalando que el asesor está funcionando en el gráfico. Ahora podremos recibir señales.

                                      Señal de compra:

                                      Asesor de la estrategia AC & MA - señal de compra

                                      En la esquina superior izquierda del gráfico, aparecerá un comentario con la señal y los siguientes valores:

                                      • Compra
                                      • El precio de cierre
                                      • El valor de AC
                                      • El AC máximo
                                      • El AC mínimo
                                      • El valor MA

                                      Señal de venta:

                                      Asesor de la estrategia AC & MA - señal de venta

                                      Tenemos una señal con los siguientes valores:

                                      • Venta
                                      • El precio de cierre
                                      • El valor de AC
                                      • El AC máximo
                                      • El AC mínimo
                                      • El valor MA

                                      Conclusión

                                      Ya hemos analizado en profundidad el indicador Accelerator Oscillator. Hemos aprendido qué es, qué mide, cómo calcularlo y cómo interpretar las lecturas. También hemos visto algunas estrategias simples como ejemplo del uso del indicador. Hablamos de las estrategias:

                                      • AC Zero Crossover— genera señales alcistas y bajistas basadas en el cruce del histograma AC y el nivel cero del indicador.
                                      • AC Strength — genera señales de fuerza de AC basadas en una comparación del valor actual del indicador y el máximo o el mínimo de los últimos diez valores del indicador.
                                      • AC & MA Strategy — señales de compra y venta basadas en el análisis de la posición del precio de cierre, la media exponencial de 50 periodos, el valor actual del indicador AC, así como sus valores máximo y mínimo del periodo.

                                      A continuación, hemos creado esquemas paso a paso para cada una de las estrategias analizadas, para poder así desarrollar sistemas comerciales basados en ellas. Por último, hemos llegado al tema más interesante de este artículo: la creación de sistemas comerciales basados en las estrategias de los indicadores analizados; estas generan señales automáticas en la plataforma MetaTrader 5, evitándonos así supervisar los gráficos o establecer manualmente las condiciones.

                                      Esperamos que el lector escriba su propio código repitiendo todo lo que hemos hablado en este artículo. Entre otras cosas, este enfoque le ayudará a descubrir nuevas ideas. 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. Y, en general, el objetivo principal del artículo es ilustrativo.

                                      También esperamos que el artículo le resulte útil y le ayude a obtener mejores resultados en su comercio. Si le ha gustado este artículo y le ha resultado de utilidad, consulte los artículos anteriores de esta serie sobre, por ejemplo, RSI, MACD, MA, Estocástico, Bandas de Bollinger y otros indicadores.

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

                                      Archivos adjuntos |
                                      Simple_AC.mq5 (0.86 KB)
                                      AC_Strength.mq5 (1.46 KB)
                                      Características del Wizard MQL5 que debe conocer (Parte 3): Entropía de Shannon Características del Wizard MQL5 que debe conocer (Parte 3): Entropía de Shannon
                                      El tráder moderno está casi siempre a la búsqueda de nuevas ideas, probando constantemente nuevas estrategias, modificándolas y descartando las que han fracasado. En esta serie de artículos, intentaré demostrar que el Wizard MQL5 es un verdadero apoyo para el tráder.
                                      Redes neuronales: así de sencillo (Parte 30): Algoritmos genéticos Redes neuronales: así de sencillo (Parte 30): Algoritmos genéticos
                                      En el artículo de hoy, hablaremos de un método de aprendizaje ligeramente distinto. Podríamos decir que lo hemos tomado de la teoría de la evolución de Darwin. Probablemente resulte menos controlable que los métodos anteriormente mencionados, pero también nos permite entrenar modelos indiferenciados.
                                      Gestión de riesgos y capital con ayuda de asesores Gestión de riesgos y capital con ayuda de asesores
                                      Este artículo trata sobre aquello que no encontrará en el informe de simulación, sobre qué esperar al usar un asesor, cómo administrar su dinero usando robots y cómo cubrir una pérdida significativa para seguir comerciando con el trading automatizado.
                                      Cómo construir un EA que opere automáticamente (Parte 02): Inicio de la codificación Cómo construir un EA que opere automáticamente (Parte 02): Inicio de la codificación
                                      Aprenda a crear un EA que opere automáticamente de forma sencilla y segura. En el artículo anterior, presenté los primeros pasos que debe comprender antes de comenzar a crear un EA que negocie automáticamente. Lo mostré allí.