calcEMA static method
Implementation
static void calcEMA(List<KLineEntity> dataList, List<int> emaDayList) {
if (dataList.isNotEmpty) {
Map<int, double> previousEma = {};
for (int period in emaDayList) {
previousEma[period] = dataList[0].close; // 初始化第一个EMA值为第一个收盘价
}
for (int i = 0; i < dataList.length; i++) {
KLineEntity entity = dataList[i];
entity.emaValueList ??= List<double>.filled(emaDayList.length, 0);
for (int period in emaDayList) {
double multiplier = 2 / (period + 1);
if (i == 0) {
entity.emaValueList![emaDayList.indexOf(period)] = entity.close;
} else {
double ema = (entity.close - previousEma[period]!) * multiplier +
previousEma[period]!;
entity.emaValueList![emaDayList.indexOf(period)] = ema;
previousEma[period] = ema; // 更新前一个EMA值
}
}
}
}
}