avatar of 发明者量化-小小梦 发明者量化-小小梦
Seguir Mensajes Privados
4
Seguir
1271
Seguidores

Cálculo y aplicación del indicador DMI

Creado el: 2019-07-03 14:03:53, Actualizado el: 2023-10-25 20:00:58
comments   9
hits   4770

Cálculo y aplicación del indicador DMI

Cálculo y aplicación del indicador DMI

Introducción del indicador

DMI指标又叫动向指标或趋向指标,其全称叫“Directional Movement Index,简称DMI”,
也是由美国技术分析大师威尔斯·威尔德(Wells Wilder)所创造的,是一种中长期股市技术分析(Technical Analysis)方法。
DMI指标是通过分析股票价格在涨跌过程中买卖双方力量均衡点的变化情况,
即多空双方的力量的变化受价格波动的影响而发生由均衡到失衡的循环过程,从而提供对趋势判断依据的一种技术指标。
  • ### Cálculo del indicador

Recientemente, muchos amigos del círculo cuantitativo me han consultado sobre cómo utilizar el indicador DMI en la plataforma de negociación cuantitativa Inventor. Al principio pensé que era una pregunta sencilla, así que abrí la documentación de la API para buscar esta función indicadora. Descubrí que este indicador no está incluido en la biblioteca de indicadores talibán universal. Busqué rápidamente en Baidu y Zhihu… y después de mucho trabajo duro, encontré algo de información sobre los indicadores. Descubrí que este indicador está compuesto por cuatro indicadores. El algoritmo no es muy complicado, así que simplemente lo escribí de acuerdo con el algoritmo que aparece en el material.

Dirección de ejemplo: https://www.fmz.com/strategy/154050

  • Por favor publique el código fuente del indicador
  // 指标函数
  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+前n日的ADX)÷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]
  }
  • contraste

Con la biblioteca de dibujo lineal cuantitativo de Inventor, es muy fácil dibujar un gráfico y compararlo con el DMI de otros gráficos.

Cálculo y aplicación del indicador DMI

Cálculo y aplicación del indicador DMI

Comparando los valores del indicador en varias Kbars, los valores son básicamente consistentes (con una ligera desviación de redondeo).

  • usar

Utilice directamente la función DMI (como el método llamado en la función principal en el ejemplo), pase los datos de la línea K y configure 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.

  • DI- : m_di,
  • DI+ : p_di,
  • ADX : adx,
  • ADXR: adxr,

Entre las cuatro líneas del indicador DMI, DI- y DI+ son indicadores largos y cortos, que reflejan la fuerza de ambos lados, largo y corto. ADX y ADXR son un par de líneas indicadoras que se utilizan juntas. Son indicadores de tendencia que reflejan la tendencia y la dirección del mercado actual.

DI+, cuanto mayor sea el valor del indicador, más fuertes serán los alcistas del mercado actual, y viceversa. DI-, el indicador es opuesto. DI+ y DI- a menudo están entrelazados, y cuanto más cercanos sean los valores, más probable es que el mercado se encuentre en un punto muerto de consolidación. Por el contrario, indica que la tendencia se está fortaleciendo.

  • Señal

    1. Encuentra el fondo

    Después de un largo período de caída, si se cumplen las siguientes condiciones en el corto plazo, significa que se ha encontrado el fondo de corto plazo y puede ocurrir un rebote o una reversión de sobreventa.

      1. La línea DI+, que representa el poder alcista, está por debajo de 10, girando hacia arriba en una posición de sobreventa, y la línea DI- está en un nivel alto.
      1. La línea ADX que representa la tendencia está en una posición más alta por encima de 65, gira hacia abajo y forma un cruce de la muerte con la línea ADXR.
    1. Exploración de la cima

    Después de un aumento a largo plazo, si se cumplen las siguientes condiciones en el corto plazo, significa que se ha encontrado el máximo a corto plazo y puede ocurrir un ajuste o una reversión a corto plazo.

      1. La línea DI-, que representa la fuerza de venta en corto, está por debajo de 10, en un nivel bajo y girando hacia arriba, mientras que la línea DI+ está en un nivel alto.
      1. La línea ADX que representa la tendencia está en una posición más alta por encima de 65, gira hacia abajo y forma un cruce de la muerte con la línea ADXR.
    1. Inicio

    Después de un período de fluctuaciones, las cuatro líneas del indicador DMI se entrelazaron en un nivel bajo y, de repente, apareció una vela positiva larga con un aumento de volumen de más del 5%. La línea DI+ cruza la línea DI-, la línea ADX y la línea ADXR continuamente en dos días, lo que indica que está a punto de formarse una nueva tendencia ascendente. Puedes comprar cuando la línea DI+ cruza la última línea indicadora.