Calcul et application des indicateurs DMI

Auteur:La bonté, Créé: 2019-08-03 14:24:10, Mis à jour: 2023-11-08 20:43:17

img

Introduction aux indicateurs de l'IMD

L'indicateur DMI est également appelé l'indicateur de dynamique ou l'indicateur de tendance, son nom complet est Directional Movement Index (DMI) . Il a été créé par le gourou américain de l'analyse technique Wells Wilder, il s'agit d'une méthode d'analyse technique de marché à moyen et long terme.

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.

Calcul des indicateurs

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 versatile talib. après un peu de googling, j'ai trouvé des informations.

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

  • Code source

// 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]
}
  • Comparer

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.

img img

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).

  • Utilisation

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.

Signalisation

  • Signal de baisse des prix

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.

  • Signal de pointe du prix

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.

  • La tendance à la hausse

Après une période de fluctuations dans le mouvement des prix, les quatre lignes d'indicateur de DMI sont entrelacées au prix bas, puis soudain, il y a une longue k-line positive avec un volume important augmentant le prix de plus de 5%.


Plus de