Расчет и применение показателей DMI

Автор:Доброта, Создано: 2019-08-03 14:24:10, Обновлено: 2023-11-08 20:43:17

img

Введение в показатели DMI

Индикатор DMI также называют индикатором импульса или индикатором тренда, полное название Directional Movement Index (DMI) . Он был создан американским гуру технического анализа Уэллсом Уайлдером, это среднесрочный и долгосрочный метод технического анализа рынка.

Показатель DMI представляет собой изменение точки равновесия покупателей и продавцов в процессе роста и падения цен, то есть изменение силы как длинной, так и короткой сторон влияет на колебания цен, и происходит циклический процесс от равновесия к дисбалансу, обеспечивая таким образом технический индикатор для оценки тенденции.

Расчет показателя

Недавно несколько друзей в области количественной торговли проконсультировались со мной о том, как использовать индикатор DMI на платформе количественной торговли FMZ Quant. Я подумал, что это очень простая проблема, и я открыл документацию API, чтобы найти эту функцию индикатора. Я обнаружил, что этот индикатор не доступен в библиотеке универсальных талиб индикаторов. после некоторого поиска в Google, я нашел некоторую информацию.

Выяснилось, что этот индикатор состоит из четырех индикаторов. Алгоритм не очень сложный. Просто следуйте алгоритму и все будет хорошо.

Адрес алгоритма: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]
}
  • Сравнение

Используя библиотеку данных FMZ Quant, легко нарисовать диаграмму и сравнивать DMI с другими диаграммами.

img img

При сравнении значений показателя на нескольких к-линейных барах значения в основном одинаковы (легко округленное отклонение).

  • Использование

Непосредственно использовать функцию DMI (например, как называется в основной функции в примере), передать в K линии данных, установить параметры индикатора, которые, как правило, 14.

Данные, возвращаемые функцией, представляют собой двумерный массив, представляющий четыре строки.

ДИ-: m_di DI+: p_di AdX: adx adXR: adxr

Среди этих четырех линий индикатора DMI DI- и DI+ являются длинными и короткими индикаторами, отражающими силу как длинной, так и короткой позиции.

AdX и adXR - это пара линий показателей, используемых вместе, которые являются индикаторами тенденций, отражающими текущую тенденцию и направление рынка.

DI+, чем выше значение индикатора, тем сильнее текущий бычий рынок, в противном случае тем слабее бычий рынок. ДИ, противоположное тому, что выше. ИИ+, ИИ- часто переплетаются, и чем ближе ценность между ними, рынок находится в тупике.

Сигнал

  • Сигнал цены

После длительного снижения цены, если следующие условия выполняются в краткосрочной перспективе, это указывает на то, что краткосрочное дно цены достигнуто, и может произойти отскок или перелом.

Линия DI+, которая представляет длинную силу покупки, находится ниже 10, а линия поворачивается вверх на перепроданной позиции, а линия DI находится на высокой позиции.

Линия AdX, которая представляет тенденцию, находится на более высоком уровне выше 65, поворачивая вниз и образуя нисходящий перекресток с линией adXR.

  • Сигнал ценовой вершины

После длительного роста, если следующие условия выполнены в краткосрочной перспективе, краткосрочная высокая цена достигнута, и могут произойти краткосрочные корректировки или отклонения.

Линия DI, которая представляет собой силу короткой продажи, ниже 10, а линия поворачивается вверх на низкой позиции, а линия DI+ - на высокой.

Линия AdX, которая представляет тенденцию, находится на более высоком уровне выше 65, поворачивая вниз и образуя нисходящий перекресток с линией adXR.

  • Увеличение тенденции

После периода колебаний в ценовом движении четыре линии индикатора DMI переплетаются на низкой цене, а затем внезапно появляется длинная положительная k-линия с большим объемом, увеличивающим цену более 5%.


Больше