리소스 로딩... 로딩...

DMI 지표의 계산과 응용

저자:발명가들의 수량화 - 작은 꿈, 2019-07-03 14:03:53에 작성, 2023-10-25 20:00:58에 업데이트

img

DMI 지표의 계산과 응용

지표 설명

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

    최근 많은 퀀티메이션 서클의 친구들이 저에게 DMI 지표를 발명자 퀀티메이션 거래 플랫폼에서 사용하는 방법을 문의했습니다. 간단한 문제라고 생각하기 시작했고, API 문서를 열고 이 지표 기능을 검색했습니다. 만능 타리브 지표库에서 이 지표가 없다는 것을 발견했습니다. 서둘러 바우도, 알고 있습니다. 이 지표는 네 가지 지표의 조합으로 이루어져 있으며 알고리즘이 복잡하지 않다는 것을 발견했습니다.

    예를 들어, 주소:https://www.fmz.com/strategy/154050

  • 지표의 소스코드를 게시하세요.

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

    발명가들에 의해 정량화 된 도화선 클래스 라이브러리를 사용하여 다른 차트에 있는 DMI와 비교할 수 있는 차트를 쉽게 도출할 수 있습니다.

    img

    img

    몇 개의 Kbar에 대한 지표값을 비교하여 값은 거의 일치합니다 (미미한 4/5의 오차).

  • 사용

    DMI라는 함수를 직접 사용하여 (예: 예제에서 main 함수에서 호출하는 방법) K줄 데이터를 전송하고 지표 변수를 설정합니다. 일반적으로 14입니다. 함수가 반환하는 데이터는 2차원 배열이고 각각 4개의 줄을 나타냅니다.

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

    DMI 지표의 이 네 줄은, DI-,DI+가 다공간 지표이며, 다공간 양쪽의 힘을 나타낸다. ADX와 ADXR는 두 개의 지표선으로 사용되며, 현재 시장의 추세와 방향을 나타내는 경향 지표입니다.

    DI+는 지표의 값이 높을수록 현재 시장이 더 강해지고, 반대로 더 약해지는 것을 나타냅니다. DI-, 지표는 반대입니다. DI+,DI-는 종종 겹쳐져 있으며, 그 사이의 값이 더 가까워지면 시장이 전체적인 마감 상태에 있다는 것을 나타냅니다. 반대로 트렌드형 증강을 나타냅니다.

    • 신호

      1, 바닥을 찾아

      장기적인 하락 이후 단기적인 하락이 다음 조건을 충족하면 단기적인 하락이 밝혀졌다는 것을 나타냅니다.

      • 1, 다중력을 나타내는 DI+ 라인은 10 이하로, 오버락 위치에서 위쪽 곡선, DI 라인은 높습니다.

      • 2, 추세를 나타내는 ADX 라인은 65 이상 높은 위치에 있으며, 아래로 기울어 ADXR 라인과 정체를 형성합니다.

      두 번째, 탐사선

      장기간 상승한 후 단기간에 다음 조건이 충족되는 경우 단기적인 상점이 발견되어 단기적인 조정 또는 반전이 발생할 수 있음을 나타냅니다.

      • 1, 공중전력을 나타내는 DI 선은 10 이하로, 낮은 위치에 있고 위로 기울어, DI + 선은 높은 위치에 있다.

      • 2, 추세를 나타내는 ADX 라인은 65 이상 높은 위치에 있으며, 아래로 기울어 ADXR 라인과 정체를 형성합니다.

      세 번째, 상승

      추세는 잠시 변동된 후, DMI의 네 개의 지표 라인이 낮은 곳에서 서로 얽히고, 그 다음 갑자기 5% 이상 상승한 양량 긴 k 라인이 나타났습니다. DI+ 라인은 2일 연속으로 DI- 라인, ADX 라인 및 ADXR 라인을 통과하여 새로운 상승 추세가 형성될 것을 나타냅니다.


관련

더 많은

외로운 사람예전처럼

웅제뉴프@MrinSum, DMI에 기반한 트렌드 판단 전략을 쓸 수 있나요?

발명가들의 수량화 - 작은 꿈좋은 시간입니다. 예제를 작성하십시오.