
Introdução ao Indicador
DMI指标又叫动向指标或趋向指标,其全称叫“Directional Movement Index,简称DMI”,
也是由美国技术分析大师威尔斯·威尔德(Wells Wilder)所创造的,是一种中长期股市技术分析(Technical Analysis)方法。
DMI指标是通过分析股票价格在涨跌过程中买卖双方力量均衡点的变化情况,
即多空双方的力量的变化受价格波动的影响而发生由均衡到失衡的循环过程,从而提供对趋势判断依据的一种技术指标。
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
// 指标函数
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]
}
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


Comparando os valores indicadores em várias Kbars, os valores são basicamente consistentes (com ligeiro desvio de arredondamento).
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.
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
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.
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.
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.