callADXDatas method

dynamic callADXDatas(
  1. dynamic low,
  2. dynamic high,
  3. dynamic close,
  4. dynamic N,
)

指标ADX close一段k线的收盘价 N回溯周期 默认传14

Implementation

callADXDatas(low, high, close, N) {
  var size = close.length;
  var i = 0;
  var refClose = REF(close, 1);
  var refHigh = REF(high, 1);
  var refLow = REF(low, 1);
  var smad = [];
  var hd = [];
  var ld = [];
  var dmpDatas = [];
  var dmmDatas = [];
  var pdi = [];
  var mdi = [];
  for (i = 0; i < size; i++) {
    var value = Tools.max(
        Tools.max(high[i] - low[i], (high[i] - refClose[i]).abs()),
        (low[i] - refClose[i]).abs());
    smad.add(value);
  }
  var tr1 = EMA(smad, N);
  for (i = 0; i < size; i++) {
    hd.add(high[i] - refHigh[i]);
    ld.add(low[i] - refLow[i]);
    dmpDatas.add(hd[i] > 0 && hd[i] > ld[i] ? hd[i] : 0.0);
    dmmDatas.add(ld[i] > 0 && hd[i] < ld[i] ? ld[i] : 0.0);
  }
  var dmp = EMA(dmpDatas, N);
  var dmm = EMA(dmmDatas, N);
  //
  var adxDatas = [];
  for (i = 0; i < size; i++) {
    pdi.add(tr1[i] == 0 ? 0.0 : (dmp[i] * 100) / tr1[i]);
    mdi.add(tr1[i] == 0 ? 0.0 : (dmm[i] * 100) / tr1[i]);
    if (mdi[i] + pdi[i] == 0) {
      adxDatas.add(0.0);
    } else {
      adxDatas.add(((mdi[i] - pdi[i]).abs() / (mdi[i] + pdi[i])) * 100);
    }
  }
  var adx = EMA(adxDatas, N);
  var result = {};
  result['PDI'] = pdi;
  result['MDI'] = mdi;
  result['ADX'] = adx;
  return result;
}