macd static method

MacdResult macd(
  1. List<TaBar> points, {
  2. int fast = 12,
  3. int slow = 26,
  4. int signal = 9,
})

Implementation

static MacdResult macd(List<TaBar> points, {int fast = 12, int slow = 26, int signal = 9}) {
  final closes = points.map((p) => p.close).toList();
  final ema12 = _ema(closes, fast);
  final ema26 = _ema(closes, slow);

  final macdLine = List<double?>.filled(closes.length, null);
  for (int i = 0; i < closes.length; i++) {
    if (ema12[i] != null && ema26[i] != null) {
      macdLine[i] = ema12[i]! - ema26[i]!;
    }
  }

  final macdNonNull = <double>[];
  final macdNonNullIdx = <int>[];
  for (int i = 0; i < macdLine.length; i++) {
    if (macdLine[i] != null) {
      macdNonNull.add(macdLine[i]!);
      macdNonNullIdx.add(i);
    }
  }
  final signalEma = _ema(macdNonNull, signal);
  final signalLine = List<double?>.filled(closes.length, null);
  for (int j = 0; j < macdNonNullIdx.length; j++) {
    signalLine[macdNonNullIdx[j]] = signalEma[j];
  }

  final histogram = List<double?>.filled(closes.length, null);
  for (int i = 0; i < closes.length; i++) {
    if (macdLine[i] != null && signalLine[i] != null) {
      histogram[i] = macdLine[i]! - signalLine[i]!;
    }
  }
  return MacdResult(macdLine: macdLine, signalLine: signalLine, histogram: histogram);
}