calc method

  1. @override
void calc(
  1. List<KLineEntity> dataList
)
override

Implementation

@override
void calc(List<KLineEntity> dataList) {
  final params = calcParams;
  double closeSum = 0;
  double emaShort = 0;
  double emaLong = 0;
  double dif = 0;
  double difSum = 0;
  double dea = 0;
  final maxPeriod = max(params[0], params[1]);

  for (int i = 0; i < dataList.length; i++) {
    KLineEntity entity = dataList[i];
    final close = entity.close;
    closeSum += close;
    if (i >= params[0] - 1) {
      if (i > params[0] - 1) {
        emaShort = (2 * close + (params[0] - 1) * emaShort) / (params[0] + 1);
      } else {
        emaShort = closeSum / params[0];
      }
    }

    if (i >= params[1] - 1) {
      if (i > params[1] - 1) {
        emaLong = (2 * close + (params[1] - 1) * emaLong) / (params[1] + 1);
      } else {
        emaLong = closeSum / params[1];
      }
    }
    if (i >= maxPeriod - 1) {
      dif = emaShort - emaLong;
      entity.dif = dif;
      difSum += dif;
      if (i >= maxPeriod + params[2] - 2) {
        if (i > maxPeriod + params[2] - 2) {
          dea = (dif * 2 + dea * (params[2] - 1)) / (params[2] + 1);
        } else {
          dea = difSum / params[2];
        }
        entity.macd = (dif - dea) * 2;
        entity.dea = dea;
      }
    }
  }
}