calcRSI static method
Implementation
static void calcRSI(List<KLineEntity> dataList) {
double? rsi;
double? signal;
double rsiABSEma = 0;
double rsiMaxEma = 0;
double signalABSEma = 0;
double signalMaxEma = 0;
for (int i = 0; i < dataList.length; i++) {
KLineEntity entity = dataList[i];
final double closePrice = entity.close;
if (i == 0) {
rsi = 0;
rsiABSEma = 0;
rsiMaxEma = 0;
} else {
double Rmax = max(0, closePrice - dataList[i - 1].close.toDouble());
double RAbs = (closePrice - dataList[i - 1].close.toDouble()).abs();
rsiMaxEma = (Rmax + (14 - 1) * rsiMaxEma) / 14;
rsiABSEma = (RAbs + (14 - 1) * rsiABSEma) / 14;
rsi = (rsiMaxEma / rsiABSEma) * 100;
signalMaxEma = (Rmax + (9 - 1) * signalMaxEma) / 9;
signalABSEma = (RAbs + (9 - 1) * signalABSEma) / 9;
signal = (signalMaxEma / signalABSEma) * 100;
}
if (i < 13) rsi = null;
if (rsi != null && rsi.isNaN) rsi = null;
entity.rsi = rsi;
if (i < 8) rsi = null;
if (signal != null && signal.isNaN) signal = null;
entity.signal = signal;
}
}