setLastKlineData method

String setLastKlineData(
  1. dynamic codeId,
  2. dynamic interval,
  3. dynamic data
)

Implementation

String setLastKlineData(codeId, interval, data) {
  if (codeId != currentCodeId || interval != currentInterval) {
    return '';
  }
  //如果该周期没有数据 则无法处理直接return
  if (klineData.isEmpty) return '';
  //判断是更新还是增加还是无效tick
  var obj = callTickToKline(lastBeginT, data['time'], interval);
  if (obj['type'] == 0) {
    //更新最后一根数据
    var lobj = klineData[klineData.length - 1];
    //更新最高最低值
    if (data['close'] > lobj['high']) {
      lobj['high'] = data['close'];
    } else if (data['close'] < lobj['low']) {
      lobj['low'] = data['close'];
    }
    //更新收盘价
    lobj['close'] = data['close'];
    //更新持仓量
    lobj['volume'] = data['volume'];
  } else if (obj['type'] == 1) {
    //新增一根数据
    klineData.add({
      'time': obj['not'],
      'open': data['close'],
      'high': data['close'],
      'low': data['close'],
      'close': data['close'],
      'volume': data['volume'],
      'amo':data['amo'],
      'codeId': codeId,
      'interval': interval,
    });
    //k线长度
    kDataL = klineData.length;
    //最后一根k线开始时间
    lastBeginT = obj['not']; //最后一根周期的开始时间
  } else {
    //无效tick
  }
  return obj['type'] == 1 ? 'ADD' : 'UPDATE';
}