El indicador DMI también se llama el indicador de impulso o el indicador de tendencia, el nombre completo es
El indicador DMI es un cambio en el punto de equilibrio de los compradores y vendedores en el proceso de subida y baja de los precios, es decir, el cambio de la fuerza tanto del lado largo como del lado corto se ve afectado por las fluctuaciones de los precios, y se produce el proceso cíclico de equilibrio a desequilibrio, proporcionando así un indicador técnico para juzgar la tendencia.
Recientemente, un número de amigos en el negocio del comercio cuantitativo me han consultado sobre cómo usar el indicador DMI en la plataforma de comercio cuantitativo FMZ Quant. Pensé que era un problema muy simple, y abrí la documentación de la API para encontrar esta función de indicador. Encontré que este indicador no está disponible en la biblioteca de indicadores
Se encuentra que este indicador está compuesto por cuatro indicadores. El algoritmo no es muy complicado. Simplemente siga el algoritmo y estará bien.
Dirección del algoritmo:https://www.fmz.com/strategy/154050
// indicator function
function AdX(MDI, PDI, adx_period) {
if(typeof(MDI) == "undefined" || typeof(PDI) == "undefined"){
Return false
}
if(MDI.length < 10 || PDI.length < 10){
Return false
}
/*
dX = abs(DIPlus-DIMinus) / (DIPlus+DIMinus)*100
AdX = sma(dX, len)
*/
var dx = []
for(var i = 0; i < MDI.length; i++){
if(!MDI[i] || !PDI[i]){
continue
}
var dxValue = Math.abs((PDI[i] - MDI[i])) / (PDI[i] + MDI[i]) * 100
var obj = {
close : dxValue,
}
dx.push(obj)
}
if(dx.length < adx_period){
Return false
}
var adx = talib.SMA(dx, adx_period)
Return adx
}
function DMI(records, pdi_period, mdi_period, adxr_period, adx_period) {
var recordsHLC = []
for(var i = 0; i < records.length ; i++){
var bar = {
High : records[i].High,
Low : records[i].Low,
close : records[i].close,
}
recordsHLC.push(bar)
}
var m_di = talib.MINUS_DI(recordsHLC, mdi_period)
var p_di = talib.PLUS_DI(recordsHLC, pdi_period)
var adx = AdX(m_di, p_di, adx_period)
// adXR=(AdX of the day before the AdX+ AX)÷2
var n = 0
var adxr = []
for (var j = 0 ; j < adx.length; j++) {
if (typeof(adx[j]) == "number") {
n++
}
if (n >= adxr_period) {
var curradxr = (adx[j] + adx[j - adxr_period]) / 2
adxr.push(curradxr)
} else {
adxr.push(NaN)
}
}
Return [m_di, p_di, adx, adxr]
}
Utilizando la biblioteca de datos de FMZ Quant, es fácil dibujar un gráfico y comparar DMI con otros gráficos.
Si se comparan los valores del indicador en varias barras de línea k, los valores son básicamente los mismos (desviación ligeramente redondeada).
Utilice directamente la función DMI (como la llamada en la función principal en el ejemplo), pase los datos de la línea K, establezca los parámetros del indicador, que generalmente son 14.
Los datos devueltos por la función son una matriz bidimensional que representa cuatro líneas.
D.I.-: m_di DI+: p_di AdX: adx adXR: adxr
Entre estas cuatro líneas del indicador DMI, DI- y DI+ son indicadores largos y cortos, que reflejan la fortaleza de la posición larga y corta.
AdX y adXR son un par de líneas de indicadores utilizadas juntas, que son indicadores de tendencia, que reflejan la tendencia y la dirección actuales del mercado.
DI+, cuanto mayor sea el valor del indicador, más fuerte será el mercado alcista actual, de lo contrario, más débil será el mercado alcista. DI, lo opuesto a lo de arriba. DI+, DI- se entrelazan a menudo, y cuanto más cerca está el valor entre ellos, el mercado está en un punto muerto.
Después de una caída de los precios a largo plazo, si se cumplen las siguientes condiciones a corto plazo, indica que se ha alcanzado el fondo de los precios a corto plazo y puede haber un repunte o una reversión.
La línea DI + que representa la fuerza de compra larga está por debajo de 10, y la línea se vuelve hacia arriba en la posición de sobreventa, y la línea DI está en la posición alta.
La línea AdX que representa la tendencia se encuentra en una posición superior por encima de 65, girando hacia abajo y formando un cruce hacia abajo con la línea adXR.
Después de un aumento a largo plazo, si se cumplen las siguientes condiciones a corto plazo, se ha alcanzado el precio alto a corto plazo y pueden producirse ajustes o reversiones a corto plazo.
La línea DI que representa la fuerza de venta a corto está por debajo de 10, y la línea se vuelve hacia arriba en la posición baja, y la línea DI + está en una posición alta.
La línea AdX que representa la tendencia se encuentra en una posición superior por encima de 65, girando hacia abajo y formando un cruce hacia abajo con la línea adXR.
Después de un período de fluctuaciones en el movimiento del precio, las cuatro líneas del indicador DMI