O indicador DMI também é chamado de indicador de momento ou indicador de tendência, o nome completo é
O indicador DMI é uma mudança no ponto de equilíbrio dos compradores e vendedores no processo de subida e queda dos preços, isto é, a mudança da força tanto do lado longo como do lado curto é afetada pelas flutuações de preços, e ocorre o processo cíclico de equilíbrio para desequilíbrio, fornecendo assim um indicador técnico para julgar a tendência.
Recentemente, vários amigos no negócio de negociação quantitativa me consultaram sobre como usar o indicador DMI na plataforma de negociação quantitativa FMZ Quant. Eu pensei que era um problema muito simples e abri a documentação da API para encontrar essa função de indicador. Descobri que esse indicador não está disponível na biblioteca de indicadores
O algoritmo não é muito complicado, basta seguir o algoritmo e tudo ficará bem.
endereço do 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]
}
Usando a biblioteca de dados do FMZ Quant, é fácil desenhar um gráfico e comparar o DMI com outros gráficos.
Comparando os valores do indicador em várias barras de linha k, os valores são basicamente os mesmos (desvio ligeiramente arredondado).
Usar diretamente a função DMI (como a forma chamada na função principal no exemplo), passar os dados da linha K, definir 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 estas quatro linhas do indicador DMI, DI- e DI+ são indicadores longos e curtos, refletindo a força da posição longa e curta.
O AdX e o adXR são um par de linhas de indicadores usadas em conjunto, que são indicadores de tendência, refletindo a tendência e a direção atuais do mercado.
DI+, quanto maior o valor do indicador, mais forte é o mercado de alta atual, caso contrário, mais fraco é o mercado de baixa. DI, o oposto do acima. O DI+, o DI- são muitas vezes entrelaçados, e quanto mais próximo o valor entre eles, o mercado está em um impasse.
Após uma queda de preços a longo prazo, se as seguintes condições estiverem preenchidas a curto prazo, indica que o fundo de preços a curto prazo foi atingido e que pode haver uma recuperação ou reversão.
A linha DI+ que representa a força de compra longa está abaixo de 10, e a linha é virada para cima na posição de sobrevenda, e a linha DI está na posição alta.
A linha AdX que representa a tendência está numa posição superior acima de 65, virando para baixo e formando uma cruz descendente com a linha adXR.
Após um aumento a longo prazo, se as seguintes condições forem satisfeitas a curto prazo, o preço elevado a curto prazo foi atingido e podem ocorrer ajustamentos ou reversões a curto prazo.
A linha DI que representa a força de venda a curto prazo está abaixo de 10, e a linha é virada para cima na posição baixa, e a linha DI+ está em uma posição alta.
A linha AdX que representa a tendência está numa posição superior acima de 65, virando para baixo e formando uma cruz descendente com a linha adXR.
Após um período de flutuações no movimento do preço, as quatro linhas do indicador DMI