calc method
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;
}
}
}
}