public void ReceiveTick(TickData tickdata) { if (_lastDayClose == 0) { _lastDayClose = tickdata.Preclose; _todayOpen = tickdata.Open; } if (_currentHigh < tickdata.Last) { _currentHigh = tickdata.Last; _reachHigh = true; } //TimeSpan closeTimeSpan = getNextCloseTimeSpan(_currentOpenTimeSpan); //TimeSpan closeTimeSpan = _currentBar.BarCloseTime; //TimeSpan LastTickTime = _currentBar.LastTickTime; TimeSpan CurrentTickTime = tickdata.Time.TimeOfDay; //TimeSpan NextTickTime = tickdata.Time.TimeOfDay.Add(TimeSpan.FromSeconds(_tickInteval)); //.Log(string.Format("{0}-{1}",currentTickTime,closeTimeSpan)); if (CurrentTickTime <= _currentBar.BarCloseTime) //当前时间小于等于本根bar的收盘时间 { UpdateCurrentBar(tickdata, CurrentTickTime); //if (CurrentTickTime > _currentBar.LastTickTime) //{ // _currentBar.EstVolumn = _currentBar.Volumn; // _lastVolumn += _currentBar.Volumn; // CalcuateBar(); // PushBarArrivalEvent(_currentBar); // _currentOpenTimeSpan = _currentBar.NextOpenTime; // if (Bars.ContainsKey(_currentOpenTimeSpan)) // { // _currentBar = Bars[_currentOpenTimeSpan]; // } //} //PushBarArrivalEvent(_currentBar); } else //当前时间大于本根bar收盘时间 { while (CurrentTickTime > _currentBar.BarCloseTime) { LiveBar nextBar; if (_currentBar.Open == 0) { _currentBar.Open = tickdata.Last; _currentBar.High = tickdata.Last; _currentBar.Close = tickdata.Last; _currentBar.Low = tickdata.Last; } //_lastVolumn += _currentBar.Volumn; //_currentBar.EstVolumn = _currentBar.Volumn; //CalcuateBar(); //MakeRaiseType(); //PushBarArrivalEvent(_currentBar); _currentOpenTimeSpan = _currentBar.NextOpenTime; if (Bars.ContainsKey(_currentOpenTimeSpan)) { nextBar = Bars[_currentOpenTimeSpan]; } else { return; } //LastTickTime = Bars[_currentOpenTimeSpan].LastTickTime; //closeTimeSpan = getNextCloseTimeSpan(closeTimeSpan); if (CurrentTickTime <= nextBar.BarCloseTime) //当前时间小于等于下一根bar收盘时间 { if (CurrentTickTime > nextBar.LastTickTime) //当前时间大于最后tick时间 { //push nextbar CalcuateBar(); MakeRaiseType(); _lastVolumn += _currentBar.Volumn; _currentBar = Bars[_currentOpenTimeSpan]; _currentBar.Open = tickdata.Last; _currentBar.High = tickdata.Last; _currentBar.Close = tickdata.Last; _currentBar.Low = tickdata.Last; _currentBar.EstVolumn = _currentBar.Volumn; CalcuateBar(); MakeRaiseType(); _currentBar.Finish = true; PushBarArrivalEvent(_currentBar); _currentOpenTimeSpan = _currentBar.NextOpenTime; if (Bars.ContainsKey(_currentOpenTimeSpan)) { _currentBar = Bars[_currentOpenTimeSpan]; } } else // 当前时间小于最后tick时间 { //push currentbar CalcuateBar(); MakeRaiseType(); _lastVolumn += _currentBar.Volumn; _currentBar.Finish = true; PushBarArrivalEvent(_currentBar); _currentBar = Bars[_currentOpenTimeSpan]; _currentBar.Open = tickdata.Last; _currentBar.High = tickdata.Last; _currentBar.Close = tickdata.Last; _currentBar.Low = tickdata.Last; } } else { CalcuateBar(); MakeRaiseType(); _currentBar = Bars[_currentOpenTimeSpan]; _currentBar.Open = tickdata.Last; _currentBar.High = tickdata.Last; _currentBar.Close = tickdata.Last; _currentBar.Low = tickdata.Last; _currentBar.EstVolumn = _currentBar.Volumn; CalcuateBar(); MakeRaiseType(); _lastVolumn += _currentBar.Volumn; //PushBarArrivalEvent(_currentBar); _currentOpenTimeSpan = _currentBar.NextOpenTime; if (Bars.ContainsKey(_currentOpenTimeSpan)) { _currentBar = Bars[_currentOpenTimeSpan]; } } } } }