Type/to search
8
Follow
1370
Followers
Calcul et application de l'indicateur DMI
Discussions
Created 2019-07-03 14:03:53  Updated 2023-10-25 20:00:58
 9
 5459

img

Calcul et application de l'indicateur DMI

Introduction à l'indicateur

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

    Récemment, de nombreux amis du cercle quantitatif m'ont consulté sur la manière d'utiliser l'indicateur DMI sur la plateforme de trading quantitatif Inventor. Au début, je pensais que c'était une question simple, j'ai donc ouvert la documentation de l'API pour rechercher cette fonction d'indicateur. J'ai constaté que cet indicateur n'est pas inclus dans la bibliothèque d'indicateurs talib universelle. J'ai rapidement cherché sur Baidu et Zhihu... et après beaucoup de travail, j'ai trouvé quelques informations sur les indicateurs.
    J'ai découvert que cet indicateur est composé de quatre indicateurs. L'algorithme n'est pas très compliqué, je l'ai donc simplement écrit selon l'algorithme du document.

    Exemple d'adresse : https://www.fmz.com/strategy/154050

  • Veuillez publier 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] }
  • contraste

    En utilisant la bibliothèque de dessins de lignes quantitatives Inventor, il est très facile de dessiner un graphique et de le comparer avec le DMI sur d'autres graphiques

    img

    img

    En comparant les valeurs des indicateurs sur plusieurs Kbars, les valeurs sont fondamentalement cohérentes (avec un léger écart d'arrondi).

  • utiliser

    Utilisez directement la fonction DMI (comme la méthode appelée dans la fonction principale de l'exemple), transmettez les données de la ligne K et 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 les quatre lignes de l'indicateur DMI, DI- et DI+ sont des indicateurs longs et courts, reflétant la force des deux côtés, long et court.
    ADX et ADXR sont une paire de lignes indicatrices utilisées ensemble. Ce sont des indicateurs de tendance qui reflètent la tendance et la direction du marché actuel.

    DI+, plus la valeur de l'indicateur est élevée, plus les haussiers du marché actuel sont forts, et vice versa.
    DI-, l'indicateur est opposé.
    DI+ et DI- sont souvent étroitement liés, et plus les valeurs sont proches, plus le marché est susceptible de se trouver dans une impasse de consolidation. Au contraire, cela indique que la tendance se renforce.

    • Signal

      1. Trouvez le fond

      Après une longue période de déclin, si les conditions suivantes sont réunies à court terme, cela signifie que le fond à court terme a été trouvé et qu'un rebond ou un renversement de survente peut se produire.

        1. La ligne DI+, qui représente la puissance haussière, est inférieure à 10, se dirigeant vers le haut dans une position de survente, et la ligne DI- est à un niveau élevé.
        1. La ligne ADX représentant la tendance est à une position plus élevée au-dessus de 65, tourne vers le bas et forme un croisement mortel avec la ligne ADXR.
      1. Exploration de pointe

      Après une hausse à long terme, si les conditions suivantes sont remplies à court terme, cela signifie que le sommet à court terme a été trouvé et qu'un ajustement ou un renversement à court terme peut se produire.

        1. La ligne DI-, qui représente la force de vente à découvert, est inférieure à 10, à un niveau bas et se dirige vers le haut, tandis que la ligne DI+ est à un niveau élevé.
        1. La ligne ADX représentant la tendance est à une position plus élevée au-dessus de 65, tourne vers le bas et forme un croisement mortel avec la ligne ADXR.
      1. Démarrer

      Après une période de fluctuations, les quatre lignes de l'indicateur DMI se sont entrelacées à un niveau bas, puis soudainement un long chandelier positif avec une augmentation de volume de plus de 5% est apparu.
      La ligne DI+ croise continuellement la ligne DI-, la ligne ADX et la ligne ADXR en deux jours, indiquant qu'une nouvelle tendance à la hausse est sur le point de se former. Vous pouvez acheter lorsque la ligne DI+ croise la dernière ligne indicatrice.

Related Recommendations
Comment
All comments (5)

    for (var j = 0 ; j < adx.length; j++)语法检查会报错,因为adx也可能返回bool值,bool不能使用.length,可以添加条件过滤检查ADX函数返回值
    if (typeof adx === 'boolean' && adx === false) {
    Log("ADX计算失败,数据不足或参数错误");
    return null;
    }

    if (!adx || !Array.isArray(adx)) {
    Log("ADX返回值类型异常:", typeof adx);
    return null;
    }

    if (adx.length === 0) {
    Log("ADX返回空数组");
    return null;
    }

    9 months ago

    您好,编辑器的错误检测可以忽略,只是一种提醒。

    9 months ago

    似曾相识

    7 years ago

    梦总,能否写个基于DMI的趋势判断策略?

    7 years ago

    好的 有时间了 写个范例。

    7 years ago
  • 1
Forums
PINE Language
Get the app
iPhone Download
© 2015 - ∞ INVENTOR PTE LTD (SG)