callVR method

dynamic callVR(
  1. dynamic open,
  2. dynamic close,
  3. dynamic vol,
  4. dynamic p,
  5. dynamic p2,
)

p = 24, p2 = 6

Implementation

callVR(open, close, vol, p, p2) {
  //无参数

  // 1.AV=N日内股价上升日成交量;AVS=N日内ΣAV
  // 2.BV=N日内股价下跌日成交量;BVS=N日内ΣBV
  // 3.CV=N日内股价平盘日成交量;CVS=N日内ΣCV
  // 4.VR=(AVS+1/2CVS)/(BVS+1/2CVS)
  // 5.MAVR=VR的M日简单移动平均
  // 6.参数N为24,参数M为6

  var obj = {};
  var size = open.length;
  var VR = [], MAVR = [];
  var i = 0;
  var j = 0;
  for (i = 0; i < size; i++) {
    if (i > 0) {
      // 不能= 因为 b要访问前一根
      dynamic asum = 0.0, bsum = 0.0, csum = 0.0, jp = i > p - 1 ? p - 1 : i - 1;
      for (j = jp; j >= 0; j--) {
        asum += close[i - j] > open[i - j] ? vol[i - j] : 0.0;
        bsum += close[i - j] < open[i - j] ? vol[i - j] : 0.0;
        csum += close[i - j] == open[i - j] ? vol[i - j] : 0.0;
      }
      VR.add((asum + (1 / 2) * csum) / (bsum + (1 / 2) * csum));
      if (VR[i] == double.infinity) {
        VR[i] = 0.0;
      }
    } else {
      VR.add("-");
    }
  }
  MAVR = MA(VR, p2);
  obj['VR'] = VR;
  obj['MAVR'] = MAVR;
  return obj;
}