El ADX/DMS (Average Directional Index / Directional Movement System) es uno de los indicadores técnicos más populares y útiles en el análisis de tendencias del mercado. Desarrollado por J. Welles Wilder, este indicador ayuda a los traders a determinar la fuerza de una tendencia y a identificar posibles puntos de reversión en el mercado. En esta entrada de blog, exploraremos cómo se implementa el ADX/DMS en IQ Option mediante un script en Lua y cómo los traders pueden utilizar este indicador para mejorar sus estrategias de trading.
¿Qué es el ADX/DMS?
El ADX/DMS se compone de tres líneas principales:
- ADX (Average Directional Index): Mide la fuerza de la tendencia sin importar si es alcista o bajista.
- DI+ (Directional Indicator Plus): Indica la presión de compra.
- DI- (Directional Indicator Minus): Indica la presión de venta.
El ADX oscila entre 0 y 100, donde un valor por encima de 20 generalmente indica una tendencia fuerte. Los cruces entre DI+ y DI- pueden proporcionar señales de compra o venta.
Implementación del ADX/DMS en IQ Option
El siguiente script en Lua implementa el ADX/DMS para la plataforma IQ Option. Permite configurar los períodos de suavizado y la longitud del DI, así como personalizar los colores y la visibilidad de cada línea.
luaCopiar códigoinstrument { name = "ADX/DMS", icon="indicators:ADX" }
adx_period = input (14, "front.newind.adx.smoothing", input.integer, 1)
di_period = input (14, "front.newind.adx.dilength", input.integer, 1)
threshold = input (20, "front.newind.adx.threshold", input.double, 0, 100)
input_group {
"ADX",
adx_color = input { default = rgba(255,255,255,0.7), type = input.color },
adx_width = input { default = 1, type = input.line_width },
adx_visible = input { default = true, type = input.plot_visibility }
}
input_group {
"DI+",
pdi_color = input { default = "#25E154", type = input.color },
pdi_width = input { default = 1, type = input.line_width },
pdi_visible = input { default = true, type = input.plot_visibility }
}
input_group {
"DI–",
mdi_color = input { default = "#FF6C58", type = input.color },
mdi_width = input { default = 1, type = input.line_width },
mdi_visible = input { default = true, type = input.plot_visibility }
}
input_group {
"front.newind.adx.threshold",
threshold_color = input { default = rgba(255,255,255,0.15), type = input.color },
threshold_width = input { default = 1, type = input.line_width },
threshold_visible = input { default = true, type = input.plot_visibility }
}
input_group {
"front.newind.adx.fill",
up_color = input { default = rgba(37,225,84,0.15), type = input.color },
down_color = input { default = rgba(255,108,88,0.15), type = input.color },
fill_visible = input { default = true, type = input.plot_visibility }
}
up_move = change (high)
down_move = -change (low)
pdm = iff (up_move > down_move and nz(up_move) > 0, up_move, 0)
mdm = iff (down_move > up_move and nz(down_move) > 0, down_move, 0)
atr = rma(tr, di_period)
pdi = 100 * rma (pdm / atr, di_period)
mdi = 100 * rma (mdm / atr, di_period)
adx = 100 * rma (abs (pdi - mdi) / (pdi + mdi), adx_period)
if threshold_visible then
hline { value = threshold, color = threshold_color, width = threshold_width }
end
if fill_visible then
fill (mdi, pdi, "", iff(pdi > mdi, up_color, down_color))
end
if mdi_visible then
plot (mdi, "MDI", mdi_color, mdi_width)
end
if pdi_visible then
plot (pdi, "PDI", pdi_color, pdi_width)
end
if adx_visible then
plot (adx, "ADX", adx_color, adx_width)
end
Explicación del Script
- Entradas de Usuario:
adx_period
: Período de suavizado del ADX.di_period
: Longitud del DI.threshold
: Umbral del ADX para indicar una tendencia fuerte.
- Grupos de Entrada:
- Configuración de colores, anchos y visibilidad para las líneas ADX, DI+ y DI-.
- Configuración del umbral y colores de relleno.
- Cálculos:
up_move
ydown_move
: Movimientos hacia arriba y hacia abajo del precio.pdm
ymdm
: Movimientos direccionales positivos y negativos.atr
: Rango verdadero promedio (Average True Range).pdi
ymdi
: Indicadores direccionales positivos y negativos.adx
: Índice direccional promedio.
- Visualización:
- Las líneas ADX, DI+ y DI- se dibujan en el gráfico, junto con un umbral y áreas de relleno para indicar la dominancia de DI+ o DI-.
Utilizando el ADX/DMS en el Trading
El ADX/DMS es una herramienta versátil que puede ser utilizada de varias maneras en el trading:
- Identificación de Tendencias:
- Un ADX por encima de 20 indica una tendencia fuerte.
- Cruces entre DI+ y DI- pueden ser utilizados para generar señales de compra o venta.
- Confirmación de Señales:
- Utilizar el ADX junto con otros indicadores de tendencia para confirmar la dirección del mercado.
- Un ADX creciente confirma la fuerza de la tendencia indicada por otros indicadores.
- Gestión del Riesgo:
- El ADX/DMS puede ayudar a los traders a mantenerse fuera de mercados laterales, evitando operaciones en mercados sin tendencia.
Estrategias de Trading con ADX/DMS
- Cruce de DI+ y DI-:
- Cuando DI+ cruza por encima de DI-, puede ser una señal de compra.
- Cuando DI- cruza por encima de DI+, puede ser una señal de venta.
- Confirmación de Tendencias:
- Utilizar el ADX para confirmar la fuerza de la tendencia antes de entrar en una operación.
- Combinar con indicadores de volumen para validar la fortaleza de la tendencia.
Conclusión
El ADX/DMS es un indicador poderoso para identificar la fuerza y la dirección de las tendencias del mercado. Su implementación en IQ Option mediante un script en Lua proporciona a los traders una herramienta robusta para mejorar sus estrategias de trading y tomar decisiones más informadas. Al personalizar los colores, anchos y visibilidad de las líneas, los traders pueden adaptar la visualización del indicador a sus necesidades y preferencias específicas. Utilizando el ADX/DMS en combinación con otros indicadores, los traders pueden desarrollar estrategias más efectivas y gestionar mejor el riesgo en sus operaciones.
Script Completo
instrument { name = "ADX/DMS", icon="indicators:ADX" }
adx_period = input (14, "front.newind.adx.smoothing", input.integer, 1)
di_period = input (14, "front.newind.adx.dilength", input.integer, 1)
threshold = input (20, "front.newind.adx.threshold", input.double, 0, 100)
input_group {
"ADX",
adx_color = input { default = rgba(255,255,255,0.7), type = input.color },
adx_width = input { default = 1, type = input.line_width },
adx_visible = input { default = true, type = input.plot_visibility }
}
input_group {
"DI+",
pdi_color = input { default = "#25E154", type = input.color },
pdi_width = input { default = 1, type = input.line_width },
pdi_visible = input { default = true, type = input.plot_visibility }
}
input_group {
"DI–",
mdi_color = input { default = "#FF6C58", type = input.color },
mdi_width = input { default = 1, type = input.line_width },
mdi_visible = input { default = true, type = input.plot_visibility }
}
input_group {
"front.newind.adx.threshold",
threshold_color = input { default = rgba(255,255,255,0.15), type = input.color },
threshold_width = input { default = 1, type = input.line_width },
threshold_visible = input { default = true, type = input.plot_visibility }
}
input_group {
"front.newind.adx.fill",
up_color = input { default = rgba(37,225,84,0.15), type = input.color },
down_color = input { default = rgba(255,108,88,0.15), type = input.color },
fill_visible = input { default = true, type = input.plot_visibility }
}
up_move = change (high)
down_move = -change (low)
pdm = iff (up_move > down_move and nz(up_move) > 0, up_move, 0)
mdm = iff (down_move > up_move and nz(down_move) > 0, down_move, 0)
atr = rma(tr, di_period)
pdi = 100 * rma (pdm / atr, di_period)
mdi = 100 * rma (mdm / atr, di_period)
adx = 100 * rma (abs (pdi - mdi) / (pdi + mdi), adx_period)
if threshold_visible then
hline { value = threshold, color = threshold_color, width = threshold_width }
end
if fill_visible then
fill (mdi, pdi, "", iff(pdi > mdi, up_color, down_color))
end
if mdi_visible then
plot (mdi, "MDI", mdi_color, mdi_width)
end
if pdi_visible then
plot (pdi, "PDI", pdi_color, pdi_width)
end
if adx_visible then
plot (adx, "ADX", adx_color, adx_width)
end