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

Aprendiendo a diseñar un sistema de trading con Bulls Power

MetaTrader 5Trading | 17 noviembre 2022, 16:21
692 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

En el presente artículo, nos familiarizaremos con otra herramienta técnica para el comercio, sola o en combinación con otras herramientas. Asimismo, hablaremos del indicador Bulls Power, que mide la fuerza del ánimo alcista en el mercado. Como en artículos anteriores, dividiremos el trabajo sobre el indicador en varios subapartados:

  1. Definición del indicador Bulls Power
  2. Estrategia del indicador Bulls Power
  3. Esquema de una estrategia comercial basada en el indicador Bulls Power
  4. Sistema comercial basado en el indicador Bulls Power
  5. Conclusión

Vamos a aprender qué es el indicador Bulls Power, qué mide y cómo podemos calcularlo manualmente. Los detalles del cálculo nos ayudarán a comprender mejor el propio concepto del indicador. Una vez tratado el concepto básico del indicador, hablaremos de cómo se puede utilizar. Para hacer esto, analizaremos algunas estrategias simples que funcionan con las lecturas de los indicadores. A continuación, crearemos un plan de desarrollo paso a paso para cada estrategia. Esto nos ayudará a desarrollar un sistema comercial en el apartado "Esquema de una estrategia comercial basada en el indicador Bulls Power". Después desarrollaremos sistemas comerciales en MQL5 para cada estrategia analizada; estos funcionarán automáticamente en la plataforma MetaTrader 5.

En este artículo utilizaremos la plataforma comercial MetaTrader 5, el editor de código incorporado MetaEditor y el lenguaje de programación MQL5 (MetaQuotes Language) para escribir asesores. Si no sabe cómo descargar o usar el MetaEditor, encontrará información sobre el tema en mis artículos anteriores: todo se describe con detalle allí. Le recomendamos repetir por su cuenta todo lo visto en el artículo. De este modo, desarrollará sus habilidades más rápidamente y comprenderá mejor el tema.

La importancia de la programación aumenta con cada día, y aunque sea solo por eso, ya merece la pena dominar esta útil herramienta. Sin duda, la programación nos ofrece enormes beneficios. En el trading, esto supone un indudable ahorro de tiempo, pues podremos escribir código o crear un programa para realizar acciones que efectuamos constantemente. Además, obtendremos resultados más precisos y evitaremos emociones que puedan interferir en los resultados comerciales.

¡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.

Y ahora, manos a la obra.

Definición del indicador Bulls Power

En esta sección, analizaremos el indicador Bulls Power, para comprender el concepto detrás de él. El índice de fuerza alcista Bulls Power es lo opuesto al índice Bears Power, del que hablamos en el artículo anterior Aprendiendo a diseñar un sistema de trading con Bears Power Index. El indicador Bulls Power fue desarrollado por Alexander Elder. Mide el ánimo alcista en el mercado y también puede indicar si los osos entran en juego cuando los toros están débiles. Se trata de un indicador de oscilador que fluctúa por encima o por debajo de cero, por consiguiente, este indicador ofrece una visión importante de un factor esencial en el movimiento del mercado: la oferta y la demanda.

Para calcular el indicador, seguiremos algunos pasos:

  • Primero encontraremos el máximo (precio más alto para un periodo determinado).
  • Luego encontraremos la media móvil exponencial EMA.
  • Después encontraremos la diferencia entre el máximo y la media móvil exponencial.

Bulls Power = High - EMA

Cuando los toros tienen el control del mercado, la mayoría de las veces lo empujan hacia arriba. Por lo tanto, en la fórmula para calcular el indicador, usaremos el valor del máximo. Luego encontramos la diferencia entre el máximo y la EMA y obtendremos un oscilador que fluctuará alrededor del nivel cero. Cuando el valor del indicador se acerca al nivel cero y lo cruza de arriba hacia abajo, esto puede ser una señal de que los toros se están debilitando.

Resulta positivo usar este indicador con algún tipo de indicador de tendencia, ya que ofrecerá información más efectiva. Consideraremos esta combinación más adelante al trabajar con estrategias. Esta es una de las grandes características del análisis técnico, ya que nos permite usar una combinación de diferentes conceptos y obtener más información sobre el instrumento desde diferentes perspectivas.

Sin embargo, ahora no necesitamos calcular el indicador manualmente, ya que existe un indicador listo para usar en el terminal comercial MetaTrader 5. Todo lo que debemos hacer es seleccionarlo de la lista de indicadores en el menú "Insertar" --> Indicadores --> Osciladores --> Bulls Power. Veamos esto en la siguiente figura:

Iniciamos el indicador Bulls Power en el gráfico

Después de ello, se abrirá una ventana con los parámetros del indicador.

 Parámetros del indicador Bulls Power

1 - periodo de cálculo del indicador.

2 - color de las barras para mostrar la fuerza alcista

3 - grosor de las barras para mostrar la fuerza alcista

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

En el gráfico anterior, podemos ver que en la parte inferior tenemos un indicador adjunto al gráfico y sus barras fluctúan en torno al cero. Si el indicador se encuentra por encima de cero, indicará la fuerza alcista; si se encuentra próximo a cero o por debajo del mismo, indicará que la fuerza alcista se está debilitando. Cuando los toros se debilitan, los osos intervienen y toman el control del mercado, empujando el precio hacia abajo. Si esto no sucede, el mercado se estabilizará gracias al equilibrio entre toros y osos.

Estrategia del indicador Bulls Power

En esta parte, aprenderemos a usar el indicador Bulls Power según su concepto, usando como ejemplo estrategias simples. Vamos a analizar cada una de las estrategias y las condiciones con las que funcionan. Querría llamar su atención sobre el hecho de que todas estas estrategias se presentan aquí solo con fines ilustrativos, para ayudar a los lectores a comprender el concepto básico del trabajo. Una vez más, será esencial que ponga a prueba cuidadosamente cualquier nuevo conocimiento antes de aplicarlo a su cuenta real, para asegurarse así de que se adapte a su estilo y comprensión del comercio.

    • Estrategia uno: movimiento de Bulls Power

      Según esta estrategia, obtendremos señales basadas en la posición de los valores de Bulls Power actuales y anteriores. Si el valor actual es mayor que el anterior, esto indicará el aumento del indicador Bulls Power. Por el contrario, si el valor actual es menor que el anterior, esto indicará la disminución del indicador Bulls Power.

      Así, tendremos que:

      Valor actual de Bulls Power > Valor anterior de Bulls Power --> El indicador Bulls Power aumenta

      Valor actual de Bulls Power < Valor anterior de Bulls Power --> El indicador Bulls Power disminuye

        • Estrategia dos: Bulls Power — índice fuerte o divergencia

          Esta estrategia generará señales de movimientos fuertes o divergencias basadas en la evaluación de cuatro valores: el máximo actual, el máximo anterior, el valor actual de fuerza alcista y el anterior. Cuando el máximo actual es más alto que el máximo anterior y el Bulls Power actual es más alto que el máximo anterior, esto indicará un movimiento fuerte. En el caso contrario, cuando el máximo actual es más alto que el máximo anterior y el valor de Bulls Power actual es más bajo que el valor anterior, esto indicará la formación de una divergencia bajista.

          Así, tendremos que:

          Máximo actual < Máximo anterior y Bulls Power actual < Bulls Power anterior --> Movimiento fuerte

          Máximo actual < Máximo anterior y Bulls Power actual > Bulls Power anterior --> Divergencia bajista

            • Estrategia tres: señales de Bulls Power

              Según esta estrategia, obtendremos un disparador que se puede usar para generar señales de compra y venta. Para ello, evaluaremos también cuatro valores, a saber: el Bulls Power actual, el nivel cero, el precio de cierre actual y la media móvil exponencial actual. Si la fuerza actual de Bulls Power está por debajo de cero y el cierre actual está por debajo de la media móvil exponencial, será una señal de venta. Si la fuerza actual de Bulls Power es mayor que cero y el cierre actual está por encima de la media móvil exponencial, será una señal de compra.

              Así, tendremos que:

              Fuerza actual de Bulls Power < Nivel cero y precio de cierre actual < EMA --> Venta

              Fuerza actual de Bulls Power > Nivel cero y precio de cierre actual > EMA --> Compra

              Esquema de una estrategia comercial basada en el indicador Bulls Power

              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: movimiento de Bulls Power

              Según los principios de la estrategia, se verificarán dos valores en cada tick: el Bulls Power actual y el valor anterior del indicador. El programa debe determinar cuál de estos valores es mayor. Si el valor actual de la fuerza alcista es mayor que el anterior, la señal deberá retornarse como un comentario en el gráfico con el siguiente contenido (cada valor deberá mostrarse en una línea aparte):

              • Bulls Power aumenta
              • Valor de Bulls Power
              • Valor anterior de Bulls Power

              Hay un escenario más que debemos considerar. Si el valor actual de Bulls Power es inferior al anterior, el asesor deberá mostrar otro comentario en el gráfico:

              • Bulls Power disminuye
              • Valor de Bulls Power
              • Valor anterior de Bulls Power

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

               Esquema de la estrategia comercial según el movimiento de Bulls Power

              • Estrategia dos: Bulls Power — índice fuerte o divergencia

              Según esta estrategia, el sistema comercial deberá verificar cuatro valores: el mínimo actual, el mínimo anterior, el valor Bulls Power actual y el anterior. Después de eso, el sistema deberá determinar si se cumplen las condiciones: el valor actual del mínimo es mayor que el anterior y, al mismo tiempo, el valor actual del indicador es mayor que el anterior. En caso afirmativo, el sistema comercial deberá mostrar una señal en el gráfico en forma de comentario con los siguientes valores (cada uno se mostrará en una línea aparte):

              • Movimiento fuerte
              • Máximo actual
              • Máximo anterior
              • Valor actual de Bulls Power
              • Valor anterior de Bulls Power

              De lo contrario, si el valor actual del máximo es superior al anterior, y el valor actual del indicador de fuerza alcista es inferior al anterior, el sistema comercial debería mostrar otra señal en el gráfico en forma de comentario con los siguientes valores (cada uno se mostrará en una línea aparte):

              • Divergencia bajista
              • Máximo actual
              • Máximo anterior
              • Valor actual de Bulls Power
              • Valor anterior de Bulls Power

              A continuación, mostraremos un sencillo plan visual que nos ayudará a crear un sistema comercial basado en esta estrategia.

                 Bulls Power — índice fuerte o divergencia

              • Estrategia tres: señales de Bulls Power

              Usando como base de esta estrategia, crearemos un sistema comercial que verificará cuatro valores en cada tick: el Bulls Power actual, el nivel cero, el cierre actual y la media móvil exponencial actual. Después de eso, el sistema deberá determinar si se cumplen las condiciones: el valor actual de Bulls Power está por debajo de cero y, al mismo tiempo, el precio de cierre actual está por debajo de la MA exponencial. En caso afirmativo, el sistema comercial deberá mostrar una señal en el gráfico como un comentario con los siguientes valores:

              • Señal de venta
              • Precio Close actual
              • Valor actual de EMA
              • Valor actual de Bulls Power

              De lo contrario, si el valor actual de Bulls Power está por encima de cero y, al mismo tiempo, el precio de cierre actual está por encima de la MA exponencial, el sistema comercial debería mostrar otra señal en el gráfico con los siguientes valores:

              • Señal de compra
              • Precio Close actual
              • Valor actual de EMA
              • Valor actual de Bulls Power

              También hemos creado un plan paso a paso para crear un sistema comercial basado en las estrategias discutidas.

               Gráfico de estrategia comercial Bulls Power Signals

              Sistema comercial basado en el indicador Bulls Power

              En este apartado, aprenderemos cómo crear un sistema comercial para cada una de las estrategias consideradas. En primer lugar, crearemos un sencillo sistema comercial que mostrará un comentario en el gráfico con el valor actual de Bulls Power. Este nos servirá de base a la hora de crear otras estrategias.

              A continuación, mostramos el código para crear este sistema comercial.

              Paso uno: creamos el array bullpower usando la función double:

              double bullpowerArray[];

              Paso dos: clasificamos el array creado usando la función ArraySetAsSeries, que retornará un valor booleano.

              ArraySetAsSeries(bullpowerArray,true);

              Paso tres: creamos una variable entera bullpowerDef, definimos el indicador Bulls Power usando la función iBullsPower para retornar el identificador del indicador. Parámetros:

              symbol — nombre del símbolo; nosotros tenemos "_Symbol", es decir, calculamos 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.

              ma_period — periodo de la media móvil; en nuestro caso, 13

              int bullpowerDef = iBullsPower(_Symbol,_Period,13);

              Paso cuatro: rellenamos el array usando la función CopyBuffer con los datos del indicador Bulls Power. Los parámetros de esta función serán:

              indicator_handle — identificador del indicador, bullpowerDef.     

              buffer_num — número del búfer de indicador, lo estableceremos en 0.

              start_pos — indica la posición del comienzo del cálculo; especificaremos 0.         

              count — cantidad de datos para copiar; indicaremos 3.                

              buffer[] — definimos el array de precios a copiar; nosotros tenemos bullpowerArray.

              CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);

              Paso cinco: obtenemos bullpowerVal; para ello, crearemos una variable usando la función NormalizeDouble, que retornará un valor double. Los parámetros de esta función serán:

              value — valor normalizado de bullpowerArray[0].

              digits — número de dígitos decimales tras la coma, 6.

              double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);

              Paso seis: usamos la función Comment para crear un comentario en el gráfico con el valor actual del indicador Bulls Power:

              Comment("Bull's Power Value is ",bullpowerVal);

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

              //+------------------------------------------------------------------+
              //|                                          Simple Bull's Power.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 bullpowerArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
              
                 Comment("Bull's Power Value is ",bullpowerVal);
              
                }
              //+------------------------------------------------------------------+
              

              Después de realizar la compilación, el asesor aparecerá en la ventana del Navegador en MetaTrader 5:

               Bulls power en el navegador

              Luego ejecutaremos clicando dos veces en el archivo Simple Bull's Power: el programa se iniciará en el gráfico de MetaTrader 5. Después de eso, aparecerá la ventana del asesor:

              Ventana del programa Simple Bulls Power

              Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

               Simple Bulls Power en el gráfico

              Como podemos ver en la captura de pantalla, en la esquina superior derecha del gráfico se muestra una indicación de que el asesor está funcionando. Ahora todo está listo para recibir comentarios automáticos con los valores actuales del Bull Power Index en el gráfico, como vemos en el siguiente ejemplo sacado de las pruebas: 

               Señal de la estrategia Simple Bulls Power

              Como podemos ver en el gráfico anterior, en la esquina superior izquierda se muestra el valor de la fuerza alcista.

              • Estrategia uno: movimiento de Bulls Power

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

              //+------------------------------------------------------------------+
              //|                                         Bulls Power Movement.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 bullpowerArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 if(bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Bull's Power is rising","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              
                 if(bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bull's Power is declining","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
                }
              //+------------------------------------------------------------------+
              

              Cuáles son las diferencias en este código:

              Determinamos el valor actual del indicador (bullpowerVal) y el valor anterior (bullpowerPrevVal) de la fuerza BullsPower:

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              

              Las condiciones de la estrategia.

              En caso de aumento:

                 if(bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Bull's Power is rising","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              

              En caso de movimiento descendente:

                 if(bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bull's Power is declining","\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              

              Después de la compilación, el asesor aparecerá en la ventana del Navegador en MetaTrader 5:

               Bulls power en el navegador

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

               Ventana de la estrategia Bulls Power Movement

              Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

               Bulls Power Movement 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 experto se iniciará y generará señales que se mostrarán en el gráfico.

              Si el indicador aumenta + los valores actuales en la ventana de datos:

               Bulls Power Movement - crecimiento - datos actuales

              Como se ve en el gráfico anterior, en su parte superior generamos una señal de crecimiento, así como los valores actual y anterior de Bulls Power. La ventana de datos muestra el valor actual del indicador Bulls Power.

              Si el indicador aumenta + valores anteriores en la ventana de datos:

               Bulls Power Movement - crecimiento - datos anteriores

              Esta opción se diferencia de la anterior en que la ventana de datos muestra el valor anterior del indicador Bulls Power.

              Si el indicador disminuye + valores actuales en la ventana de datos:

              Bulls Power Movement - descenso - datos actuales

              Como se ve en el gráfico anterior, en su parte superior generamos una señal de disminución, así como los valores actual y anterior de Bulls Power. La ventana de datos muestra el valor actual del indicador Bulls Power.

              Si el indicador disminuye + valores anteriores en la ventana de datos:

               Bulls Power Movement - descenso - datos anteriores

              Esta opción se diferencia de la anterior en que la ventana de datos muestra el valor anterior del indicador Bulls Power.

              • Estrategia dos: Bulls Power — índice fuerte o divergencia

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

              //+------------------------------------------------------------------+
              //|                          Bull's Power - Strong or Divergence.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 bullpowerArray[];
                 MqlRates priceArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 double currentHighVal=NormalizeDouble(priceArray[2].high,6);
                 double prevHighVal=NormalizeDouble(priceArray[1].high,6);
              
                 if(currentHighVal>prevHighVal && bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Strong Move","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              
                 if(currentHighVal>prevHighVal && bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bearish divergence","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
                }
              //+------------------------------------------------------------------+
              

              Cuáles son las diferencias en este código:

              Creamos dos arrays: bullpowerArray y priceArray:

                 double bullpowerArray[];
                 MqlRates priceArray[];
              

              Clasificamos los arrays: Para clasificar bullpowerArray, usamos la función "ArraySetAsSeries". Para el array de precios priceArray, usamos la función CopyRates para obtener los datos históricos de MqlRates. Parámetros de la función:

              • symbol name (nombre del símbolo) —_Symbol
              • timeframe (marco temporal) — _Period
              • start time (hora de inicio) — 0.
              • stop time (hora de parada) — 3
              • rates array — priceArray
                 ArraySetAsSeries(bullpowerArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              

              Determinamos el valor actual y anterior del indicador Bulls Power y los máximos usando la función NormalizeDouble.

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double bullpowerPrevVal = NormalizeDouble(bullpowerArray[1],6);
              
                 double currentHighVal=NormalizeDouble(priceArray[2].high,6);
                 double prevHighVal=NormalizeDouble(priceArray[1].high,6);
              

              Condiciones de la estrategia.

              En caso de movimiento fuerte:

                 if(currentHighVal>prevHighVal && bullpowerVal>bullpowerPrevVal)
                   {
                    Comment("Strong Move","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              

              En caso de una divergencia bajista:

                 if(currentHighVal>prevHighVal && bullpowerVal<bullpowerPrevVal)
                   {
                    Comment("Bearish divergence","\n",
                            "Current High Value is ",currentHighVal,"\n",
                            "Previous High Value is ",prevHighVal,"\n",
                            "Bull's Power Value is ",bullpowerVal,"\n",
                            "Bull's Power Previous Value is ",bullpowerPrevVal);
                   }
              

              Después de realizar la compilación, el asesor aparecerá en la ventana del Navegador en MetaTrader 5:

              Bulls Power en el navegador 2

              Clicamos dos veces en el archivo del asesor experto en el Navegador para iniciarlo. Después de eso, aparecerá la ventana del asesor.

               Ventana de la estrategia comercial Bulls Power - Fuerza o divergencia

              Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

               Estrategia comercial Bulls Power - Fuerza o divergencia - 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 se está ejecutando y generando señales.

              En caso de movimiento fuerte + datos actuales:

              Bulls Power - Fuerza o divergencia - fuerza y datos actuales

              El gráfico muestra la información que necesitamos con una señal del asesor. El comentario contiene los siguientes valores:

              • Movimiento fuerte
              • Máximo actual
              • Máximo anterior
              • Valor actual de Bulls Power
              • Valor anterior de Bulls Power 

              Fuerte movimiento bajista + datos anteriores:

               Bulls Power - Fuerza o divergencia - fuerza y datos anteriores

              Como podemos ver, el gráfico muestra exactamente el mismo comentario, pero la ventana de datos representa los valores anteriores.

              Divergencia bajista y datos actuales:

              Bulls Power - Fuerza o divergencia - divergencia bajista y datos actuales

              El comentario en el gráfico muestra la siguiente señal y los valores adicionales:

              • Divergencia bajista
              • Máximo actual
              • Máximo anterior
              • Valor actual de Bulls Power
              • Valor anterior de Bulls Power  

              Divergencia bajista y datos anteriores:

               Bulls Power - Fuerza o divergencia - divergencia bajista y datos anteriores

              En el gráfico, nuevamente mostramos un comentario con una señal del asesor, pero los valores anteriores se muestran en la ventana de datos.

              • Estrategia tres: señales de Bulls Power

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

              //+------------------------------------------------------------------+
              //|                                         Bulls' Power signals.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 bullpowerArray[];
                 double maArray[];
                 MqlRates priceArray[];
              
                 ArraySetAsSeries(bullpowerArray,true);
                 ArraySetAsSeries(maArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              
                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
                 int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);
              
                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
                 CopyBuffer(maDef,0,0,3,maArray);
              
                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
              
                 double emaVal = NormalizeDouble(maArray[0],6);
              
                 double currentClose=NormalizeDouble(priceArray[2].close,6);
              
                 if(bullpowerVal<0 && currentClose<emaVal)
                   {
                    Comment("Sell Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
              
                 if(bullpowerVal>0 && currentClose>emaVal)
                   {
                    Comment("Buy Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
                }
              //+------------------------------------------------------------------+
              

              Diferencias en este código:

              Creamos tres arrays: bullpowerArray, maArray y priceArray.

                 double bullpowerArray[];
                 double maArray[];
                 MqlRates priceArray[];
              

              Luego clasificaremos los arrays creados.

                 ArraySetAsSeries(bullpowerArray,true);
                 ArraySetAsSeries(maArray,true);
                 int Data=CopyRates(_Symbol,_Period,0,3,priceArray);
              

              Para el indicador de fuerza alcista, usaremos la función iBullsPower y la variable entera bullpowerDef, y para el indicador de media móvil, iMA. Las funciones retornarán el identificador del indicador.

                 int bullpowerDef = iBullsPower(_Symbol,_Period,13);
                 int maDef = iMA(_Symbol,_Period,13,0,MODE_EMA,PRICE_CLOSE);
              

              A continuación, rellenaremos el array utilizando la función CopyBuffer con los datos del indicador Bulls Power y de la media móvil.

                 CopyBuffer(bullpowerDef,0,0,3,bullpowerArray);
                 CopyBuffer(maDef,0,0,3,maArray);
              

              Después determinaremos el valor actual del indicador Bulls Power, la media móvil exponencial y el precio de cierre actual.

                 double bullpowerVal = NormalizeDouble(bullpowerArray[0],6);
                 double emaVal = NormalizeDouble(maArray[0],6);
                 double currentClose=NormalizeDouble(priceArray[2].close,6);
              

              Condiciones de esta estrategia:

              Condiciones para una señal de venta:

                 if(bullpowerVal<0 && currentClose<emaVal)
                   {
                    Comment("Sell Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
              

              Condiciones para una señal de compra:

                 if(bullpowerVal>0 && currentClose>emaVal)
                   {
                    Comment("Buy Signal","\n",
                            "Current Close Value is ",currentClose,"\n",
                            "Current EMA Value is ",emaVal,"\n",
                            "Bull's Power Value is ",bullpowerVal);
                   }
              

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

               Bulls Power en el navegador 3

              Clicamos dos veces en el archivo del asesor experto en el Navegador para iniciarlo. Después de eso, aparecerá la ventana del asesor.

               Ventana de Bulls Power Signals

              Pulsamos OK y el programa (asesor) se iniciará en el gráfico como se muestra en la figura siguiente:

              Bulls Power Signals en el gráfico

              Podemos ver que el asesor experto Bulls Power está adjunto al gráfico, así como el icono correspondiente en la esquina superior derecha. El sistema comercial genera señales, y se ven así:

              Condiciones para una señal de venta:

               Bulls Power Signals - señal de venta

              El comentario en el gráfico muestra la siguiente señal y los valores adicionales:

              • Señal de venta
              • Valor actual del precio de cierre
              • Valor actual de EMA
              • Valor de Bulls Power

              Si hay una señal de compra:

               Bulls Power Signals - señal de compra

              El comentario en el gráfico muestra la siguiente señal y los valores adicionales:

              • Señal de compra
              • Valor actual del precio de cierre
              • Valor actual de EMA
              • Valor de Bulls Power

              Eso es todo, ya hemos creado sistemas automáticos basados en cada una de las estrategias analizadas. Todos ellos generan señales según las instrucciones mostradas en los esquemas anteriores.

              Conclusión

              Creo que hemos abarcado todos los conceptos básicos necesarios del indicador Bulls Power. Además, hemos aprendido qué es, qué mide y cómo se puede calcular manualmente. También hemos aprendido a encontrar el indicador incorporado en el terminal MetaTrader 5 y a ejecutarlo en el gráfico. A continuación, analizaremos cómo usar el índice de fuerza alcista según la idea del indicador. Para hacer esto, analizaremos algunas estrategias simples. El objetivo principal de estas estrategias será mostrar cómo se pueden utilizar los indicadores. Si quiere utilizar alguna de las estrategias en una cuenta real, asegúrese de probarla minuciosamente antes para asegurarse de que se adapte a sus necesidades. Entonces, vamos a familiarizarnos con las siguientes estrategias:

              • Movimiento del indicador Bulls Power: esta estrategia se puede utilizar para determinar la dirección del índice de fuerza alcista.
              • Bulls Power - Fuerza o divergencia: nos permite confirmar la presencia de un movimiento fuerte o revela una divergencia.
              • Señales de Bulls Power: la estrategia genera señales de compra y venta.

              Después de eso, hemos creado planes paso a paso para desarrollar cada una de las estrategias discutidas. Dichos planes ayudan a desarrollar organizadamente ideas en forma de esquemas comprensibles. Luego hemos pasado al tema más interesante, la escritura de sistemas comerciales en MQL5 que puedan generar señales de forma automática y precisa. Estos están pensados para su uso en la plataforma comercial MetaTrader 5. Esperamos que el lector haya trabajado en cada código por su cuenta: así aprenderá a escribir los códigos de la estrategia comercial.

              Esperamos que el artículo le resulte útil y le ayude a alcanzar sus objetivos comerciales. Si le ha gustado este artículo y lo ha encontrado útil, lea los artículos anteriores de la misma serie para aprender a desarrollar un sistema comercial basado en los indicadores técnicos más populares.

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

              Algoritmos de optimización de la población Algoritmos de optimización de la población
              Artículo de introducción a los algoritmos de optimización (AO). Clasificación. En el artículo, intentaremos crear un banco de pruebas (un conjunto de funciones) que servirá en el futuro para comparar los AO entre sí, e incluso, quizás, para identificar el algoritmo más universal de todos los ampliamente conocidos.
              DoEasy. Elementos de control (Parte 15): Objeto WinForms TabControl - múltiples filas de encabezados de pestañas, métodos de trabajo con pestañas DoEasy. Elementos de control (Parte 15): Objeto WinForms TabControl - múltiples filas de encabezados de pestañas, métodos de trabajo con pestañas
              En este artículo, continuaremos desarrollando el objeto WinForm TabControl: hoy crearemos la clase de objeto de pestaña, haremos posible la disposición de los encabezados de las pestañas en varias filas y añadiremos los métodos para trabajar con las pestañas del objeto.
              Redes neuronales: así de sencillo (Parte 25): Practicando el Transfer Learning Redes neuronales: así de sencillo (Parte 25): Practicando el Transfer Learning
              En los últimos dos artículos, hemos creado una herramienta que nos permite crear y editar modelos de redes neuronales. Ahora es el momento de evaluar el uso potencial de la tecnología de Transfer Learning en ejemplos prácticos.
              Redes neuronales: así de sencillo (Parte 24): Mejorando la herramienta para el Transfer Learning Redes neuronales: así de sencillo (Parte 24): Mejorando la herramienta para el Transfer Learning
              En el último artículo, creamos una herramienta capaz de crear y editar arquitecturas de redes neuronales. Hoy querríamos proponerles continuar con el desarrollo de esta herramienta, para lograr que resulte más fácil de usar. En cierto modo, esto se aleja un poco de nuestro tema, pero estará de acuerdo con que la organización del espacio de trabajo desempeña un papel importante en el resultado final.