macd static method
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);
}