
Aprendiendo a diseñar un sistema de trading con ADX
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:
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:
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:
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:
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:
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:
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
- 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,
2- Calculamos el Rango Verdadero (TR):Solo se considerará +DM<-DM = -DM
+DM=-DM = ambos serán ignorados
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.
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:
4- Calculamos 14 periodos +DI y -DI+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
+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
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:
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)
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)
7- Calculamos DX:
DX = 100*((diferencia entre +DI y -DI)/(suma de +DI y -DI))
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)
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:
Después de seleccionar "Índice de Movimiento Direccional Medio", aparecerá la siguiente ventana:
- para determinar el periodo deseado.
- para determinar el color de la línea ADX.
- para determinar el tipo de línea ADX.
- para determinar el grosor de la línea ADX.
- para determinar el color de la línea +DI.
- para determinar el tipo de línea +DI.
- para determinar el grosor de la línea +DI.
- para determinar el color de la línea -DI.
- para determinar el tipo de línea -DI.
- 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:
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:
La siguiente imagen muestra un ejemplo del mercado 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:
La siguiente imagen es un ejemplo de la tendencia bajista del mercado:
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:
A continuación, vemos un ejemplo de movimiento lateral en el mercado:
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:
- 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:
- 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:
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:
O bien podemos pulsar el botón IDE:
Después se abrirá la siguiente ventana del editor MetaQuotes Language Editor:
A continuación, abriremos un nuevo archivo para crear nuestro sistema comercial clicando en "Nuevo":
Entonces se abrirá la siguiente ventana:
Estas son las opciones para el tipo de archivo nuevo:
- Asesor experto: Asesor experto: es un programa del terminal que se encarga de automatizar los procesos comerciales según condiciones predeterminadas.
- Indicador personalizado: es un código de programa que nos ayuda a leer el gráfico para mejorar las decisiones comerciales.
- 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:
Tras clicar dos veces en el archivo, o bien arrastrar y soltar este en el gráfico, aparecerá la siguiente ventana:
Después de marcar junto a "Permitir el trading algorítmico" y pulsar el botón OK, el archivo se adjuntará al gráfico:
Entonces, aparecerá el resultado según este sistema comercial; la siguiente imagen es un ejemplo de ello:
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:
Tras hacer doble clic en el archivo, o arrastrarlo y soltarlo en el gráfico, veremos la siguiente ventana:
Tras marcar junto a "Permitir el Trading Algorítmico" y pulsar OK, el programa se adjuntará al gráfico:
Después de ello, los valores aparecerán en el gráfico según este asesor experto:
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:
Tras hacer doble clic sobre el mismo, o arrastrarlo y soltarlo en el gráfico, aparecerá la siguiente ventana:
Después de marcar junto a "Permitir el Trading Algorítmico" y pulsar el botón OK, el asesor se adjuntará al gráfico:
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:
- Cuando ADX está cayendo, podemos ver que el asesor experto muestra valores como comentarios, igual que la siguiente imagen:
- 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:
Tras hacer doble clic sobre el mismo, o arrastrarlo y soltarlo en el gráfico, aparecerá la ventana siguiente,
Después de marcar junto a "Permitir el Trading Algorítmico" y pulsar el botón OK, se adjuntará el asesor experto,
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.
- 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:
Tras hacer doble clic, o arrastrar y soltar el archivo en el gráfico, aparecerá la siguiente ventana:
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,
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:
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





- Aplicaciones de trading gratuitas
- 8 000+ señales para copiar
- Noticias económicas para analizar los mercados financieros
Usted acepta la política del sitio web y las condiciones de uso