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

Aprendiendo a diseñar un sistema de trading con DeMarker

MetaTrader 5Trading | 12 diciembre 2022, 17:07
709 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 que, de usarse correctamente, podrá mejorar nuestros resultados comerciales. Este indicador es el indicador de DeMark (DeMarker). El presente artículo abarcará varios temas:

  1. Definición del indicador DeMarker
  2. Estrategias basadas en el indicador DeMarker
  3. Esquema de estrategias por DeMarker
  4. Sistemas comerciales según DeMarker
  5. Conclusión

En este artículo, usaremos 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 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.

Le recomendamos repasar por su cuenta todo lo escrito en este artículo si realmente desea desarrollar sus habilidades comerciales y programáticas para obtener el mayor beneficio posible, pues la práctica es un factor esencial en cualquier etapa del aprendizaje. Asimismo, le recordamos que el propósito principal de las estrategias analizadas aquí es aprender el concepto básico del indicador. Todas las estrategias presentadas tienen fines educativos. Si desea usar alguna de ellas en el comercio, asegúrese de probarla a fondo para comprobar que sea rentable o adecuada para su comercio.

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

Para aprender a trabajar correctamente con el indicador DeMarker, primero deberemos entender qué es, qué mide, cómo calcularlo y cómo interpretar sus lecturas. El indicador DeMarker es un oscilador creado por el analista técnico Thomas DeMark. Así, queda claro de inmediato de dónde procede el nombre del indicador: de su creador. Podemos encontrar diferentes variantes: DeMarker, DeM, Demark. Esta herramienta técnica mide la demanda de un instrumento financiero y valora la dirección del mercado comparando los precios máximos y mínimos actuales con los precios anteriores.

Podemos calcular el indicador manualmente en unos pocos pasos:

DMark (i) = SMA (DeMax, N) / (SMA (DeMax, N) + SMA (DeMin, N))

donde:

  • DMark (i) = valor actual de DeMark
  • SMA = media móvil simple
  • DeMax = valor máximo del indicador de DeMark
  • N = periodo
  • DeMin = valor mínimo del indicador de DeMark


El valor DeMax se calcula de la siguiente forma:

DeMax (i) = HIGH (i) - HIGH (i - 1), donde HIGH es el máximo

De lo contrario:

DeMax (i) = 0


El valor DeMin se calcula de la siguiente forma:

DeMin (i) = LOW (i - 1) - LOW (i), donde LOW es el mínimo

De lo contrario:

DeMin (i) = 0

El indicador dibuja una línea que oscila entre los niveles 0 y 1 y muestra la demanda de un instrumento financiero. 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 tenemos que hacer es seleccionarlo de la lista de indicadores.

Cómo ejecutar el indicador DeMarker en un gráfico en MetaTrader 5:

En la plataforma comercial MetaTrader 5, seleccionamos el menú Insertar --> Indicadores --> Osciladores --> DeMarker.

Inicio en el gráfico DeM

Después de ello, se abrirá la ventana de parámetros del asesor: Tendrá el aspecto que sigue:

Parámetros del indicador DeM

1 - período de cálculo

2 - color de la línea del indicador

3 - estilo de línea del indicador

4 - grosor de la línea del indicador

Establecemos los parámetros, presionamos el botón OK y el indicador se iniciará en el gráfico como se muestra a continuación:

Indicador de DeM en el gráfico

La captura de pantalla anterior muestra que el indicador se ha iniciado en una ventana de gráfico adicional: ha aparecido una línea que oscila entre los niveles 0 y 1. Los valores del indicador deberán interpretarse según la posición de la línea en esta ventana. Si la línea se acerca a 0,70, significará que el mercado se encuentra en una situación de sobrecompra. Los valores alrededor de 0,30 indicarán las condiciones de sobreventa.

Estrategias basadas en el indicador DeMarker

En este apartado, analizaremos las opciones de uso del indicador DeMarker según su concepto. Para ello, nos familiarizaremos con tres estrategias simples.

    Estrategia uno: fuerza de DeMark

      En esta estrategia, obtendremos señales del indicador de DeMark fuerte o débil. Dicha señal se generará usando como base al análisis del valor de DeMarker y el valor medio del indicador durante los últimos 5 periodos. Si el valor actual del indicador DeMarker es más alto que el valor promedio de los últimos cinco periodos, esto nos indicará la presencia de un valor fuerte. Por el contrario, si el valor actual del indicador DeMarker es inferior al valor promedio de los últimos cinco periodos, esto nos indicará la presencia de un valor débil.

      Dicho de forma más sencilla:

      Valor de DeMarker >= Promedio de 5 periodos DeMarker --> DeMarker fuerte

      Valor de DeMarker <= Promedio de 5 periodos DeMarker --> DeMarker débil

        Segunda estrategia: DeMarker, sobrecompra y sobreventa

          Según esta estrategia, recibiremos señales cuando el indicador entre en las zonas de sobrecompra y sobreventa. Si el valor actual de DeM es mayor o igual a 0,70, será una señal sobre la entrada en una zona de sobrecompra. Si el valor actual de DeM es menor o igual a 0,30, será una señal de una zona de sobreventa.

          Esquemáticamente:

          Valor de DeMarker >= 0.70 --> Sobrecompra

          Valor de DeMarker <= 0.30 --> Sobreventa

            Estrategia tres: divergencia según DeMark

              Esta estrategia generará señales de divergencia alcistas o bajistas que nos darán una idea de la probabilidad de que suceda un cambio en el movimiento actual. Para ello, deberemos analizar cuatro valores: el máximo actual y el máximo anterior, así como el valor actual y anterior del indicador DeMarker. Aquí analizaremos las variantes más simples de divergencia. Resultará más eficiente comparar y analizar los máximos y mínimos del precio con los máximos y mínimos del indicador. En nuestra estrategia simple, obtendremos una señal de divergencia alcista si el máximo actual es mayor que el máximo anterior, mientras que el valor actual de DeMarker es menor que su valor anterior. Si el mínimo actual es menor que el máximo anterior y el valor actual del indicador es mayor que su valor anterior, esto será una señal de divergencia alcista.

              Si lo miramos de forma esquemática:

              Máximo actual > máximo anterior y valor de DeM actual < DeM anterior --> divergencia bajista

              Mínimo actual < mínimo anterior y DeMarker actual > anterior --> divergencia alcista.

              Esquema de estrategias según DeMarker

              En la sección anterior, utilizando estrategias simples como ejemplo, aprendimos cómo usar el indicador DeMarker. En esta sección, vamos a crear para cada estrategia esquemas paso a paso que luego nos ayudarán a desarrollar sistemas comerciales basados en ellos.

                Estrategia uno: fuerza de DeMark

                  El sistema comercial para esta estrategia debería verificar automáticamente y luego comparar dos valores. Hablamos del valor actual del indicador DeMarker y el promedio de los últimos cinco valores del indicador. Si el valor actual es mayor que el promedio, el sistema comercial mostrará un comentario en el gráfico con los valores siguientes:

                  • El indicador DeMarker es fuerte
                  • Valor actual de DeMarker
                  • Promedio de 5 periodos de DeMarker

                  Si el valor actual está por debajo del promedio, el sistema comercial mostrará otro comentario en el gráfico:

                  • El indicador DeMarker es débil
                  • Valor actual de DeMarker
                  • Promedio de 5 periodos de DeMarker
                  A continuación, mostraremos un esquema paso a paso que le ayudará a desarrollar un sistema comercial para esta estrategia:

                  Esquema de la estrategia Fuerza de DeMarker

                    Segunda estrategia: DeMarker, sobrecompra y sobreventa

                      El sistema basado en esta estrategia comprobará las condiciones de formación de la señal y mostrará esta señal en el gráfico. Para ello, el sistema comprobará tres valores: el valor actual del indicador DeMarker y sus dos niveles: 0,70 y 0,30. Si el valor actual de DeMarker es mayor o igual a 0,70, el sistema comercial mostrará en el gráfico el siguiente comentario:

                      • Sobrecompra
                      • Valor de DeMarker

                      De lo contrario, si el valor actual de DeMarker es menor o igual a 0,30, el sistema comercial mostrará en el gráfico el siguiente comentario:

                      • Sobreventa
                      • Valor de DeMarker
                      Esquema de la estrategia DeMarker OB, OS
                        Estrategia tres: divergencia según DeMark

                          Con esta estrategia, crearemos un sistema comercial que podremos utilizar para generar señales de divergencia alcistas o bajistas. Para ello, el sistema comprobará cuatro valores. Si el máximo actual es mayor que el anterior y el valor actual de DeMark es menor que su valor anterior, el sistema comercial debería mostrar en el gráfico el siguiente comentario:

                          • Divergencia bajista
                          • Máximo actual
                          • Máximo anterior
                          • Valor actual de DeMarker
                          • Valor anterior de DeMarker

                          En la situación opuesta, si el mínimo actual es más bajo que el anterior y el valor actual de DeMark es más alto que su valor anterior, el sistema comercial debería mostrar en el gráfico otro comentario:

                          • Divergencia alcista
                          • Máximo actual
                          • Máximo anterior
                          • Valor actual de DeMarker
                          • Valor anterior de DeMarker

                          Esquema de la estrategia DeMarker Divergence

                          Sistemas comerciales según DeMarker

                          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. Primero, escribiremos un programa simple que servirá como base para todos los otros sistemas. Este programa mostrará el valor actual del indicador de DeMark en un comentario en el gráfico. El siguiente código nos muestra cómo crear un sistema de este tipo.

                          Primer paso

                          Creamos el array deMarkerArray usando la función double para obtener valores de punto flotante.

                          double deMarkerArray[];

                          Segundo paso

                          Usando la función ArraySetAsSeries, asignamos la bandera AS_SERIES al array deMarkerArray: la función retorna un valor booleano true o false según el resultado.

                          ArraySetAsSeries(deMarkerArray,true);

                          Tercer paso

                          Definimos el indicador DeMarker usando la función "DeMarker", que retorna el identificador del indicador. Parámetros de la función:

                          • 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 promedio, usaremos 14.
                          int deMarkerDef = iDeMarker(_Symbol,_Period,14);

                          Cuarto paso

                          Obtenemos los datos del búfer del indicador DeMarker usando la función CopyBuffer. Parámetros de la función:

                          • indicador_handle — manejador estándar del indicador deMarkerDef
                          • buffer_num — número del búfer de indicador; lo estableceremos en 0.
                          • start_pos — indica la posición del inicio del cálculo; indicaremos 0.
                          • count — cantidad de datos a copiar; indicaremos 3.
                          • buffer[] — definimos el array de precios a copiar; en nuestro caso, deMarkerArray
                          CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);

                          Quinto paso

                          Determinamos el valor actual de deMarker utilizando la función NormalizeDouble, que retorna un valor double. Parámetros de la función:

                          • value — número normalizado
                          • digits — número de dígitos decimales
                          double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);

                          Paso seis

                          Usando la función Comment, mostraremos un comentario en el gráfico con el valor actual del indicador DeMarker.

                          Comment("DeMarker Value is ",deMarkerVal);

                          A continuación, mostraremos el código completo del programa que muestra el valor del indicador en el gráfico:

                          //+------------------------------------------------------------------+
                          //|                                       Simple DeMarker 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()
                            void OnTick()
                            {
                             double deMarkerArray[];
                          
                             ArraySetAsSeries(deMarkerArray,true);
                          
                             int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                          
                             CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);
                          
                             double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);
                          
                             Comment("DeMarker Value is ",deMarkerVal);
                          
                            }
                          //+------------------------------------------------------------------+
                          
                          

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

                          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 programa Simple DeMarker

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

                          Programa Simple DeMarker en el gráfico

                          Como podemos ver, en la esquina superior derecha del gráfico ha aparecido una indicación de que el asesor experto Simple DeMarker está funcionando en el gráfico. El asesor experto se iniciará y generará señales que se mostrarán en el gráfico. Deberemos repetir los mismos pasos para compilar todos los códigos para las estrategias analizadas anteriormente, después de lo cual podremos ejecutarlos en la plataforma MetaTrader 5.

                          A continuación, le mostramos ejemplos de comentarios generados al probar esta estrategia.

                          Como podemos ver, en la esquina superior izquierda del gráfico se muestra un comentario con el valor actual del indicador DeMarker.

                            Estrategia uno: fuerza de DeMark

                              A continuación, le mostramos el código completo del sistema comercial basado en esta estrategia.

                              //+------------------------------------------------------------------+
                              //|                                            DeMarker 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 deMarkerArray[];
                              
                                 ArraySetAsSeries(deMarkerArray,true);
                              
                                 int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                              
                                 CopyBuffer(deMarkerDef,0,0,6,deMarkerArray);
                              
                                 double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                 double deMarkerVal1 = NormalizeDouble(deMarkerArray[1],4);
                                 double deMarkerVal2 = NormalizeDouble(deMarkerArray[2],4);
                                 double deMarkerVal3 = NormalizeDouble(deMarkerArray[3],4);
                                 double deMarkerVal4 = NormalizeDouble(deMarkerArray[4],4);
                                 double deMarkerVal5 = NormalizeDouble(deMarkerArray[5],4);
                              
                                 double deMarkerAvgVal = (deMarkerVal1+deMarkerVal2+deMarkerVal3+deMarkerVal4+deMarkerVal5)/5;
                              
                              
                                 if(deMarkerVal>deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is strong","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }
                              
                                 if(deMarkerVal<deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is weak","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }
                                }
                              //+------------------------------------------------------------------+
                              

                              Diferencias en este código:

                              Determinamos los últimos cinco valores del indicador DeMarker usando la función NormalizeDouble además del valor actual del indicador, que hemos determinado anteriormente usando la misma función.

                                 double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                 double deMarkerVal1 = NormalizeDouble(deMarkerArray[1],4);
                                 double deMarkerVal2 = NormalizeDouble(deMarkerArray[2],4);
                                 double deMarkerVal3 = NormalizeDouble(deMarkerArray[3],4);
                                 double deMarkerVal4 = NormalizeDouble(deMarkerArray[4],4);
                                 double deMarkerVal5 = NormalizeDouble(deMarkerArray[5],4);
                              

                              Calculamos el deMarkerAvgVal promedio según los cinco valores de DeMarker obtenidos. Para ello, usaremos la función double, que crea la variable deMarkerAvgVal. El valor de la variable será igual a la suma de los últimos cinco valores dividida por cinco.

                              double deMarkerAvgVal = (deMarkerVal1+deMarkerVal2+deMarkerVal3+deMarkerVal4+deMarkerVal5)/5;

                              Ajuste de las condiciones de la estrategia

                              Comparación del valor actual del indicador y deMarkerAvg. Se formará una fuerte señal deMarker si el valor actual es mayor que deMarkerAvg. Para hacer esto, usaremos la instrucción If:

                              if(expression) --> operator

                              Si se da un caso fuerte, cuando deMarkerVal es mayor que deMarkerAvgVal (que es la expresión en la sintaxis), necesitaremos que el sistema comercial devuelva una señal de fuerza como comentario en el gráfico (operator).

                                 if(deMarkerVal>deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is strong","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }
                              

                              Si se da un caso débil, el valor actual de deMarker será inferior al valor promedio, y en el gráfico también se mostrará el indicador correspondiente con una lectura débil.

                                 if(deMarkerVal<deMarkerAvgVal)
                                   {
                                    Comment("DeMarker is weak","\n",
                                            "Current DeMarker Value is ",deMarkerVal,"\n",
                                            "AVG DeMarker Value is ",deMarkerAvgVal);
                                   }
                              

                              Después de compilar el programa y ejecutarlo desde el Navegador, en el gráfico aparecerá el asesor experto para esta estrategia:

                              Sistema según la estrategia Strength en el gráfico

                              En la esquina superior derecha del gráfico ha aparecido una indicación sobre el funcionamiento del asesor experto en el gráfico. El asesor se está ejecutando y generando señales; a continuación le mostramos algunos ejemplos de prueba de las señales.

                              En caso de una señal fuerte:

                              Strength - señal fuerte

                              El gráfico en la esquina superior izquierda muestra que el sistema comercial ha generado una señal basada en esta estrategia.

                              • La lectura de DeMarker es fuerte --> porque el DeMarker actual está por encima del promedio de los cinco valores anteriores.
                              • El valor actual del DeMarker.
                              • El valor medio de DeMarker. 

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

                              Strength - señal débil

                              La señal correspondiente se ha mostrado en el gráfico, en la esquina superior izquierda:

                              • La lectura de DeMarker es débil --> porque el valor actual de DeMarker está por debajo del promedio de los cinco valores anteriores.
                              • El valor actual del DeMarker.
                              • El valor medio de DeMarker. 
                                Segunda estrategia: DeMarker, sobrecompra y sobreventa

                                  Código para esta estrategia:

                                  //+------------------------------------------------------------------+
                                  //|                                       Simple DeMarker 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()
                                  void OnTick()
                                    {
                                     double deMarkerArray[];
                                  
                                     ArraySetAsSeries(deMarkerArray,true);
                                  
                                     int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                  
                                     CopyBuffer(deMarkerDef,0,0,3,deMarkerArray);
                                  
                                     double deMarkerVal = NormalizeDouble(deMarkerArray[0],6);
                                  
                                  
                                     if(deMarkerVal<=0.30)
                                       {
                                        Comment("Oversold","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }
                                  
                                     if(deMarkerVal>=0.70)
                                       {
                                        Comment("Overbought","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }
                                     if(deMarkerVal>0.30 && deMarkerVal<0.70)
                                       {
                                        Comment("DeMarker Value is ",deMarkerVal);
                                       }
                                  
                                    }
                                  //+------------------------------------------------------------------+
                                  
                                  

                                  Diferencias en este código:

                                  Condiciones de esta estrategia:

                                  En el caso de una señal de sobreventa, cuando el valor actual es menor o igual a 0,30, esto será parte de expression (expresión) en la función if; operator será una señal de sobreventa. Precisamente esta señal aparecerá en el gráfico.

                                     if(deMarkerVal<=0.30)
                                       {
                                        Comment("Oversold","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }
                                  

                                  Se generará una señal de sobrecompra cuando el valor actual de DeMark sea mayor o igual a 0,70.

                                     if(deMarkerVal>=0.70)
                                       {
                                        Comment("Overbought","\n",
                                                "DeMarker Value is ",deMarkerVal);
                                       }
                                  

                                  Si el valor actual está entre 0,30 y 0,70, no habrá señal.

                                     if(deMarkerVal>0.30 && deMarkerVal<0.70)
                                       {
                                        Comment("DeMarker Value is ",deMarkerVal);
                                       }
                                  

                                  Después de compilar el código y ejecutar el programa, el asesor comenzará a funcionar en el gráfico:

                                  OB-OS en el gráfico

                                  Ahora estamos listos para obtener las señales para esta estrategia. A continuación, le mostraremos algunos ejemplos de señales de prueba.

                                  En caso de sobrecompra:

                                  DeM, OB - OS - señal de sobrecompra

                                  El gráfico en la esquina superior izquierda mostrará la señal generada y los valores adicionales:

                                  • Sobrecompra
                                  • Valor actual de DeMarker

                                  En caso de sobreventa:

                                  DeM, OB - OS - señal de sobreventa

                                  La estrategia ha generado una señal:

                                  • Sobreventa
                                  • Valor actual de DeMarker

                                  Si no hay señal:

                                  DeM, OB - OS - sin señal

                                  No hay señal, solo se mostrará el valor actual.

                                    Estrategia tres: divergencia según DeMark

                                      A continuación, le mostraremos el código completo para crear un sistema comercial para la tercera estrategia:

                                      //+------------------------------------------------------------------+
                                      //|                                          DeMarker 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 deMarkerArray[];
                                         MqlRates pArray[];
                                      
                                      
                                         ArraySetAsSeries(deMarkerArray,true);
                                         ArraySetAsSeries(pArray,true);
                                      
                                         int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                         int pData = CopyRates(_Symbol,_Period,0,14,pArray);
                                      
                                         CopyBuffer(deMarkerDef,0,0,14,deMarkerArray);
                                      
                                         double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                         double deMarkerPrevVal = NormalizeDouble(deMarkerArray[1],4);
                                      
                                         double currentHigh = NormalizeDouble(pArray[0].high,6);
                                         double currentLow = NormalizeDouble(pArray[0].low,6);
                                         double prevHigh = NormalizeDouble(pArray[1].high,6);
                                         double prevLow = NormalizeDouble(pArray[1].low,6);
                                      
                                         if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal)
                                           {
                                            Comment("Bearish divergence","\n",
                                                    "Current High is ",currentHigh,"\n",
                                                    "Prev. High Value is ",prevHigh,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }
                                         if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal)
                                           {
                                            Comment("Bullish divergence","\n",
                                                    "Current Low is ",currentLow,"\n",
                                                    "Prev. Low Value is ",prevLow,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }
                                      
                                        }
                                      //+------------------------------------------------------------------+
                                      
                                      

                                      Diferencias en este código:

                                      Creamos dos variables: deMarkerArray usando la función double y pArray (precios) usando la función MqlRates, que almacena la información sobre los precios, el volumen y el spread.

                                         double deMarkerArray[];
                                         MqlRates pArray[];
                                      

                                      Asignamos la bandera AS_SERIES a estas dos variables.

                                         ArraySetAsSeries(deMarkerArray,true);
                                         ArraySetAsSeries(pArray,true);
                                      

                                      Definimos deMarketDef, pData

                                         int deMarkerDef = iDeMarker(_Symbol,_Period,14);
                                         int pData = CopyRates(_Symbol,_Period,0,14,pArray);
                                      

                                      Rellenamos deMarkerArray

                                      CopyBuffer(deMarkerDef,0,0,14,deMarkerArray);

                                      Declaramos deMarkerVal, deMarkerPrevVal, el máximo actual, el mínimo actual, el máximo anterior y el mínimo anterior

                                         double deMarkerVal = NormalizeDouble(deMarkerArray[0],4);
                                         double deMarkerPrevVal = NormalizeDouble(deMarkerArray[1],4);
                                      
                                         double currentHigh = NormalizeDouble(pArray[0].high,6);
                                         double currentLow = NormalizeDouble(pArray[0].low,6);
                                         double prevHigh = NormalizeDouble(pArray[1].high,6);
                                         double prevLow = NormalizeDouble(pArray[1].low,6);
                                      

                                      Condiciones de la estrategia.

                                      En caso de divergencia bajista:

                                         if(currentHigh>prevHigh && deMarkerVal<deMarkerPrevVal)
                                           {
                                            Comment("Bearish divergence","\n",
                                                    "Current High is ",currentHigh,"\n",
                                                    "Prev. High Value is ",prevHigh,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }
                                      

                                      En caso de divergencia alcista:

                                         if(currentLow<prevLow && deMarkerVal>deMarkerPrevVal)
                                           {
                                            Comment("Bullish divergence","\n",
                                                    "Current Low is ",currentLow,"\n",
                                                    "Prev. Low Value is ",prevLow,"\n",
                                                    "Current DeMarker Value is ",deMarkerVal,"\n",
                                                    "Prev. DeMarker Value is ",deMarkerPrevVal);
                                           }
                                      

                                      Después de la compilación, buscamos el programa Expert Advisor en la ventana Navegador de MetaTrader 5 y lo ejecutamos. El programa comenzará a funcionar en el gráfico:

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

                                       En caso de divergencia alcista:

                                       Señal de divergencia alcista

                                      La señal generada se mostrará en el comentario del gráfico en la esquina superior izquierda:

                                      • Divergencia alcista
                                      • Máximo actual
                                      • Máximo anterior
                                      • Valor actual de DeMarker
                                      • Valor anterior de DeMarker

                                      En caso de divergencia bajista:

                                       Señal de divergencia bajista

                                      La señal generada se mostrará en el comentario del gráfico en la esquina superior izquierda:

                                      • Divergencia bajista
                                      • Máximo actual
                                      • Máximo anterior
                                      • Valor actual de DeMarker
                                      • Valor anterior de DeMarker

                                      Conclusión

                                      Bien, ya hemos analizado con detalle otra herramienta técnica: el indicador DeMark (DeMarker, DeM). 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. Aquí están dichas estrategias simples:

                                      • Fuerza de DeMarker — genera señales de fuerza o debilidad basadas en la posición del valor actual de DeMarker en relación con su media móvil de 5 periodos.
                                      • DeMarker, OB - OS — genera señales de sobrecompra o sobreventa basadas en la posición del valor actual de DeMarker en una escala de 0 a 1.
                                      • Divergencia según DeMarker — señales de una divergencia alcista o bajista según la posición del indicador DeMarker actual y anterior, así como el extremo actual y anterior uno respecto al otro.

                                      Después de ello, hemos desarrollado un plan paso a paso para cada estrategia analizada, cosa que debería ayudarnos a crear un sistema comercial. 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.

                                      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. Esperamos que haya disfrutado el artículo y haya aprendido algo nuevo de él. Si lo ha encontrado útil, podrá leer los artículos anteriores de esta serie para aprender a desarrollar sistemas comerciales basados en indicadores técnicos populares.

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

                                      DoEasy. Elementos de control (Parte 17): Recortando partes invisibles de objetos, objetos WinForms auxiliares de botón con flechas DoEasy. Elementos de control (Parte 17): Recortando partes invisibles de objetos, objetos WinForms auxiliares de botón con flechas
                                      En el artículo, crearemos la funcionalidad necesaria para ocultar secciones de objetos que quedan más allá de su contenedor; asimismo, crearemos objetos de botón auxiliares con flechas para usarlos como parte de otros objetos WinForms.
                                      Redes neuronales: así de sencillo (Parte 28): Algoritmo de gradiente de políticas Redes neuronales: así de sencillo (Parte 28): Algoritmo de gradiente de políticas
                                      Continuamos analizando los métodos de aprendizaje por refuerzo. En el artículo anterior, nos familiarizamos con el método de aprendizaje Q profundo, en el que entrenamos un modelo para predecir la próxima recompensa dependiendo de la acción realizada en una situación particular. Luego realizamos una acción según nuestra política y la recompensa esperada, pero no siempre es posible aproximar la función Q, o su aproximación no ofrece el resultado deseado. En estos casos, los métodos de aproximación no se utilizan para funciones de utilidad, sino para una política (estrategia) de acciones directa. Precisamente a tales métodos pertenece el gradiente de políticas o policy gradient.
                                      Gráfico de montaña o gráfico de iceberg Gráfico de montaña o gráfico de iceberg
                                      ¿Qué tal si añadimos un nuevo tipo de gráfico a MetaTrader 5? Mucha gente dice que le faltan algunas cosas que ya están presentes en otras plataformas, pero lo cierto es que MetaTrader 5 es una plataforma muy práctica que nos permite hacer cosas que no es posible hacer en muchas otras plataformas, al menos no tan fácilmente.
                                      Aprendiendo a diseñar un sistema de trading con VIDYA Aprendiendo a diseñar un sistema de trading con VIDYA
                                      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 hablaremos sobre el indicador VIDYA (Variable Index Dynamic Average) y crearemos un sistema comercial basado en sus lecturas.