calKDJDatas method

dynamic calKDJDatas(
  1. dynamic low,
  2. dynamic high,
  3. dynamic close,
  4. dynamic kp,
  5. dynamic dp,
  6. dynamic jp,
)

计算KDJ指标 @param low 最低点 @param high 最高点 @param close 收盘点 @param kp = 9 LLV,HHV的回溯周期 (1 <= kp <= 100) @param dp = 3 SMA参数(2 <= dp <= 40) @param jp = 3 SMA参数(2 <= jp <= 40) kp回溯周期以前的数值是-

Implementation

calKDJDatas(low, high, close, kp, dp, jp) {
  var size = close.length;
  var llv_low = LLV(low, kp);
  var hhv_high = HHV(high, kp);
  var rsv = [];
  var i = 0;
  for (i = 0; i < size; i++) {
    if (i >= kp - 1) {
      rsv.add(((close[i] - llv_low[i]) / (hhv_high[i] - llv_low[i])) * 100);
    } else {
      rsv.add("-");
    }
  }
  var kdj_k = SMA(rsv, dp, 1); //3
  var kdj_d = SMA(kdj_k, jp, 1); //3
  var kdj_j = [];
  for (i = 0; i < rsv.length; i++) {
    if (i >= kp - 1) {
      kdj_j.add(3 * kdj_k[i] - 2 * kdj_d[i]);
    } else {
      kdj_j.add("-");
    }
  }
  for (i = 0; i < rsv.length; i++) {
    if (i >= kp - 1) {
      if (kdj_j[i] < 0) {
        kdj_j[i] = 0.0;
      } else if (kdj_j[i] > 100) {
        kdj_j[i] = 100.0;
      }
      if (kdj_k[i] < 0) {
        kdj_k[i] = 0.0;
      } else if (kdj_k[i] > 100) {
        kdj_k[i] = 100.0;
      }
      if (kdj_d[i] < 0) {
        kdj_d[i] = 0.0;
      } else if (kdj_d[i] > 100) {
        kdj_d[i] = 100.0;
      }
    }
  }
  var obj = {};
  obj['K'] = kdj_k;
  obj['D'] = kdj_d;
  obj['J'] = kdj_j;
  return obj;
}