avatar of 发明者量化-小小梦 发明者量化-小小梦
focar em Mensagem privada
4
focar em
1271
Seguidores

Cálculo e aplicação do indicador DMI

Criado em: 2019-07-03 14:03:53, atualizado em: 2023-10-25 20:00:58
comments   9
hits   4768

Cálculo e aplicação do indicador DMI

Cálculo e aplicação do indicador DMI

Introdução ao Indicador

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

Recentemente, muitos amigos do círculo quantitativo me consultaram sobre como usar o indicador DMI na plataforma de negociação quantitativa Inventor. A princípio pensei que fosse uma pergunta simples, então abri a documentação da API para procurar por essa função de indicador. Descobri que esse indicador não está incluído na biblioteca universal de indicadores do Talibã. Pesquisei rapidamente no Baidu e no Zhihu… e depois de muito trabalho, encontrei algumas informações sobre os indicadores. Descobri que esse indicador é composto de quatro indicadores. O algoritmo não é muito complicado, então eu simplesmente o escrevi de acordo com o algoritmo do material.

Endereço de exemplo: https://www.fmz.com/strategy/154050

  • Por favor, publique o código fonte do 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

Usando a Biblioteca de Desenho de Linha Quantitativa do Inventor, é muito fácil desenhar um gráfico e compará-lo com o DMI em outros gráficos

Cálculo e aplicação do indicador DMI

Cálculo e aplicação do indicador DMI

Comparando os valores indicadores em várias Kbars, os valores são basicamente consistentes (com ligeiro desvio de arredondamento).

  • usar

Use diretamente a função DMI (como o método chamado na função principal no exemplo), passe os dados da linha K e defina os parâmetros do indicador, que geralmente são 14. Os dados retornados pela função são uma matriz bidimensional, representando quatro linhas.

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

Entre as quatro linhas do indicador DMI, DI- e DI+ são indicadores longos e curtos, refletindo a força dos lados longo e curto. ADX e ADXR são um par de linhas indicadoras usadas juntas. São indicadores de tendência que refletem a tendência e a direção do mercado atual.

DI+, quanto maior o valor do indicador, mais fortes são os touros atuais do mercado, e vice-versa. DI-, o indicador é o oposto. DI+ e DI- costumam estar interligados e, quanto mais próximos os valores, maior a probabilidade de o mercado estar em um impasse de consolidação. Pelo contrário, indica que a tendência está se fortalecendo.

  • Sinal

    1. Encontre o fundo

    Após um longo período de declínio, se as seguintes condições forem atendidas no curto prazo, isso significa que o fundo de curto prazo foi encontrado e uma recuperação ou reversão de sobrevenda pode ocorrer.

      1. A linha DI+, que representa o poder de alta, está abaixo de 10, virando para cima em uma posição de sobrevenda, e a linha DI- está em um nível alto.
      1. A linha ADX que representa a tendência está em uma posição mais alta acima de 65, vira para baixo e forma uma cruz da morte com a linha ADXR.
    1. Exploração de pico

    Após uma alta de longo prazo, se as seguintes condições forem atendidas no curto prazo, isso significa que o topo de curto prazo foi encontrado e um ajuste ou reversão de curto prazo pode ocorrer.

      1. A linha DI-, que representa a força de venda a descoberto, está abaixo de 10, em um nível baixo e subindo, enquanto a linha DI+ está em um nível alto.
      1. A linha ADX que representa a tendência está em uma posição mais alta acima de 65, vira para baixo e forma uma cruz da morte com a linha ADXR.
    1. Iniciar

    Após um período de flutuações, as quatro linhas do indicador DMI se entrelaçaram em um nível baixo e, de repente, apareceu um longo candle positivo com um aumento de volume de mais de 5%. A linha DI+ cruza a linha DI-, a linha ADX e a linha ADXR continuamente dentro de dois dias, indicando que uma nova tendência de alta está prestes a se formar. Você pode comprar quando a linha DI+ cruzar a última linha do indicador.