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

Aprendiendo a diseñar un sistema de trading con el indicador de Acumulación/Distribución

MetaTrader 5Trading | 5 agosto 2022, 09:52
815 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

Esta serie de artículos está dedicada al estudio profundo de los indicadores técnicos más populares y su aplicación como estrategias sencillas. Los sistemas comerciales basados en estas estrategias se han desarrollado usando el lenguaje de programación MQL5 para su ejecución en la plataforma comercial MetaTrader 5. En este artículo, nos familiarizaremos con el indicador de Acumulación/Distribución (AD). Este indicador técnico se basa en el volumen, y nos ayuda a observar un instrumento financiero desde una perspectiva diferente. Una vez más, el trabajo sobre el indicador se dividirá en varios temas:

  1. Definición del indicador AD
  2. Estrategia del indicador AD
  3. Esquema de la estrategia del indicador AD
  4. Sistema comercial del indicador AD
  5. Conclusión

En primer lugar, estudiaremos con detalle la teoría sobre este indicador técnico, lo que mide y cómo se puede calcular manualmente (para entender su concepto básico). A continuación, desarrollaremos un sistema comercial basado en él. Asimismo, analizaremos el cálculo del indicador con un ejemplo concreto para entenderlo mejor. Una vez estudiados en profundidad los fundamentos del indicador AD, veremos cómo puede usarse en estrategias sencillas. Después, desarrollaremos un esquema para cada estrategia analizada que nos servirá de ayuda a la hora de escribir un código para el sistema comercial basado en cada estrategia. Tras desarrollar los esquemas para escribir el código, abordaremos lo más interesante del artículo: la programación de diferentes sistemas comerciales basados en las estrategias analizadas en MQL5. El programa resultante se ejecutará en la plataforma comercial.

A estas alturas, ya habremos analizado en profundidad el indicador AD y habremos aprendido a utilizarlo. Acto seguido, crearemos un sistema comercial basado en las sencillas estrategias que hemos comentado. Recomendamos al lector que aplique todo lo aprendido por su cuenta: intente reproducir el código, esto le ayudará a comprender mejor el material. El objetivo principal de este artículo (así como de los demás de esta serie) es enseñar a los programadores principiantes a desarrollar sistemas comerciales basados en los indicadores más populares. Para escribir los códigos, usaremos el MetaQuotes Language (MQL5) y el MetaEditor, el editor de código incorporado en la plataforma MetaTrader 5. Si quiere saber más sobre la plataforma y el editor, le recomiendo que lea "Cómo escribir código MQL5 en el MetaEditor" en uno de mis artículos anteriores. Ahí se describe con detalle cómo instalar el terminal y dónde encontrar el editor de código.

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

Bien, ahora vamos a profundizar en un nuevo bloque de conocimientos que nos ayudará a mejorar.

Definición del indicador AD

Aquí hablaremos con todo detalle del indicador de Acumulación/Distribución (AD), veremos su definición, qué mide y cómo se puede calcular manualmente. El indicador AD fue desarrollado por Mark Chaikin. Es un indicador basado en el volumen, es decir, se calcula usando los volúmenes. En general, el concepto de volumen es un componente importante del trading en su conjunto, ya que mide el flujo total de dinero que entra y sale de un instrumento. El volumen también se usa para confirmar una tendencia o advertir de un retroceso. Si quiere saber más sobre las tendencias, le recomendamos que lea la sección "Definición de la tendencia" de mi artículo publicado anteriormente.

Como cualquier indicador acumulativo, la línea AD supone la suma intermedia del volumen de flujo de dinero de cada periodo. Esto resulta especialmente visible en la forma de calcular el indicador. La línea de Acumulación/Distribución se calcula en varios pasos.

Bien, estos tres pasos son los siguientes:

  1. Cálculo del multiplicador del flujo de dinero = ((cierre - mínimo) - (máximo - cierre))/(máximo - mínimo)
  2. Cálculo del volumen de flujo de dinero = Multiplicador de flujo de dinero * volumen por periodo
  3. Línea AD = valor AD anterior + volumen actual de flujo de dinero

Veamos ahora el cálculo de todos estos pasos partiendo de un ejemplo. Supongamos que tenemos los siguientes datos para un instrumento:

Día Máximo Mínimo Cerrar Volumen
1 55 53 54 12000
2 56 54 55 10000
3 61 59 60 15000
4 67 64 65 20000
5 63 58 60 10000
6 58 52 55 5000
7 64 58 60 7000
8 52 47 50 7500
9 52 48 48 8000
10 50 48 49 5000
11 49 47 48 6000
12 48 47 47 7500
13 50 46 48 9000
14 52 45 47 10000
15 55 46 49 7000
16 53 45 47 7500
17 51 43 46 6000
18 50 42 44 5000
19 50 43 45 15000

Calcularemos los valores del indicador AD a partir de este recuadro de datos. Bien, repasemos todos los pasos:

En primer lugar, calculamos el multiplicador de flujos de dinero = ((Close - Low) - (High-Close))/(High-Low). Obtendremos un recuadro de datos como este:

Cálculo de AD

A continuación, calculamos el volumen del flujo de dinero = multiplicador de flujo de dinero * volumen por periodo. Obtenemos los siguientes datos:

Cálculo de AD 1

El tercer paso consiste en calcular la línea AD = valor anterior de la línea AD + volumen actual del flujo de dinero. Obtenemos los datos siguientes:

Cálculo de AD 2

Hemos calculado el indicador AD de forma manual, pero en realidad no tenemos que hacerlo, ya que existe un indicador ya preparado para ello. Todos estos pasos los hemos estudiado para entender mejor el funcionamiento del indicador. Ahora, si queremos usar este indicador, todo lo que tenemos que hacer es seleccionarlo de la lista de otros indicadores disponibles en el terminal MetaTrader 5.

Para ello, en la ventana del terminal MetaTrader 5, seleccionamos el menú "Insertar" --> Indicadores --> Indicadores de volumen --> Acumulación/Distribución

Iniciando AD en la plataforma

Una vez seleccionado el indicador, se abrirá una ventana para configurar los parámetros:

Ventana de parámetros del indicador AD

1. Tipos de volúmenes: de tics o real.

2. Color de la línea AD.

3. Tipo de línea AD.

4. Grosor de la línea AD.

Ajuste los parámetros necesarios, pulse OK y el indicador aparecerá en el gráfico como mostramos a continuación:

Indicador AD en el gráfico

Veamos ahora cómo podemos utilizar el indicador AD.


Estrategia del indicador AD

En esta sección hablaremos sobre cómo podemos utilizar el indicador AD con algunas estrategias sencillas. Esperamos que esta parte le sea útil y le ayude a encontrar nuevas ideas comerciales.

Para las estrategias analizadas, podría ser necesario realizar una optimización. Esto es normal, porque el propósito principal aquí es compartir estrategias simples que deben ayudar a entender el concepto básico del indicador AD y mostrar un ejemplo sobre cómo podemos crear un sistema comercial basado en este indicador usado el lenguaje de programación MQL5. Así que asegúrese de poner a prueba cada estrategia antes de usarla en una cuenta real, y no dude en optimizarla si fuera necesario. Seleccione el periodo que mejor se adapte a sus necesidades comerciales concretas.

Veamos ahora algunas estrategias simples basadas en el indicador AD.

  • Estrategia uno: movimiento simple de AD

Según esta estrategia, determinaremos si la línea AD es ascendente o descendente. Para ello, solo tendremos que comparar el valor AD actual con el valor anterior. Si el valor AD actual es mayor que el valor anterior, la línea AD crece. Por el contrario, si el valor actual es inferior al anterior, el AD disminuye.

Resumiendo:

AD actual > AD anterior --> la línea AD sube

AD actual < AD anterior --> la línea AD baja

  • Segunda estrategia: fuerza de AD

Esta estrategia nos ayudará a determinar si el movimiento actual de la línea AD es fuerte o débil. Para ello, solo tendremos que comparar el valor AD actual con el valor máximo o mínimo de los últimos diez valores AD. Si el valor actual es mayor que el valor máximo de los diez AD anteriores, el AD actual se considerará fuerte. Por el contrario, si el valor actual resulta menor que el valor mínimo de los diez AD anteriores, el valor actual de AD se considerará débil.

Es decir:

AD actual > valor máximo de los 10 anteriores --> el valor AD actual es fuerte

AD actual < valor mínimo de los 10 anteriores --> el valor AD actual es débil

  • Estrategia tres: estrategia AD simple - tendencia alcista

Según esta estrategia, determinaremos el movimiento alcista actual durante una tendencia alcista: es decir, si el movimiento es fuerte o se ha formado una divergencia bajista (en forma simple). Hablamos de divergencia bajista cuando el precio forma un nuevo máximo, pero el indicador no confirma este movimiento, porque se está moviendo hacia abajo. Utilizaremos los dos últimos valores AD y los dos últimos valores máximos para determinar los indicadores: elegiremos este cálculo para mayor simplicidad, pero usted podrá editar esta parte para obtener los datos que desee. Este es un ejemplo del concepto en funcionamiento que establece que es mejor cuando el volumen se mueve con la tendencia: durante una tendencia alcista, el volumen aumentará cuando haya un movimiento alcista y disminuirá cuando haya una corrección.

Vamos a comparar el valor AD actual con el valor anterior, y también compararemos el máximo actual con el máximo anterior. Cuando el valor AD actual es mayor que el valor AD anterior y el máximo actual es mayor que el máximo anterior, el movimiento alcista será fuerte. Y si el AD actual es menor que el AD anterior y el máximo actual es mayor que el máximo anterior, se formará una divergencia bajista.

Es decir:

AD actual > AD anterior y máximo actual > máximo anterior --> Movimiento fuerte durante la tendencia alcista

AD actual < AD anterior y máximo actual > máximo anterior --> Movimiento fuerte durante la tendencia alcista

  • Estrategia cuatro: estrategia AD simple - tendencia bajista

Se trata de lo contrario a la estrategia AD simple: tendencia alcista. Determinaremos si el movimiento bajista actual es fuerte o si se ha formado una divergencia alcista. Hablamos de divergencia alcista cuando el precio forma un nuevo mínimo, pero el indicador no confirma este movimiento, porque se está moviendo hacia arriba. Para determinar el movimiento, compararemos los dos últimos valores del indicador AD y los dos últimos valores del mínimo. Cuando el AD actual es inferior al AD anterior y el mínimo actual es inferior al mínimo anterior, el movimiento bajista será fuerte. Y si el AD actual es mayor que el AD anterior y el mínimo actual es menor que el mínimo anterior, se formará una divergencia alcista.

No es nada complicado:

AD actual < AD anterior y mínimo actual < mínimo anterior --> Movimiento fuerte durante la tendencia bajista

AD actual > AD anterior y mínimo actual < mínimo anterior --> Divergencia alcista 


Esquema de la estrategia del indicador AD

Ha llegado el momento de ver la creación de un sistema comercial paso a paso. En esta parte, crearemos un esquema paso a paso de cada estrategia que nos ayudará a desarrollar un sistema comercial. A nuestro juicio, este es un paso muy importante en el proceso de creación de cualquier sistema comercial. Esto nos ayudará a definir de forma clara y detallada lo que queremos del futuro programa, lo que debería hacer.

Empezaremos desarrollando un sencillo programa para el indicador AD que mostrará un comentario en el gráfico con el valor AD actual. Esta será la base de todas las estrategias futuras. Lo llamaremos AD simple (porque la estrategia es realmente lo más simple posible: la muestra de un comentario). El esquema para crear esta estrategia sería el siguiente:

Esquema de la estrategia AD simple

 

A continuación, desarrollaremos los esquemas para cada una de las estrategias analizadas.

  • Estrategia uno: movimiento simple de AD

El sistema tendrá que comprobar continuamente el valor AD actual y el anterior en cada tick. A continuación, el sistema deberá determinar si el valor actual del asesor es mayor que el valor anterior o no. El programa deberá mostrar un comentario sobre el gráfico: línea AD ascendente, valor AD actual y valor AD anterior. Cada valor se mostrará en una línea aparte. En la situación inversa, si el valor actual es menor que el valor anterior, deberá aparecer el siguiente comentario en el gráfico: línea AD descendente, valor AD actual y valor AD anterior. Los valores se mostrarán de nuevo en una línea aparte. El esquema para crear este sistema de comercio será el siguiente:

Esquema de AD - Movimiento simple

  • Segunda estrategia: fuerza de AD

Ahora desarrollaremos un sistema comercial que podrá comprobar continuamente tres valores en cada tick. Estos tres valores serán: el AD actual, el valor máximo y el valor mínimo de los diez valores AD anteriores. Si el valor AD actual es mayor que el valor AD máximo, el sistema retornará la notificación correspondiente, el valor AD actual, el valor AD máximo y el valor AD mínimo. Cada valor se muestra en una línea aparte. Si el valor AD actual es inferior al mínimo, el sistema deberá retornar la notificación correspondiente, el valor AD actual, el máximo y el mínimo. Cada valor se muestra en una línea aparte.

El esquema de desarrollo será el que sigue:

Esquema de AD - Fuerza simple

  • Estrategia tres: estrategia AD simple - tendencia alcista

Vamos a crear un sistema comercial para esta estrategia que se base en cuatro valores: el AD actual, el AD anterior, el máximo actual y el máximo anterior. Volvemos a comprobar los valores en cada tick. A continuación, los sistemas deberán determinar si el AD actual es mayor que el AD anterior y si el máximo actual del AD anterior es mayor. Basándose en la comparación, el sistema deberá mostrar en el gráfico un comentario sobre un movimiento alcista durante la tendencia alcista, el AD actual, el AD anterior, los máximos actuales y los anteriores. Cada valor se muestra en una línea aparte. Otro posible caso a considerar es si el AD actual es menor que el anterior y el máximo actual es mayor que el anterior. El sistema debe informar de una divergencia bajista, el valor AD actual, el valor AD anterior, el máximo actual y el máximo anterior. Todos los valores se muestran en líneas distintas.

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

Esquema de AD - tendencia alcista - plan

  • Estrategia cuatro: estrategia AD simple - tendencia bajista

Vamos a crear un sistema comercial para esta estrategia basado en cuatro valores: el AD actual, el AD anterior, el mínimo actual y el mínimo anterior. Volvemos a comprobar los valores en cada tick. A continuación, los sistemas deberán determinar si el AD actual es mayor que el AD anterior y si el máximo actual del AD anterior es mayor. Basándose en la comparación, el sistema deberá mostrar en el gráfico un comentario sobre un fuerte movimiento bajista durante la tendencia bajista, el AD actual, el AD anterior, el mínimo actual y el mínimo anterior. Otro caso posible es si el AD actual es mayor que el AD anterior y el mínimo actual es menor que el mínimo anterior. El sistema deberá informar de la divergencia alcista, el AD actual, el AD anterior, el mínimo actual y el mínimo anterior. Todos los valores se muestran en líneas distintas.

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

Esquema de AD - tendencia bajista - plan


Sistema comercial del indicador AD

En la siguiente parte, ya procedemos a desarrollar sistemas comerciales basados en dichas estrategias. Comenzaremos creando un sistema sencillo que solo retornará el valor AD actual, que será la base de nuestras estrategias. El código de la estrategia será el que sigue:

  • Creamos un array para los valores AD utilizando la función double para representar el valor en la parte fraccionaria.
double ADArray[];
  • Clasificamos el array de precios a partir de los datos actuales. Para hacer esto, usaremos la función ArraySetAsSeries:
ArraySetAsSeries(ADArray,true);
  • Determinamos el AD con la ayuda de la función iAD 1, para ello, crearemos la variable entera ADDef. La función iAD retornará el manejador del indicador de Acumulación/Distribución y sus parámetros (símbolo, periodo y volumen utilizado en los cálculos).
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
  • Rellenamos el array OBVArray con los valores OBVDef usando la función CopyBuffer, que retornará el número de datos copiados. Los parámetros de la función son: el manejador del indicador, el número de búfer, la hora de inicio, la hora de finalización y el búfer:
CopyBuffer(ADDef,0,0,3,ADArray);
  • Calculamos el valor AD actual utilizando la función NormalizeDouble, que retornará un valor de tipo double. Para ello, crearemos también una variable entera ADValue. 
int ADValue=NormalizeDouble(ADArray[0],5);
  • Mostramos la señal generada en el gráfico usando la función Comment:
Comment("AD Value is: ",ADValue);

A continuación, podemos ver el código completo de este asesor:

//+------------------------------------------------------------------+
//|                                                    Simple AD.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()
  {
   //Create array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD value
   int ADValue=NormalizeDouble(ADArray[0],5);
   
   //creating a comment with AD value
   Comment("AD Value is: ",ADValue);  
  }
//+------------------------------------------------------------------+

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

AD en el Navegador

El programa podrá iniciarse arrastrándolo y soltándolo en el gráfico. Se abrirá la ventana siguiente:

Ventana de la estrategia de AD simple

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

Estrategia de AD simple en el gráfico

A continuación podemos ver ejemplos de señales generadas por el asesor que hemos creado:

Señal de prueba de la estrategia AD simple

Si quiere asegurarse de que el asesor generará exactamente el mismo valor que el indicador original de MetaTrader 5, podrá ejecutar el indicador y el asesor simultáneamente. Podemos ver que son lo mismo:

AD simple - las mismas señales

  • Estrategia uno: movimiento simple de AD

A continuación, le mostraremos el código completo para crear dicha estrategia: El programa resultante podrá ejecutarse en el gráfico, donde generará las señales:

//+------------------------------------------------------------------+
//|                                           Simple AD 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()
  {
   //Create array for AD
   double ADArray[];
   
   //sorting array from the current data
   ArraySetAsSeries(ADArray,true);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //Comparing two values and giving signal
   //Rising AD
   if(ADCurrrentValue>ADPrevValue)
   {
      Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }
   
   //Declining AD
   if(ADCurrrentValue<ADPrevValue)
   {
      Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue);
   }  
  }
//+------------------------------------------------------------------+

El código anterior difiere del código básico en los siguientes puntos:

  • Hemos calculado los dos valores del AD actual y el anterior:
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);

  • Hemos establecido las condiciones y los comentarios generados sobre esta estrategia:
    • La línea AD ascendente:
if(ADCurrrentValue>ADPrevValue)
{
 Comment("AD line is rising","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
}

    • La línea AD descendente:
if(ADCurrrentValue<ADPrevValue)
{
 Comment("AD line is declining","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue);
} 

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

AD en el Navegador 2

Clicamos dos veces y se abrirá una ventana como ésta:

Ventana del programa AD - Movimiento simple

El programa aparecerá ahora en el gráfico después de pulsar "OK":

AD - Movimiento simple - en el gráfico

A continuación, se representa un ejemplo de las señales generadas mostrando la ventana de datos: actuales y anteriores

La línea AD ascendente

Datos actuales: 

Movimiento simple de AD - Crecimiento de AD - datos actuales

 

Datos anteriores:

Movimiento simple de AD - Crecimiento de AD - datos anteriores

AD descendente

Datos actuales:

Movimiento simple de AD - disminución de AD - datos actuales

Datos anteriores:

 Movimiento simple de AD - disminución de AD - datos anteriores

  • Segunda estrategia: fuerza de AD

A continuación, le mostramos el código completo de un asesor que realiza todas estas acciones:

//+------------------------------------------------------------------+
//|                                           Simple AD strength.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
void OnTick()
  {
   //Create array for AD
   double ADArray[];
   
   //sorting the array from the current data
   ArraySetAsSeries(ADArray,true);
  
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,10,ADArray);
 
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
  
   //Defining Max and Min values from the last 10 AD values
   int ADMax =ArrayMaximum(ADArray,1,10);
   int ADMin =ArrayMinimum(ADArray,1,10);
   
   //Calculating Max and Min values
   int ADMaxValue=ADArray[ADMax];
   int ADMinValue=ADArray[ADMin];

   //Comparing two values and giving signal
   //AD current is strong
   if(ADCurrrentValue>ADMaxValue)
   {
      Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
   
   //AD current is weak
   if(ADCurrrentValue<ADMinValue)
   {
      Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
   "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
   }
  }
//+------------------------------------------------------------------+

Aquí hay muchas diferencias respecto al código anterior. Vamos a verlas:

  • Hemos determinado los valores AD máximos y mínimos utilizando las funciones ArrayMaximum y ArrayMinimum. Para ello, hemos creado las variables enteras ADMaxValue y ADMinValue. ArrayMaximum retornará el índice del elemento del array encontrado y buscará el elemento más grande. Sus parámetros son: un array numérico, el índice de inicio y el número de elementos a buscar. ArrayMinimum es similar a ArrayMaximum, pero buscará el elemento más pequeño.
int ADMax =ArrayMaximum(ADArray,1,10);
int ADMin =ArrayMinimum(ADArray,1,10);

  • Hemos calculado ADMaxValue y ADMinValue: para ello se crearán variables enteras:
int ADMaxValue=ADArray[ADMax];
int ADMinValue=ADArray[ADMin];

  • Configuración de las condiciones de la estrategia y comentarios para cada condición.
    • Valor fuerte de AD:
if(ADCurrrentValue>ADMaxValue)
{
 Comment("AD Current value is strong","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}

    • Valor débil de AD:
if(ADCurrrentValue<ADMinValue)
{
 Comment("AD Current value is weak","\n","AD current value is: ,",ADCurrrentValue,
 "\n","AD Max is: ",ADMaxValue,"\n","AD Min is: ",ADMinValue);
}

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

AD en el Navegador 3

 

Arrastramos nuestro programa desde el Navegador al gráfico y lo soltamos. Se abrirá una ventana como esta:

Ventana del programa AD Strength

El programa aparecerá ahora en el gráfico después de pulsar "OK":

Programa AD Strength en el gráfico

Los siguientes son ejemplos de señales de este programa:

AD fuerte:

Simple AD Strength - señal de fuerza

AD débil:

Simple AD Strength - débil

  • Estrategia tres: estrategia AD simple - tendencia alcista

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

//+------------------------------------------------------------------+
//|                                          Simple AD - uptrend.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()
  {
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   //calculating current and previous highs
   double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
   double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 
   
   //Comparing two values and giving signal
   //Strong Up move
   if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current high value is: ",CurrentHighValue,
      "\n","Previous high value is: ",PrevHighValue);    
   }   
   
   //in case of divergence
   if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
   {
      Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentHighValue,
      "\n","Previous low value is: ",PrevHighValue);      
   }   
  }
//+------------------------------------------------------------------+

Diferencias en este código:

  • Hemos creado dos arrays para los valores AD usando una función double y dos arrays de precios utilizando la función MqlRates para almacenar la información sobre el precio, el volumen y el spread:
double ADArray[];
MqlRates PriceArray[];


  • Hemos clasificado dos matrices, una para los valores AD utilizando la función ArraySetAsSeries y otra para los precios utilizando la función CopyRates para obtener los datos históricos de la estructura MqlRates (también hemos creado para ello una variable entera Data).
ArraySetAsSeries(ADArray,true);
int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);

  • Hemos definido AD, y rellenado el array AD:
int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);

CopyBuffer(ADDef,0,0,3,ADArray);

  • Hemos calculado el AD actual, el AD anterior, el máximo actual y el máximo anterior:
int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
int ADPrevValue=NormalizeDouble(ADArray[1],5);

double CurrentHighValue=NormalizeDouble(PriceArray[2].high,5);         
double PrevHighValue=NormalizeDouble(PriceArray[1].high,5); 

  • Hemos establecido las condiciones de la estrategia y los comentarios necesarios:
    • Movimiento alcista fuerte
if(ADCurrrentValue > ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Strong Up Move During The Uptrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current high value is: ",CurrentHighValue,
 "\n","Previous high value is: ",PrevHighValue);    
} 

    • Divergencia bajista:
if(ADCurrrentValue < ADPrevValue && CurrentHighValue>PrevHighValue)
{
 Comment("Bearish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentHighValue,
 "\n","Previous low value is: ",PrevHighValue);      
} 

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

AD en el Navigator 4

Clicamos dos veces para iniciar, y aparecerá la siguiente ventana:

Ventana de AD - tendencia alcista

El programa aparecerá ahora en el gráfico después de pulsar "OK":

AD - tendencia alcista - en el gráfico

Aquí tenemos un ejemplo de las señales generadas que muestra la ventana de datos con los datos actuales y anteriores:

Movimiento alcista fuerte

Datos actuales:

 Estrategia de tendencia alcista de AD - señal ascendente fuerte, datos actuales

Datos anteriores:

Estrategia de tendencia alcista de AD - señal ascendente fuerte, datos anteriores

Divergencia bajista

Datos actuales:

Estrategia de tendencia alcista de AD - señal bajista, datos actuales

Datos anteriores:

Estrategia de tendencia alcista de AD - señal bajista, datos anteriores

  • Estrategia cuatro: estrategia AD simple - tendencia bajista

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

//+------------------------------------------------------------------+
//|                                        Simple AD - downtrend.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()
  {
   //create a string variable for signal
   string signal="";
   
   //Create two arrays for AD and price
   double ADArray[];
   MqlRates PriceArray[];
   
   //sorting the two arrays
   ArraySetAsSeries(ADArray,true);
   int Data=CopyRates(_Symbol,_Period,0,3,PriceArray);
   
   //defining AD
   int ADDef=iAD(_Symbol,_Period,VOLUME_TICK);
   
   //filling the ADArray with ADDef
   CopyBuffer(ADDef,0,0,3,ADArray);
   
   //calculating current AD and previous values
   int ADCurrrentValue=NormalizeDouble(ADArray[0],5);
   int ADPrevValue=NormalizeDouble(ADArray[1],5);
   
   double CurrentLowValue=NormalizeDouble(PriceArray[2].low,5);         
   double PrevLowValue=NormalizeDouble(PriceArray[1].low,5); 
   
   //Comparing two values and giving signal
   //Strong down move
   if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }
   
   //in case of divergence
   if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
   {
      Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
      "\n","AD previous value is: ",ADPrevValue,
      "\n","Current low value is: ",CurrentLowValue,
      "\n","Previous low value is: ",PrevLowValue);      
   }  
  }
//+------------------------------------------------------------------+

Diferencias en este código:

  • Las condiciones de la estrategia usadas para mostrar los comentarios:
    • Un fuerte movimiento bajista:
if(ADCurrrentValue < ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Strong Down Move During The Downtrend","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
}

    • Una divergencia alcista:
if(ADCurrrentValue > ADPrevValue && CurrentLowValue<PrevLowValue)
{
 Comment("Bullish Divergence","\n","AD current value is: ",ADCurrrentValue,
 "\n","AD previous value is: ",ADPrevValue,
 "\n","Current low value is: ",CurrentLowValue,
 "\n","Previous low value is: ",PrevLowValue);      
} 

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

 AD en el Navegador 5

Arrastramos nuestro programa desde el Navegador al gráfico y lo soltamos. Se abrirá una ventana como esta:

AD - Ventana del programa AD downtrend

El programa aparecerá ahora en el gráfico después de pulsar "OK":

Sistema AD - tendencia bajista - en el gráfico

Aquí tenemos un ejemplo de las señales generadas que muestra la ventana de datos y representa los valores actuales y anteriores:

Movimiento bajista fuerte

Datos actuales:

Estrategia AD downtrend - señal de movimiento bajista fuerte, datos actuales

Datos anteriores:

Estrategia AD downtrend - señal de movimiento bajista fuerte, datos anteriores

Divergencia alcista

Datos actuales:

Estrategia AD downtrend - señal de divergencia alcista, datos actuales

Datos anteriores:

Estrategia AD downtrend - señal de divergencia alcista, datos anteriores

\


Conclusión

En este artículo, hemos hablado del indicador de Acumulación/Distribución (AD), uno de los indicadores basados en el volumen. Hemos aprendido qué es el indicador AD, qué mide y cómo se puede calcular manualmente. También hemos visto cómo se puede utilizar este indicador con la ayuda de estrategias sencillas. Dichas estrategias se basan en el movimiento de AD, la fuerza del mismo y el rendimiento durante una tendencia alcista o bajista. Además, hemos desarrollado un esquema para cada estrategia analizada que nos ayudará a escribir un código para el sistema comercial basado en cada estrategia. Después de eso, hemos visto el desarrollo de varios sistemas comerciales: hemos creado un asesor experto en MQL5 para cada estrategia, hemos obtenido un programa que puede trabajar en la plataforma comercial MetaTrader 5, y también hemos visto ejemplos de las señales generadas. El terminal permite automatizar estas estrategias para generar señales. Esta es una gran característica, ya que la computadora trabaja para nosotros, o al menos nos ofrece información clara, precisa y rápida que nos ayuda a mejorar las decisiones comerciales y nos ahorra emociones que a veces pueden resultar perjudiciales.

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. Al fin y al cabo, lo que funciona para otros no tiene por qué funcionar para usted. El objetivo principal de este y otros artículos de esta serie es aprender a programar estrategias simples en MQL5 usando los indicadores técnicos más populares. Esperamos que pueda aplicar lo aprendido e intentar programar por su cuenta, ya que la práctica es un factor importante en cualquier proceso de aprendizaje.

También esperamos que el artículo le resulte útil en un sentido práctico y le ayude a encontrar nuevas ideas. 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/10993

Vídeo: Configuramos MetaTrader 5 y MQL5 para el comercio automatizado sencillo Vídeo: Configuramos MetaTrader 5 y MQL5 para el comercio automatizado sencillo
En este breve curso en vídeo, aprenderá cómo descargar, instalar y configurar MetaTrader 5 para el comercio automatizado. También aprenderá cómo configurar el gráfico y las opciones del comercio automatizado. Asimismo, podrá realizar su primera prueba con la historia y aprenderá a importar un asesor que pueda comerciar por sí mismo las 24 horas del día, los 7 días de la semana sin que usted tenga que sentarse frente a una pantalla.
Redes neuronales: así de sencillo (Parte 16): Uso práctico de la clusterización Redes neuronales: así de sencillo (Parte 16): Uso práctico de la clusterización
En el artículo anterior, creamos una clase para la clusterización de datos. En este artículo, queremos compartir con el lector diferentes opciones de uso de los resultados obtenidos para resolver problemas prácticos en el trading.
DoEasy. Elementos de control (Parte 7): Elemento de control "etiqueta de texto". DoEasy. Elementos de control (Parte 7): Elemento de control "etiqueta de texto".
En este artículo, crearemos la clase de control «Etiqueta de texto» de WinForms. Dicho objeto se podrá colocar en cualquier lugar de nuestro contenedor, y su propia funcionalidad replicará algunas de las funcionalidades de las etiquetas de texto de MS Visual Studio: podremos establecer los parámetros de fuente para el texto mostrado.
Aprendiendo a diseñar un sistema de trading con OBV Aprendiendo a diseñar un sistema de trading con OBV
En este nuevo artículo de nuestra serie para principiantes en programación MQL5, aprenderemos a construir sistemas de trading usando los indicadores más populares. En esta ocasión, analizaremos el indicador On Balance Volume (OBV), aprenderemos a utilizarlo y también a crear un sistema comercial basado en él.