L'indicateur DMI est également appelé l'indicateur de dynamique ou l'indicateur de tendance, son nom complet est
L'indicateur DMI est une modification du point d'équilibre des acheteurs et des vendeurs dans le processus de hausse et de baisse des prix, c'est-à-dire que la variation de la force des deux côtés long et court est affectée par les fluctuations des prix et que le processus cyclique d'équilibre à déséquilibre se produit, fournissant ainsi un indicateur technique pour juger de la tendance.
Récemment, un certain nombre d'amis dans le secteur du trading quantitatif m'ont consulté sur la façon d'utiliser l'indicateur DMI sur la plateforme de trading quantitatif FMZ Quant. Je pensais que c'était un problème très simple, et j'ai ouvert la documentation de l'API pour trouver cette fonction d'indicateur. J'ai trouvé que cet indicateur n'était pas disponible dans la bibliothèque d'indicateurs
Il s'avère que cet indicateur est composé de quatre indicateurs. L'algorithme n'est pas très compliqué.
adresse de l'algorithme: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]
}
En utilisant la bibliothèque de données de FMZ Quant, il est facile de dessiner un graphique et de comparer le DMI avec d'autres graphiques.
En comparant les valeurs de l'indicateur sur plusieurs barres de ligne k, les valeurs sont fondamentalement les mêmes (déviation légèrement arrondie).
Utilisez directement la fonction DMI (comme la façon appelée dans la fonction principale dans l'exemple), passez les données de la ligne K, définissez les paramètres de l'indicateur, qui sont généralement 14.
Les données renvoyées par la fonction sont un tableau bidimensionnel représentant quatre lignes.
DI- : m_di DI+: p_di AdX: adx adXR: adxr
Parmi ces quatre lignes de l'indicateur DMI, DI- et DI+ sont des indicateurs longs et courts, reflétant la force des positions longues et courtes.
AdX et adXR sont une paire de lignes d'indicateurs utilisées ensemble, qui sont des indicateurs de tendance, reflétant la tendance et la direction actuelles du marché.
DI+, plus la valeur de l'indicateur est élevée, plus le marché haussier actuel est fort, sinon plus le marché haussier est faible. DI, l'opposé de ce qui précède. Les DI+, les DI- sont souvent entrelacés, et plus la valeur est proche, le marché est dans une impasse.
Après une baisse des prix à long terme, si les conditions suivantes sont remplies à court terme, cela indique que le fond des prix à court terme a été atteint et qu'il peut y avoir un rebond ou un renversement.
La ligne DI+ qui représente la force d'achat longue est inférieure à 10, et la ligne est tournée vers le haut dans la position de survente, et la ligne DI est à la position élevée.
La ligne AdX qui représente la tendance est située à une position supérieure à 65, se retourne vers le bas et forme un croisement vers le bas avec la ligne adXR.
Après une hausse à long terme, si les conditions suivantes sont remplies à court terme, le prix élevé à court terme a été atteint et il peut y avoir des ajustements ou des revers à court terme.
La ligne DI qui représente la force de vente à découvert est inférieure à 10, la ligne est tournée vers le haut à la position basse et la ligne DI+ est à la position haute.
La ligne AdX qui représente la tendance est située à une position supérieure à 65, se retourne vers le bas et forme un croisement vers le bas avec la ligne adXR.
Après une période de fluctuations dans le mouvement des prix, les quatre lignes d'indicateur de DMI