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

Aprendiendo a diseñar un sistema de trading con ADX

MetaTrader 5Trading | 28 junio 2022, 16:28
1 255 0
Mohamed Abdelmaaboud
Mohamed Abdelmaaboud

Introducción

En este artículo, veremos una nueva herramienta de trading técnico; sin duda, una de las más útiles y significativas a la hora de comerciar mejor y entender los movimientos del mercado. Porque una de las características más útiles de los indicadores técnicos es que pueden mostrarnos lo que los precios no pueden mostrar, y esto se basará en el cálculo de cada indicador; uno de estos indicadores útiles es el indicador del índice direccional medio (ADX). Hoy aprenderemos más sobre este indicador y veremos cómo usarlo con una estrategia simple; sin duda, cuando aprendemos algo en profundidad, somos capaces de obtener más conocimientos y utilizar mejor estos.

Trataremos los siguientes temas:

  1. Definición de ADX
  2. Estrategia de ADX
  3. Modelo de ADX
  4. Sistema comercial de ADX
  5. Conclusión

En el tema «Definición del ADX», discutiremos qué es el indicador del índice direccional medio (ADX) y qué mide, y cómo podemos calcularlo manualmente para poder entenderlo en profundidad y utilizarlo de forma rentable. Entonces después de entender bien el indicador y cómo funciona, vamos a aprender una estrategia simple que se puede usar en nuestro comercio: la conoceremos después del tema «Estrategia de ADX». Después, en el tema «Modelo de ADX», aprenderemos a diseñar un plan modelo que nos ayude a implementar un código para diseñar un sistema comercial para esta estrategia. Luego aprenderemos a escribir un sistema comercial utilizando esta estrategia, como veremos en el tema «Sistema comercial de ADX».

Para ello, usaremos la plataforma comercial MetaTrader 5 y el editor MetaQuotes Language incorporado en MetaTrader 5, que el lector podrá descargar en el siguiente enlace: https://www.metatrader5.com/es/download

Después de descargar e instalar MetaTrader 5, encontrará lo mismo que se muestra en la siguiente imagen para la plataforma comercial:

MT5 

Le recomendamos que aplique los materiales de este artículo por su cuenta, ya que podrá desarrollar sus habilidades rápidamente y obtendrá conocimientos profundos del tema. La práctica es una clave esencial para cualquier desarrollo. Así que será mejor intentar aplicar cada concepto y probarlo por cuenta propia, porque así aprenderemos a diseñar un sistema comercial utilizando una herramienta técnica, y lo haremos con MQL5, escribiendo algunos códigos para crear un asesor experto o programa que nos ayude a comerciar de forma adecuada. También será importante tener una cuenta demo para probar y aplicar lo aprendido: puede hacer esto si no sabe, abriendo una cuenta demo en MetaTrader 5, pulsando la pestaña de archivos del terminal de MetaTrader 5 --> Abrir una cuenta --> puede introducir el nombre de su bróker para abrir esta cuenta demo a través de él o elegir MetaQuotes --> Siguiente --> Seleccione Abrir una cuenta demo para operar con dinero virtual sin riesgo --> Siguiente --> introduzca sus datos y determine los requisitos de la cuenta y luego marque junto a Acepto --> Siguiente --> entonces encontrará sus credenciales de la cuenta demo --> Finalizar.

Ahora podrá utilizar esta cuenta para comerciar virtualmente. Ábrala clicando en la pestaña Archivo --> Entrar en la cuenta comercial --> introduzca sus credenciales de la cuenta demo y pulse OK.

Descargo de responsabilidad: Cualquier información se proporciona «tal cual», con fines exclusivamente informativos, y no tiene ninguna intención comercial o de asesoramiento. La información no garantiza ninguna clase de resultado. Si decide utilizar estos materiales en cualquiera de sus cuentas de trading, lo hará bajo su propio riesgo y será el único responsable

Ahora, vamos a comenzar a familiarizarnos con una nueva herramienta que puede marcar una diferencia a mejor en nuestros resultados comerciales.


Definición de ADX

En esta parte, hablaremos de uno de los indicadores más populares en el mundo del trading técnico: veremos qué es, qué mide y cómo podemos calcularlo para poder entenderlo mejor y luego poder utilizarlo con las estrategias disponibles o incluso con nuevas ideas. El índice direccional medio (ADX), fue desarrollado por Welles Wilder. Se encarga de medir la tendencia y confirmar si hay tendencia o no, porque según su cálculo, se comparará el rango comercial de un periodo con el rango comercial del periodo anterior.

Como resultado de esta comparación, podremos encontrar que tenemos:

  • Un avance o un descenso (movimiento direccional positivo o movimiento direccional negativo).
  • Ni avance ni retroceso.
  • Un avance y un retroceso.

Si hay un movimiento direccional positivo, significará que el máximo de un periodo ha superado el máximo del periodo anterior, y su símbolo será (+DM).

La siguiente imagen nos muestra cómo puede darse en un gráfico según la acción del precio:

+DM

Y viceversa, si existe un movimiento direccional negativo, significará que el mínimo de un periodo ha superado el mínimo del periodo anterior, y su símbolo será (-DM).

La siguiente imagen nos muestra cómo puede darse en un gráfico según la acción del precio:

-DM

Si no tenemos un movimiento direccional positivo ni tenemos un movimiento direccional negativo, esto significará que el máximo no ha superado el máximo anterior, y que el mínimo no ha superado el mínimo anterior.

La siguiente imagen nos muestra cómo puede darse en un gráfico según la acción del precio:

No +DM-DM

Si tenemos tanto un movimiento direccional positivo como un movimiento direccional negativo, significará que el máximo ha superado al máximo anterior, y el mínimo ha superado al mínimo anterior.

La siguiente imagen nos muestra cómo puede darse en un gráfico según la acción del precio: 

 +DM-DM

Veamos cómo podemos calcularlo, ya que esto nos ofrecerá más información. Por lo tanto, a continuación veremos los pasos necesarios para calcular (ADX). Debemos considerar que todos los valores tienen que ser absolutos:

1- Calculamos +DM y -DM:

En este paso, deberemos determinar si hay un movimiento hacia arriba o hacia abajo para el movimiento actual en comparación con el anterior. Por lo tanto, vamos a calcular dos cosas:

  • (+DM) se refiere a un movimiento direccional positivo, si tenemos un movimiento ascendente. 
Se calculará usando la fórmula (+DM = máximo actual - máximo anterior)
  • (-DM) se refiere a un movimiento direccional negativo, si tenemos un movimiento descendente. 
Se calculará usando la fórmula (-DM = mínimo actual - mínimo anterior)

Así, podremos verificar cada periodo calculado y comprobar si es +DM, -DM, o cualquier otra cosa.

  • Si tenemos +DM, entonces:
+DM=n
-DM = 0
  • Si tenemos -DM, entonces:

-DM = n

+DM = 0

En algunos casos, podemos encontrar otros escenarios donde no hay valores para (+DM y -DM), o podemos encontrar valores para ambos (+DM y -DM). Aquí tenemos cómo podemos tratar con eso:

  • Si no tenemos (+DM y -DM), entonces:

+DM = 0

-DM = 0

sin DM

  • Si tenemos ambos (+DM y -DM), entonces compararemos entre +DM y -DM, y tomaremos en cuenta el mayor valor, o bien se ignorará si hay valores iguales entre sí:
Tendremos en cuenta solo +DM>-DM = +DM,

 +DM mayor

Solo se considerará +DM<-DM = -DM

-DM mayor

+DM=-DM = ambos serán ignorados

+DM igual a -DM

2- Calculamos el Rango Verdadero (TR):

En este paso, y después de calcular DM, calcularemos (TR), y será el mayor valor de los siguientes:

  • La diferencia entre el máximo y el mínimo actual.
  • La diferencia entre el máximo actual y el cierre anterior.
  • La diferencia entre el mínimo actual y el cierre anterior.
3- Calculamos la suma de los 14 períodos calculados (+DM, -DM y TR)

Después de calcular el primer periodo de 14 (+DM,-DM, y TR), usaremos las siguientes fórmulas para calcular los siguientes valores después de 14:

+DM 15 = (anterior +DM - (anterior +DM/14)) +DM actual

-DM 15 = (-DM anterior - (-DM/14 anterior)) + -DM actual

TR 15 = (TR anterior - (TR/14 anterior)) + TR actual

4- Calculamos 14 periodos +DI y -DI
+DI 14 = 100*(+DM14/TR14)
-DI 14 = 100*(-DM14/TR14)

5- Calculamos la diferencia entre +DI y -DI

DI 14 Diff = (+DI 14) - (-DI 14)

6- Calculamos la suma de +DI y -DI

DI 14 Suma = (+DI 14) + (-DI 14)

7- Calculamos DX

DX = 100*((diferencia entre +DI y -DI)/(suma de +DI y -DI))
8- Calculamos ADX
ADX = media de 14 periodos de DX

Siguiendo los pasos anteriores, podemos calcular ADX. Ahora, vamos a ver un ejemplo de aplicación de estos pasos. Si tenemos los siguientes datos:

Día High Low Close
1 110 90 100
2 140 120 130
3 160 120 140
4 150 110 130
5 140 100 130
6 150 130 140
7 170 150 160
8 180 160 170
9 170 150 155
10 170 130 140
11 180 155 160
12 190 175 180
13 220 190 190
14 230 200 200
15 215 205 210
16 200 190 200
17 195 180 190
18 195 180 185
19 210 185 195
20 220 190 200
21 233 195 208
22 246 200 216
23 258 205 223
24 271 210 231
25 283 215 238
26 296 220 246
27 308 225 253
28 321 230 261
29 333 235 268
30 346 240 276

Vamos a calcular el indicador ADX para los datos anteriores:

1- Calculamos +DM y -DM:

+DM = máximo actual - máximo anterior

-DM = mínimo actual - mínimo anterior

Ejemplo - DM

2- Calculamos el TR:

Será el mayor valor de los siguientes:

  • La diferencia entre el máximo y el mínimo actual.
  • La diferencia entre el máximo actual y el cierre anterior.
  • La diferencia entre el mínimo actual y el cierre anterior.

La siguiente imagen muestra el TR después de su cálculo:

Ejemplo - TR

3- Calculamos la suma de los 14 periodos calculados +DM, -DM, y TR:

+DM 14 = Suma +DM 1(día 2: día 15)

-DM 14 = Suma -DM 1(día 2: día 15)

TR 14 = Suma TR (día 2: día 15)

Ejemplo - 14 DM-TR

4- Calculamos 14 periodos +DI y-DI; el primer cálculo será a partir del día 15, ya que necesitamos 14 DM para calcular 14 DI:

+DI14 = 100*(+DM14/TR14)

-DI14 = 100*(-DM14/TR14)


5- Calculamos la diferencia entre +DI y -DI

DI 14 Diff = (+DI 14) - (-DI 14)

6- Calculamos la suma de +DI y -DI

DI 14 Suma = (+DI 14) + (-DI 14)

DI14 - diferencia y suma

7- Calculamos DX:

DX = 100*((diferencia entre +DI y -DI)/(suma de +DI y -DI))


DX

8- Calculamos ADX, el primer cálculo será el del día 28, ya que necesitamos 14 días más para calcular ADX:

ADX = media de 14 periodos de DX --> media de DI (día 15: día 28)


ADX

Ahora, hemos calculado el indicador ADX manualmente, pero no necesitaremos hacer eso, ya que está incorporado con el MetaTrader 5, solo hemos visto cómo podemos calcularlo para profundizar en nuestra comprensión del indicador ADX, y cómo funciona todo. Si necesitamos insertarlo en el gráfico, lo único que tenemos que hacer es seleccionarlo entre los indicadores disponibles en el terminal comercial, siguiendo (Insertar --> Indicador --> Tendencia --> Índice de Movimiento Direccional Medio). A continuación, veremos cómo hacerlo:

Insertando ADX

Después de seleccionar "Índice de Movimiento Direccional Medio", aparecerá la siguiente ventana:

Ventana ADX

Esta ventana se muestra para los parámetros de los indicadores ADX, que son iguales a los siguientes:
  1. para determinar el periodo deseado.
  2. para determinar el color de la línea ADX.
  3. para determinar el tipo de línea ADX.
  4. para determinar el grosor de la línea ADX.
  5. para determinar el color de la línea +DI.
  6. para determinar el tipo de línea +DI.
  7. para determinar el grosor de la línea +DI.
  8. para determinar el color de la línea -DI.
  9. para determinar el tipo de línea -DI.
  10. para determinar el grosor de la línea -DI.

Después de determinar los parámetros de ADX y pulsar OK, este se adjuntará al gráfico; la siguiente imagen es un ejemplo de ello:

ADX adjunto

Estrategia de ADX

En esta parte, vamos a ver estrategias simples que pueden ser usadas por el indicador ADX. Querríamos mencionar aquí que solo presentaremos algunas estrategias simples para el indicador ADX, no obstante, deberá saber que hay muchas estrategias que usar con ADX, desde simples hasta complejas, si bien en este artículo solo mencionaremos estrategias sencillas, para así explicar mejor el concepto del indicador y aprender a diseñar un sistema comercial basado en dicho concepto.

Usando como base el concepto de cálculo del indicador ADX, mostraremos si hay una tendencia o no, cualquiera que sea este tipo de tendencia (ascendente o descendente). Si la curva de ADX se está moviendo hacia arriba, esto significará que existe una tendencia, y viceversa, si la curva de ADX se está moviendo hacia abajo, esto significará que no hay tendencia. Sin embargo, primero tendremos que definir la tendencia, y será como vemos más abajo:

Definición de la tendencia:

Para su información, la acción del precio es muy importante, porque nos muestra el tipo de tendencia. Como ya sabemos, tenemos tres tipos de tendencias (tendencia alcista, tendencia bajista, y lateral).

Tendencia alcista: Es la dirección del mercado o la tendencia en que podemos ver precios que crean mínimos mayores y máximos mayores; los precios se mueven hacia arriba, y los compradores controlan el mercado en este movimiento del mercado.

La siguiente imagen muestra la formación de esta dirección o tendencia del mercado:

Formación de una tendencia alcista

La siguiente imagen muestra un ejemplo del mercado de tendencia alcista:

Ejemplo de tendencia alcista

Tendencia bajista: Es la dirección del mercado o la tendencia en que podemos ver precios que crean mínimos menores y máximos menores; los precios se mueven hacia abajo, y los vendedores controlan el mercado en este movimiento del mercado.

A continuación, mostramos la formación de esta dirección del mercado o forma de tendencia:

Formación de tendencia bajista

La siguiente imagen es un ejemplo de la tendencia bajista del mercado:

Ejemplo de tendencia bajista

Movimiento lateral: Es cualquier dirección del mercado, salvo la tendencia alcista o bajista, donde no existe una dirección clara, y hay un equilibrio entre compradores y vendedores.

A continuación, se muestran algunas formaciones de esta dirección del mercado:

Formación lateral 1

Formación lateral 2

Formación lateral 3

Formación lateral 4

A continuación, vemos un ejemplo de movimiento lateral en el mercado:

Ejemplo vivo de movimiento lateral

Tras la identificar las tendencias, veremos estrategias simples que podemos usar según el concepto de ADX.

  • Estrategia uno: Sistema ADX simple - Movimiento ADX:

La estrategia se basa en el movimiento de la curva de ADX,

valor actual de ADX > valor anterior de ADX = ADX está subiendo.

valor actual de ADX < valor anterior de ADX = ADX está cayendo.

  • Estrategia dos: Sistema ADX simple - Tendencia alcista:

Según esta estrategia, durante la tendencia alcista,

Valor ADX > 25 y valor ADX actual > valor ADX anterior --> cuando valor +DI > valor -DI = comprar

  • Estrategia tres: Sistema ADX simple - Tendencia bajista:

Según esta estrategia, durante la tendencia bajista,

Valor ADX > 25 y valor ADX actual > valor ADX anterior --> cuando valor +DI < valor -DI = vender


Proyecto de estrategia de ADX

En esta parte, diseñaremos un modelo para cada estrategia que nos ayude a crear el sistema comercial. Dicho modelo organizará y establecerá lo que necesitamos que haga el programa o el sistema paso a paso.

  • Estrategia uno: Sistema ADX simple - Movimiento ADX:

Según esta estrategia, necesitaremos que el programa compruebe en cada tick el valor actual de ADX y el valor anterior de ADX, y luego decida si el valor actual de ADX es mayor que el valor anterior de ADX o no. Si el valor ADX actual es mayor que el valor anterior, necesitaremos que el sistema muestre un comentario en el gráfico "ADX está subiendo", "El valor de ADX es (n)" en una nueva línea, y "El último valor de ADX es (n)" en otra nueva línea. Si el valor actual de ADX es inferior al anterior, necesitaremos que el sistema muestre un comentario en el gráfico "ADX está cayendo". Si el valor de ADX actual es igual al anterior, necesitaremos que el sistema no haga nada.

La siguiente imagen muestra un modelo de esta estrategia:

Modelo de movimiento de ADX

  • Estrategia dos: Sistema ADX simple - Tendencia alcista:

Según esta estrategia, necesitaremos que el sistema compruebe en cada tick el valor ADX actual, el valor ADX anterior, el valor +DI y el valor -DI; así, necesitaremos que decida si el valor ADX actual es mayor que 25 y el valor ADX anterior o no. Si no es mayor que ambos, necesitaremos que el sistema no haga nada. Si es mayor que ambos, necesitaremos que el sistema compruebe +DI y -DI, es decir, si +DI es mayor que -DI o no. Si +DI es mayor que -DI, el sistema deberá comentar con una señal de compra «el valor de ADX es (n), el último valor de ADX es (n), el valor +DI es (n), y el valor -DI es (n), o si +DI no es mayor que -DI, necesitaremos que el sistema no haga nada.

La siguiente imagen muestra un ejemplo de esta estrategia:

ADX - Modelo de señal de compra

  • Estrategia tres: Sistema ADX simple - Tendencia bajista:

Según esta estrategia, necesitaremos que el sistema compruebe en cada tick el valor de ADX actual, el valor de ADX anterior, el valor +DI y el valor -DI; entonces necesitaremos que decida si el valor de ADX actual es menor que 25 y el valor de ADX anterior o no. Si no es menor que ambos, necesitaremos que el sistema no haga nada. Si es menor que ambos, el sistema deberá comprobar +DI y -DI, es decir, si +DI es menor que -DI o no. Si +DI es menor que -DI, necesitaremos que el sistema comente con una señal de venta «El valor de ADX es (n), el último valor de ADX es (n), el valor +DI es (n), y el valor -DI es (n), o si +DI no es menor que -DI, necesitaremos que el sistema no haga nada.

La siguiente imagen muestra un ejemplo de esta estrategia:

ADX - Modelo de señal de venta

Sistema de trading de ADX

En esta parte tan interesante, veremos cómo crear un sistema comercial para las estrategias simples que hemos mencionado, y cómo usar estas en el terminal comercial MetaTrader 5. Para crear el código de este sistema, utilizaremos el editor MetaQuotes Language Editor incorporado (MQL5). Podremos abrir el editor de MetaQuotes cuando el terminal comercial MetaTrader 5 se encuentre abierto, presionando para ello F4 o clicando en la pestaña Herramientas desde MetaTrader 5 --> y luego seleccionando el editor MetaQuotes Language Editor.

La siguiente imagen muestra cómo podemos hacerlo:

Apertura del Metaeditor 1

O bien podemos pulsar el botón IDE:

Apertura del Metaeditor 2

Después se abrirá la siguiente ventana del editor MetaQuotes Language Editor:

Ventana del Metaeditor

A continuación, abriremos un nuevo archivo para crear nuestro sistema comercial clicando en "Nuevo":

Ventana del Metaeditor 2

Entonces se abrirá la siguiente ventana:

Metaeditor - Nuevo archivo

Estas son las opciones para el tipo de archivo nuevo:

  1. Asesor experto: Asesor experto: es un programa del terminal que se encarga de automatizar los procesos comerciales según condiciones predeterminadas.
  2. Indicador personalizado: es un código de programa que nos ayuda a leer el gráfico para mejorar las decisiones comerciales.
  3. Script: es un programa que puede realizar una tarea una sola vez tras su ejecución.

Ahora, vamos a crear un archivo EA de asesor experto para crear nuestro sistema comercial.

Primero, crearemos un programa que pueda aparecer como un comentario en el gráfico con el valor actual de ADX. Estos son los pasos para hacerlo:

  • Creamos un array de precios y utilizamos la función "double", que sirve para representar valores con parte fraccionaria:
double PriceArray[];
  • Clasificamos este array de precios creado a partir de los datos actuales y utilizamos la función "ArraySetAsSeries", que retorna true en caso de éxito o false en caso de fallo (bool). Sus parámetros necesarios son:
array[] por referencia, y flag

ArraySetAsSeries(PriceArray,true);

  • Una vez identificado el indicador ADX, utilizaremos la función "iADX", que retorna el manejador del indicador técnico ADX. Sus parámetros son:
el símbolo en forma de línea, el periodo para el marco temporal y el periodo para el periodo de ADX. Serán iguales a los siguientes:
  • Símbolo: para el símbolo actual
  • Periodo: para el marco temporal actual
  • 14: para el periodo
int ADXDef = iADX(_Symbol,_Period,14);
  • Rellenamos los datos según el indicador ADX creado y utilizamos la función "CopyBuffer", que retorna el recuento de datos copiados, o bien retorna -1 en caso de error. Sus parámetros son:
manejador del indicador, buffer_num del número de búfer del indicador, start_time (fecha y hora de inicio), stop_time (fecha y hora de finalización), y buffer[] (array de destino).
CopyBuffer(ADXDef,0,0,3,PriceArray);
  • Obtenemos el valor de ADX, después de crear una variable para "ADXValue" con la función "double", entonces usamos la función "NormalizeDouble", que nos retornará un valor de tipo double con precisión preestablecida, sus parámetros son: 
valor como valor doble (número normalizado) y dígitos como valor entero (número de dígitos después del punto decimal)
double ADXValue=NormalizeDouble(PriceArray[0],2);
  • Aparecerá un comentario con el valor actual de ADX. Utilizaremos la función "comentario", y sus parámetros son:
Cualquier valor, que separaremos con comas entre sí y, cuando necesitemos que aparezca alguno en una nueva línea, utilizaremos el símbolo de salto de línea "\n" 
Comment("ADX Value is ", ADXValue);

Si quiere ver el código completo de este programa, podrá hacer lo siguiente:

//+------------------------------------------------------------------+
//|                                            Simple ADX System.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
//creating an array for prices
   double PriceArray[];

//sort price array from current data
   ArraySetAsSeries(PriceArray,true);

//identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);

//Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,PriceArray);

//Getting value of current data
   double ADXValue=NormalizeDouble(PriceArray[0],2);

//Comment with ADX value
   Comment("ADX Value is ", ADXValue);
  }
//+------------------------------------------------------------------+

Después de escribir este programa, podemos ver este archivo de programa en la ventana del navegador del terminal comercial MetaTrader 5, como mostramos a continuación:

Nav

Tras clicar dos veces en el archivo, o bien arrastrar y soltar este en el gráfico, aparecerá la siguiente ventana:

Ventana de ADX simple

Después de marcar junto a "Permitir el trading algorítmico" y pulsar el botón OK, el archivo se adjuntará al gráfico:

ADX simple adjunto

Entonces, aparecerá el resultado según este sistema comercial; la siguiente imagen es un ejemplo de ello:

ADX simple

Ahora que hemos creado lo necesario para mostrar el valor actual de ADX, vamos a añadir algo que nos ayudará a diseñar nuestro sistema comercial. Tenemos que codificar un programa que ayude a mostrar otros valores del indicador ADX (el valor +DI y el valor -DI); para ello, necesitaremos:

  • Crear un array de precios para cada valor (valor ADX, +DI y -DI) y crear variables para ellos usando la función "double":
    • ADXArray: para el valor de ADX
    • PDIArray: para el valor +DI
    • NDIArray: para el valor -DI
double ADXArray[];
double PDIArray[];
double NDIArray[];
  • Ordenar cada array de precios para cada valor de los datos actuales usando la función "ArraySetAsSeries":
ArraySetAsSeries(ADXArray,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);

  • Identificar del indicador ADX usando la función "iADX":
int ADXDef = iADX(_Symbol,_Period,14);
  • Rellenar los datos según el ADX identificado, usando para ello la función "CopyBuffer":
CopyBuffer(ADXDef,0,0,3,ADXArray);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
  • Obtener los valores de los datos actuales después de crear las variables para cada valor utilizando la función "double"; usaremos la función "NormalizeDouble:":
double ADXValue=NormalizeDouble(ADXArray[0],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
  • Mostrar los comentarios con cada valor en una nueva línea utilizando la función "comentario":
Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
PDIValue,"\n""-DI Value is ", NDIValue);

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

//+------------------------------------------------------------------+
//|                                  Simple ADX System - 3 lines.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
   //creating an array for prices
   double ADXArray[];
   double PDIArray[];
   double NDIArray[];
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);

   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray[0],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with ADX value
   Comment("ADX Value is ", ADXValue,"\n""+DI Value is ", 
   PDIValue,"\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

Después de escribir este programa, podremos encontrar su archivo en la ventana del Navegador:

 Nav 2

Tras hacer doble clic en el archivo, o arrastrarlo y soltarlo en el gráfico, veremos la siguiente ventana:

ADX Simple - Ventana de 3 líneas

Tras marcar junto a "Permitir el Trading Algorítmico" y pulsar OK, el programa se adjuntará al gráfico:

ADX simple - 3 líneas adjuntas

Después de ello, los valores aparecerán en el gráfico según este asesor experto:

ADX simple - 3 líneas

Ahora, crearemos el sistema comercial para las estrategias que hemos mencionado (movimiento de ADX, tendencia alcista y tendencia bajista).

  • Estrategia uno: Sistema ADX simple - Movimiento ADX:

Valor actual de ADX > valor anterior de ADX = ADX está subiendo.

Valor actual de ADX < valor anterior de ADX = ADX está cayendo.

Lo siguiente será escribir el código de un programa o asesor experto que puede hacer eso:

  • Creamos un array de precios para los valores de ADX (actual, anterior):
    • ADXArray0: para el valor actual de ADX.
    • ADXArray1: para el valor anterior de ADX.
double ADXArray0[];
double ADXArray1[];

  • Ordenamos el array de precios a partir de los datos actuales:
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);

  • Identificamos ADX:
int ADXDef = iADX(_Symbol,_Period,14);
  • Rellenamos los datos según ADX:
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
  • Obtenemos los valores después de crear variables para ellos:
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
  • Establecemos las condiciones del movimiento de ADX según el valor del mismo:
if (ADXValue>ADXValuelast)
      {
       Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
if (ADXValue<ADXValuelast)
     {
      Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }

A continuación, podemos ver el código completo de esta estrategia para crear el asesor experto:

//+------------------------------------------------------------------+
//|                             Simple ADX System - ADX 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()
  {
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];

   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
      
   //identify ADX
   int ADXDef = iADX(_Symbol,_Period,14);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValuelast=NormalizeDouble(ADXArray1[1],2);
   
   //ADX movement signal
   if (ADXValue>ADXValuelast)
      {
         Comment("ADX is rising","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
   
   if (ADXValue<ADXValuelast)
     {
         Comment("ADX is falling","\n""ADX Value is ", ADXValue,"\n""ADX Value last is ", 
   ADXValuelast);
      }
  }
//+------------------------------------------------------------------+

Después de crear este asesor experto, podremos encontrarlo en la ventana del Navegador:

Nav - adx3

Tras hacer doble clic sobre el mismo, o arrastrarlo y soltarlo en el gráfico, aparecerá la siguiente ventana:

Ventana de movimiento de ADX 

Después de marcar junto a "Permitir el Trading Algorítmico" y pulsar el botón OK, el asesor se adjuntará al gráfico:

Movimiento de ADX adjunto

A continuación, mostraremos ejemplos de los resultados de las pruebas:

  • Cuando ADX está subiendo, podemos ver que el asesor experto muestra valores como comentarios, igual que en la siguiente imagen:

Movimiento de ADX - ascendente 


  • Cuando ADX está cayendo, podemos ver que el asesor experto muestra valores como comentarios, igual que la siguiente imagen:

ADX movement2.png

  • Estrategia dos: Sistema ADX simple - Tendencia alcista:

Valor ADX > 25 y valor ADX actual > valor ADX anterior --> cuando valor +DI > valor -DI = comprar

A continuación, explicaremos cómo crear un asesor experto para ejecutar esta estrategia:

  • Creamos una variable para la "señal" con una asignación vacía, porque se calculará después; usaremos la función "cadena":
string signal="";
  • Creamos arrays para el valor de ADX actual, el valor de ADX anterior, el valor +DI y el valor -DI:
    • ADXArray0: para el valor actual de ADX
    • ADXArray1: para el valor de ADX anterior
    • PDIArray: para el valor +DI
    • NDIArray: para el valor -DI 
double ADXArray0[];
double ADXArray1[];
double PDIArray[];
double NDIArray[];
  • Ordenamos los arrays de precios a partir de los datos actuales:
ArraySetAsSeries(ADXArray0,true);
ArraySetAsSeries(ADXArray1,true);
ArraySetAsSeries(PDIArray,true);
ArraySetAsSeries(NDIArray,true);
  • Identificamos el indicador ADX:
int ADXDef = iADX(_Symbol,_Period,14);
  • Rellenamos los datos según el ADX creado:
CopyBuffer(ADXDef,0,0,3,ADXArray0);
CopyBuffer(ADXDef,0,0,2,ADXArray1);
CopyBuffer(ADXDef,1,0,3,PDIArray);
CopyBuffer(ADXDef,2,0,3,NDIArray);
  • Obtenemos los valores de los datos actuales:
double ADXValue=NormalizeDouble(ADXArray0[0],2);
double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
double PDIValue=NormalizeDouble(PDIArray[0],2);
double NDIValue=NormalizeDouble(NDIArray[0],2);
  • Establecemos la condiciones de ajuste de la estrategia de tendencia alcista:
if (ADXValue>25&&ADXValue>ADXValueLast)
   if(PDIValue>NDIValue)
   {
    signal = "BUY";
   }
  • Comentamos con la señal de compra y los valores, cada uno en una nueva línea:
Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
"\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
"\n""-DI Value is ", NDIValue);

A continuación, podemos ver el código completo de esta estrategia para crear el asesor experto:

//+------------------------------------------------------------------+
//|                     Simple ADX System - Uptrend - Buy Signal.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+

void OnTick()
  {
  
   // creating a variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue>NDIValue)
      {
         signal = "BUY";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

Después podemos encontrar el asesor experto en la ventana del Navegador:

Nav - ADX4

Tras hacer doble clic sobre el mismo, o arrastrarlo y soltarlo en el gráfico, aparecerá la ventana siguiente,

ADX - ventana de tendencia alcista

Después de marcar junto a "Permitir el Trading Algorítmico" y pulsar el botón OK, se adjuntará el asesor experto,

ADX - tendencia alcista adjunta

Después de ello, podremos encontrar señales que aparecen según la estrategia:

  • Señal de compra.
  • Nueva línea con el valor actual de ADX.
  • Nueva línea con el valor de ADX anterior.
  • Nueva línea con el valor +DI.
  • Nueva línea con el valor -DI.
La siguiente imagen muestra un ejemplo de los resultados de esta estrategia o asesor experto en las pruebas:


ADX - Señal de compra

  • Estrategia tres: Sistema ADX simple - Tendencia bajista:

Valor ADX > 25 y valor ADX actual > valor ADX anterior --> cuando valor +DI < valor -DI = vender

A continuación, explicamos cómo crear un asesor experto que ejecute esta estrategia:

//+------------------------------------------------------------------+
//|                Simple ADX System - Downtrend - Sell Strategy.mq5 |
//|                                  Copyright 2022, MetaQuotes Ltd. |
//|                                             https://www.mql5.com |
//+------------------------------------------------------------------+
#property copyright "Copyright 2022, MetaQuotes Ltd."
#property link      "https://www.mql5.com"
#property version   "1.00"
//+------------------------------------------------------------------+
void OnTick()
  {
  
   // creating a variable for signal
   string signal="";
   
   //creating an array for prices
   double ADXArray0[];
   double ADXArray1[];
   double PDIArray[];
   double NDIArray[];
   
   //identify ADX, positive DI, negative DI
   int ADXDef = iADX(_Symbol,_Period,14);
   
   
   //sort price array from current data
   ArraySetAsSeries(ADXArray0,true);
   ArraySetAsSeries(ADXArray1,true);
   ArraySetAsSeries(PDIArray,true);
   ArraySetAsSeries(NDIArray,true);
   
   //Filling data according to created ADX
   CopyBuffer(ADXDef,0,0,3,ADXArray0);
   CopyBuffer(ADXDef,0,0,2,ADXArray1);
   CopyBuffer(ADXDef,1,0,3,PDIArray);
   CopyBuffer(ADXDef,2,0,3,NDIArray);
   
   //Getting value of current data
   double ADXValue=NormalizeDouble(ADXArray0[0],2);
   double ADXValueLast=NormalizeDouble(ADXArray1[1],2);
   double PDIValue=NormalizeDouble(PDIArray[0],2);
   double NDIValue=NormalizeDouble(NDIArray[0],2);
   
   //Comment with Buy signal according to Buy Strategy
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
      
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);
  }
//+------------------------------------------------------------------+

Son los mismos pasos de la estrategia de tendencia alcista, con las siguientes diferencias:

  • Condiciones de la estrategia de tendencia bajista:
    if (ADXValue>25&&ADXValue>ADXValueLast)
      if(PDIValue<NDIValue)
      {
         signal = "SELL";
      }
  • Comentario por la señal:
   Comment("Simple ADX System - Signal is ",signal,"\n""ADX Value is ", ADXValue,
   "\n""ADX Value Last is ", ADXValueLast, "\n""+DI Value is ", PDIValue,
   "\n""-DI Value is ", NDIValue);

Después de escribir el código de esta estrategia, podremos encontrar el archivo del asesor experto en la ventana del Navegador:

Nav - ADX 5

Tras hacer doble clic, o arrastrar y soltar el archivo en el gráfico, aparecerá la siguiente ventana:

ADX - ventana de tendencia bajista 

Después de marcar junto a "Permitir el Trading Algorítmico" y pulsar el botón OK, el asesor experto se adjuntará al gráfico; la siguiente imagen muestra un ejemplo de ello,

ADX - tendencia bajista adjunta

Entonces, podremos encontrar señales que aparezcan según la estrategia de tendencia bajista:

  • Señal de venta.
  • Nueva línea con el valor actual de ADX.
  • Nueva línea con el valor de ADX anterior.
  • Nueva línea con el valor +DI.
  • Nueva línea con el valor -DI.

La siguiente imagen muestra un ejemplo de una señal generada según esta estrategia a partir de las pruebas:

ADX - Señal de venta

Conclusión

Después de estudiar los temas mencionados de este artículo, se supone que usted ya conocerá en profundidad uno de los indicadores populares y útiles, el indicador ADX, y también cómo diseñar un sistema de trading usando este, ya que hemos analizado qué es ADX, qué mide y cómo lo calculamos manualmente. Asimismo, hemos investigado estrategias simples basadas en el indicador ADX durante la tendencia alcista y la tendencia bajista, diseñando además un modelo para estas estrategias que nos permita diseñar un sistema comercial paso a paso para entender qué información tenemos que suministrar exactamente al programa de forma que cumpla su cometido. Además, hemos visto cómo diseñar un sistema comercial para que funcione automáticamente usando como base estas estrategias de ADX, y hemos discutido cómo escribir el código para estas estrategias comerciales mediante MQL5 (MetaQuotes Language).

El indicador ADX tiene muchas estrategias que podemos utilizar para el comercio, desde las más simples hasta las más complicadas, pero aquí hemos mencionado solo algunas estrategias simples para asimilar el concepto básico del indicador y el concepto básico del artículo: el objetivo principal es aprender estrategias comerciales basadas en el enfoque técnico y diseñar con MQL5 un sistema comercial para ellas que pueda ser utilizado en la plataforma comercial MetaTrader 5.

Querríamos mencionar también aquí que tenemos un montón de herramientas útiles y estrategias que se pueden utilizar en nuestro trading. Estas herramientas se pueden utilizar de forma individual o podemos combinar aquellas que sean válidas para obtener mejores resultados: esta es una de las características más útiles del análisis técnico, ya que existen muchas herramientas basadas en diferentes conceptos que pueden mejorar nuestras decisiones de trading, y esto redundará en mejores resultados comerciales. Le recomendamos leer los anteriores artículos del autor sobre otros indicadores populares que pueden ser utilizados por algunas estrategias simples; también se trata el tema del diseño de sistemas comerciales simples basados en estas estrategias con MQL5, que se usan en MetaTrader 5. Por lo tanto, nuestra misión consistirá en dominar estos conceptos y herramientas y comprobar qué resulta adecuado para nuestro estilo comercial y nuestro plan. En realidad, existen muchas estrategias que pueden ser útiles para unos, pero no tanto para otros: cada tráder debe disponer de un plan comercial basado en su propia estrategia, pero para ello, antes tendrá que poner a prueba cada nueva estrategia o herramienta, confirmando así si esta va a resultar rentable o no antes de usarla en cuentas reales.

La programación puede resultar muy útil en esta etapa por muchas razones, pues nos ayuda a implementar nuestra estrategia de forma fácil, fluida y precisa. Una vez que encontremos una estrategia rentable, podremos diseñar un sistema comercial para que el ordenador trabaje por nosotros automáticamente según las condiciones del programa diseñado. Esto nos ayudará a evitar emociones perjudiciales que puedan obstaculizar nuestro proceso de negociación, así, la programación nos ayudará a comerciar con disciplina, lo cual supone precisamente una de las claves más importantes del éxito en el trading. Por consiguiente, resulta de gran ayuda aprender programación y MQL5.

Esperamos que haya encontrado este artículo útil, aunque simplemente le haya abierto los ojos a nuevas ideas sobre este tema o cualquier otro relacionado, resultándole así de utilidad a la hora de mejorar sus resultados comerciales, porque este es nuestro objetivo principal: lograr buenos resultados y consistencia en los beneficios. Por consiguiente, tenemos la esperanza de que este artículo contribuya a ello, ayudándole a conseguir este valioso objetivo. 


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

Desarrollando un EA comercial desde cero (Parte 13): Times And Trade (II) Desarrollando un EA comercial desde cero (Parte 13): Times And Trade (II)
Hoy vamos a construir la segunda parte del sistema Times & Trade para analizar el mercado. En el artículo anterior Times & Trade ( I ) presenté un sistema alternativo para organizar un gráfico de manera que tengamos un indicador que nos permita interpretar las operaciones que se han ejecutado en el mercado lo más rápido posible.
Aprendiendo a diseñar un sistema comercial basado en el Oscilador Estocástico Aprendiendo a diseñar un sistema comercial basado en el Oscilador Estocástico
En este artículo, continuaremos con nuestra serie dedicada al diseño de sistemas comerciales. En esta ocasión, aprenderemos a diseñar un sistema de trading usando uno de los indicadores más útiles y populares, el indicador Oscilador Estocástico, que servirá para construir un nuevo bloque en nuestro conocimiento de los fundamentos.
DoEasy. Elementos de control (Parte 4): Elemento de control "Panel", parámetros Padding y Dock DoEasy. Elementos de control (Parte 4): Elemento de control "Panel", parámetros Padding y Dock
En este artículo, implementaremos el funcionamiento de los parámetros de panel Padding (rellenado/márgenes internos en todos los lados del elemento) y Dock (la forma en que el objeto se ubica dentro del contenedor).
Aprendiendo a diseñar un sistema comercial basado en MACD Aprendiendo a diseñar un sistema comercial basado en MACD
En este artículo, hablaremos de una nueva herramienta de nuestra serie, y aprenderemos a diseñar un sistema comercial basado en uno de los indicadores técnicos más populares: la convergencia/divergencia de medias móviles (MACD).