DMI 지표의 계산 및 적용

저자:선함, 2019-08-03 14:24:10, 업데이트: 2023-11-08 20:43:17

img

DMI 지표에 대한 소개

DMI 지표는 동력 지표 또는 트렌드 지표로도 불리며, 전체 이름은 디렉션 모브먼트 인덱스 (DMI) 이다. 미국 기술 분석 전문가 웰스 와일더 (Wells Wilder) 에 의해 만들어졌으며, 중장기 시장 기술 분석 방법이다.

DMI 지표는 가격 상승과 하락 과정에서 구매자와 판매자의 균형점의 변화입니다. 즉, 긴 측면과 짧은 측면의 힘의 변화는 가격 변동에 영향을 받으며 균형에서 불균형으로의 순환 과정이 발생하여 추세를 판단하는 기술적 지표를 제공합니다.

지표 계산

최근, 양적 거래 사업의 몇몇 친구들은 FMZ 양적 거래 플랫폼에서 DMI 지표를 사용하는 방법에 대해 나에게 문의했습니다. 나는 그것이 매우 간단한 문제라고 생각했고, 나는 이 지표 기능을 찾기 위해 API 문서를 열었습니다. 이 지표가 다재다능한 타리브 지표 라이브러리에서 사용할 수 없다는 것을 발견했습니다. 약간의 구글 검색 후, 나는 몇 가지 정보를 발견했습니다.

이 지표는 네 개의 지표로 구성되어 있다는 것을 알 수 있습니다. 알고리즘은 매우 복잡하지 않습니다. 단순히 알고리즘을 따르면 괜찮을 것입니다.

알고리즘 주소: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

여러 k-라인 바에 있는 지표 값을 비교하면, 값은 기본적으로 동일합니다 (미미한 둥근 오차).

  • 사용

직접 DMI 함수를 사용 (예를 들어 예제에서 주요 함수에서 호출 된 방법), K 라인 데이터를 전달, 일반적으로 14 인 지표 매개 변수를 설정합니다.

함수가 반환하는 데이터는 네 줄을 나타내는 2차원 배열입니다.

DI-: m_di DI+: p_di ADX: ADX adXR: adxr

이 네 줄의 DMI 지표 중, DI-와 DI+는 긴 지표와 짧은 지표이며, 긴 지표와 짧은 지표의 강도를 반영합니다.

AdX와 adXR는 시장의 현재 추세와 방향을 반영하는 트렌드 지표로 함께 사용되는 지표 라인 쌍입니다.

DI+, 지표 값이 높을수록 현재의 황소 시장이 강해질 것이고 그렇지 않으면 황소 시장이 약해질 것입니다. DI, 위쪽의 반대입니다. DI+, DI-는 종종 얽혀 있고, 그 값이 가까워질수록 시장은 교착 상태에 있습니다. 반대로, 추세는 강화됩니다.

신호

  • 가격 하위 신호

장기적인 가격 하락 후 단기적으로 다음 조건이 충족되면 단기 가격 바닥에 도달했다는 것을 나타냅니다.

긴 구매 강도를 나타내는 DI + 라인은 10 이하이고, 라인은 과판된 위치에서 위로 돌아가고, DI 라인은 높은 위치입니다.

트렌드를 나타내는 AdX 라인은 65보다 높은 위치에 있으며, 아래로 돌고 adXR 라인과 아래로 교차합니다.

  • 가격 상위 신호

장기적인 상승 후, 단기적으로 다음 조건이 충족되면 단기적인 높은 가격에 도달하고 단기적인 조정이나 반전이 발생할 수 있습니다.

단축 판매 강도를 나타내는 DI 라인은 10 이하이고, 라인은 낮은 위치에서 상향으로 돌리고, DI + 라인은 높은 위치에 있습니다.

트렌드를 나타내는 AdX 라인은 65보다 높은 위치에 있으며, 아래로 돌고 adXR 라인과 아래로 교차합니다.

  • 증가 추세

가격 움직임의 변동 기간 후, DMI의 네 개의 지표 라인은 낮은 가격에 얽혀 있으며, 갑자기 큰 부피가 가격을 5% 이상 증가시키는 긴 긍정적 k- 라인이 나타납니다. DI + 라인은 2 일 이내에 DI- 라인, AdX 라인 및 adXR 라인을 지속적으로 통과하여 새로운 상승 추세가 형성 될 것을 나타냅니다. DI + 라인업이 마지막 지표 라인을 통과 할 때 포지션을 열 수 있습니다.


더 많은