Type/to search
8
Follow
1370
Followers
Cálculo e aplicação do indicador DMI
Discussions
Created 2019-07-03 14:03:53  Updated 2023-10-25 20:00:58
 9
 5459

img

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

    img

    img

    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.

Related Recommendations
Comment
All comments (5)

    for (var j = 0 ; j < adx.length; j++)语法检查会报错,因为adx也可能返回bool值,bool不能使用.length,可以添加条件过滤检查ADX函数返回值
    if (typeof adx === 'boolean' && adx === false) {
    Log("ADX计算失败,数据不足或参数错误");
    return null;
    }

    if (!adx || !Array.isArray(adx)) {
    Log("ADX返回值类型异常:", typeof adx);
    return null;
    }

    if (adx.length === 0) {
    Log("ADX返回空数组");
    return null;
    }

    9 months ago

    您好,编辑器的错误检测可以忽略,只是一种提醒。

    9 months ago

    似曾相识

    7 years ago

    梦总,能否写个基于DMI的趋势判断策略?

    7 years ago

    好的 有时间了 写个范例。

    7 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)