callMM method
dynamic
callMM()
Implementation
callMM() {
//================计算k线最大最小值==============
int i = 0, j = 0;
dynamic zb = "";
// print('计算最大最小值。开始索引: $kStartI 结束索引: $kStopI');
for (i = kStartI; i < kStopI; i++) {
var k = chartData.klineData[i];
if (i == kStartI) {
//首次赋值
kMax = k['high'];
kMin = k['low'];
kMaxI = i;
kMinI = i;
// print('首次最高值 $kMax - $kMaxI. 首次最低值 $kMin. - $kMinI');
} else {
//比较赋值
if (kMax < k['high']) {
kMax = k['high'];
kMaxI = i;
}
if (kMin > k['low']) {
kMin = k['low'];
kMinI = i;
}
}
}
// print('最终最高值 $kMax - $kMaxI. 首次最低值 $kMin. - $kMinI');
// int startIndex =
// kStartI - 1 < 0 ? kStartI : kStartI - 1; //这相当于从左边屏幕外一根开始绘制 ()
// int stopIndex = kStopI + 1 > chartData.kDataL
// ? chartData.kDataL
// : kStopI + 1; //这相当于画到右边屏幕外一根
int startIndex =kStartI;
int stopIndex = kStopI ;
//===============计算主图BOLL最大最小值============
kZtMm['valid'] = false;
for (i = 0; i < ztzb.length; i++) {
zb = ztzb[i];
if (zb == Indicator['BOLL']) {
var bolldata = zbData[zb];
List boll = [], bollA = [];
for (var bollV in bolldata.keys) {
boll = bolldata[bollV];
boll = boll.sublist(startIndex, stopIndex);
for (var j = 0, bollL = boll.length; j < bollL; j++) {
if (!Tools.isNaN(boll[j])) {
bollA.add(boll[j]);
}
}
}
if (bollA.isNotEmpty) {
bollA.sort();
kZtMm['max'] = bollA[bollA.length - 1];
kZtMm['min'] = bollA[0];
kZtMm['valid'] = true;
}
}
}
//====================计算附图最大最小值=====================
for (i = 0; i < ftzb.length; i++) {
zb = ftzb[i];
kFtMm[zb] = {'max': 0.0, 'min': 0.0, 'valid': false};
kElement['ft']![zb]['max'] = 0.0;
kElement['ft']![zb]['min'] = 0.0;
kElement['ft']![zb]['valid'] = false;
var ftData = zbData[zb];
List mmData = [];
if (zb == Indicator['VOLUME']) {
for (var mmcjlv in ftData.keys) {
var mmcjl2 = ftData[mmcjlv];
mmcjl2 = mmcjl2.sublist(startIndex, stopIndex);
var mmcjl2l = mmcjl2.length;
for (j = 0; j < mmcjl2l; j++) {
if (mmcjlv == "VOL") {
mmData.add(mmcjl2[j]['volume']);
} else {
if (!Tools.isNaN(mmcjl2[j])) {
mmData.add(mmcjl2[j]);
}
}
}
}
mmData.sort();
// print('cjl ${mmData}');
kFtMm[zb]['max'] = mmData.isNotEmpty ? mmData[mmData.length - 1] : 0.0;
kFtMm[zb]['min'] = mmData.isNotEmpty ? mmData[0] : 0.0;
kFtMm[zb]['valid'] = mmData.isNotEmpty;
} else {
for (var mmdv in ftData.keys) {
var mmd2 = ftData[mmdv];
mmd2 = mmd2.sublist(startIndex, stopIndex);
var mmd2l = mmd2.length;
for (j = 0; j < mmd2l; j++) {
if (!Tools.isNaN(mmd2[j])) {
mmData.add(mmd2[j]);
}
}
}
mmData.sort();
kFtMm[zb]['max'] = mmData.isNotEmpty ? mmData[mmData.length - 1] : 0.0;
kFtMm[zb]['min'] = mmData.isNotEmpty ? mmData[0] : 0.0;
kFtMm[zb]['valid'] = mmData.isNotEmpty;
}
if (zb != Indicator['BBI']) {
//如果不是BBI指标 添加0值刻度
if (kFtMm[zb]['max'] <= 0) {
kFtMm[zb]['max'] = 0.0;
} else if (kFtMm[zb]['min'] >= 0) {
kFtMm[zb]['min'] = 0.0;
}
}
kElement['ft']![zb]['max'] = kFtMm[zb]['max'];
kElement['ft']![zb]['min'] = kFtMm[zb]['min'];
kElement['ft']![zb]['valid'] = kFtMm[zb]['valid'];
}
return;
}