calDMIDatas method

dynamic calDMIDatas(
  1. dynamic close,
  2. dynamic high,
  3. dynamic low,
  4. dynamic p0,
  5. dynamic p1,
)

计算DMI指标 @param close 收盘点 @param high 最高点 @param low 最低点 @param p0 = 14 回溯周期 (1 <= p0 <= 300) @param p1 = 6 (1 <= p1 <= 300)

Implementation

calDMIDatas(close, high, low, p0, p1) {
  var resultObj = {};
  var di1Arr = [];
  var di2Arr = [];
  var adxArr = [];
  var adxrArr = [];
  var size = close.length;
  var i = 0;
  var refArr = REF(close, 1);
  var refHighArr = REF(high, 1);
  var refLowArr = REF(low, 1);
  var tr = [];
  var hd = [];
  var ld = [];
  var dmpArr = [];
  var dmmArr = [];
  num tempNum = 0;
  var tempADXArr = [];
  var tempADXRArr = [];
  var tempTr = [];
  var tempHDArr = [];
  var tempLDArr = [];
  for (i = 0; i < size; i++) {
    tempTr.add(Tools.max(
        Tools.max(high[i] - low[i], (high[i] - refArr[i]).abs()),
        (low[i] - refArr[i]).abs()));
    hd.add(high[i] - refHighArr[i]);
    ld.add(refLowArr[i] - low[i]);
    //计算dmp
    if (hd[i] > 0 && hd[i] > ld[i]) {
      tempNum = hd[i];
    } else {
      tempNum = 0.0;
    }
    tempHDArr.add(tempNum);
    //计算dmm
    if (ld[i] > 0 && ld[i] > hd[i]) {
      tempNum = ld[i];
    } else {
      tempNum = 0.0;
    }
    tempLDArr.add(tempNum);
  }
  tr = SUM(tempTr, p0);
  dmpArr = SUM(tempHDArr, p0);
  dmmArr = SUM(tempLDArr, p0);
  for (i = 0; i < size; i++) {
    if (!Tools.isNaN(tr[i])) {
      di1Arr.add((dmpArr[i] * 100) / tr[i]);
      di2Arr.add((dmmArr[i] * 100) / tr[i]);
    } else {
      di1Arr.add(0);
      di2Arr.add(0);
    }
    if (di1Arr[i] + di2Arr[i] == 0) {
      tempADXArr.add(0.0);
    } else {
      tempADXArr.add(
          ((di2Arr[i] - di1Arr[i]).abs() / (di1Arr[i] + di2Arr[i])) * 100);
    }
  }
  adxArr = MA(tempADXArr, p1);
  tempADXRArr = REF(adxArr, p1);
  var len = adxArr.length;
  for (i = 0; i < len; i++) {
    if (Tools.isNaN(adxArr[i]) || Tools.isNaN(tempADXRArr[i])) {
      adxrArr.add(0.0);
    } else {
      adxrArr.add((adxArr[i] + tempADXRArr[i]) / 2);
    }
  }
  resultObj['DI1'] = di1Arr;
  resultObj['DI2'] = di2Arr;
  resultObj['ADX'] = adxArr;
  resultObj['ADXR'] = adxrArr;
  return resultObj;
}