exponentialMovingAverage function

List<double> exponentialMovingAverage(
  1. List<num> values,
  2. double alpha
)

Exponential moving average: alpha in (0,1]; first value = first input.

Implementation

List<double> exponentialMovingAverage(List<num> values, double alpha) {
  if (values.isEmpty) return <double>[];
  if (alpha <= 0 || alpha > 1) return values.map((num x) => x.toDouble()).toList();
  final List<double> out = <double>[];
  double prev = values[0].toDouble();
  out.add(prev);
  for (int i = 1; i < values.length; i++) {
    prev = alpha * values[i].toDouble() + (1 - alpha) * prev;
    out.add(prev);
  }
  return out;
}