Les ressources ont été chargées... Je charge...

Calcul et application des indicateurs DMI

Auteur:L'inventeur de la quantification - un petit rêve, Créé: 2019-07-03 14:03:53, Mis à jour: 2023-10-25 20:00:58

img

Calcul et application des indicateurs DMI

Résumé des indicateurs

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

    Récemment, de nombreux amis du cercle de la quantification m'ont demandé comment utiliser l'indicateur DMI sur la plate-forme de négociation quantitative des inventeurs. Je pensais que c'était un problème simple, j'ai ouvert la documentation de l'API pour rechercher cette fonction. J'ai découvert que l'indicateur n'existait pas dans la base d'indicateurs talib omnipotente. Nous avons découvert qu'il s'agissait d'une combinaison de quatre indicateurs, et que l'algorithme n'était pas très compliqué.

    L'adresse de l'exemple:https://www.fmz.com/strategy/154050

  • Pour le code source de l'indicateur

    // 指标函数
    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]
    }
    
  • Le contraste

    Avec la bibliothèque de classes de lignes de dessin quantifiée par l'inventeur, il est facile de dessiner des graphiques qui peuvent être comparés aux autres DMI des graphiques suivants

    img

    img

    Les valeurs de l'indicateur sur plusieurs Kbar sont comparées et les valeurs sont en grande partie les mêmes (un écart légèrement inférieur à 4/5).

  • Utilisation

    Utilisez directement la fonction DMI (comme dans l'exemple de l'appel de la fonction main) pour transmettre des données de ligne K et définir des paramètres d'indicateur, généralement 14. La fonction renvoie des données en deux dimensions, représentant respectivement quatre lignes.

    • DI- : m_di,
    • DI+ : p_di,
    • ADX: adx,
    • ADXR: adxr,

    Dans l'indicateur DMI, ces quatre lignes, dont DI-, DI+ sont des indicateurs de polyspace, représentent la force des deux polyspaces. L'ADX et l'ADXR sont des lignes d'indicateurs utilisées conjointement et sont des indicateurs de tendance qui reflètent les tendances et les directions actuelles du marché.

    L'indicateur DI+ indique que le marché actuel est plus fort et plus faible. DI-, l'indicateur inverse. DI+, DI- sont souvent entrelacés, et les valeurs les plus proches représentent un marché dans un état d'impasse.

    • Le signal

      1er, trouver le fond

      Après une baisse à long terme, si les conditions suivantes sont remplies à court terme, il est probable qu'un rebond ou un renversement de la baisse à court terme se produise.

      • 1, la ligne DI+ représentant la force multi-tête est inférieure à 10 et se trouve à l'angle supérieur de la position de chute, la ligne DI est élevée.

      • 2, la ligne ADX représentant la tendance est en position supérieure à 65 et se déforme vers le bas et forme une fourche morte avec la ligne ADXR.

      2e étage

      Après une hausse à long terme, si les conditions suivantes sont remplies à court terme, le sommet à court terme a été détecté et une correction ou un renversement à court terme est possible.

      • 1, la ligne de DI, qui représente la force de la tête vide, est inférieure à 10, est basse et tourne vers le haut, et la ligne DI + est haute.

      • 2, la ligne ADX représentant la tendance est en position supérieure à 65 et se déforme vers le bas et forme une fourche morte avec la ligne ADXR.

      3e, la montée

      Après une période de fluctuation, les quatre lignes de l'indicateur DMI s'enlacent dans les bas, puis apparaissent soudainement des lignes longues k avec une hausse de plus de 5%. La ligne DI+ traverse la ligne DI, la ligne ADX et la ligne ADXR pendant deux jours consécutifs, ce qui représente une nouvelle tendance à la hausse.


Relationnée

Plus de

L'homme solitaireOn dirait qu'on se connaît.

- Je vous en prie.Le blogueur a écrit: "C'est un peu comme si vous aviez écrit une stratégie de jugement de tendance basée sur le DMI.

L'inventeur de la quantification - un petit rêveBon, il est temps d'écrire un exemple.