public void AddBar(Bar newbar) { if (newbar == null) { ChangeState = 4; return; } lock (_lockobj) { if (IsEnd) { ChangeState = 4; return; } int idx; int ir = MoveTo(newbar.BeginTime, out idx); if (ir == -1) { ChangeState = 4; return; } var baropencount = 0; var barclosecount = 0; for (; _posTime < idx; ++_posTime) { DateTimeSlice currentT = _lstslice[_posTime]; if (_posBar == _posTime) { } else { #region 20150628 去掉空Bar //Bar bar = new Bar(); //bar.BeginTime = _tradeDay + currentT.BeginTime; //if (_posBar >= 0) //{ // bar.Close = bar.PreClose = bar.Open = bar.High = bar.Low = _bars.Last.Close; // bar.OpenInterest = _bars.Last.OpenInterest; //} //_bars.Add(bar); //_bars.Last.CloseBar(_tradeDay + currentT.EndTime); #endregion ++_posBar; //OnBarClosed(_bars.Last); } } if (ir == 0) { if (_posBar == _posTime) { Bar bar = _bars.Last; bar.AddBar(newbar); } else { Bar bar = new Bar { TradingDate = newbar.TradingDate }; bar.OpenBar(newbar); _bars.Add(bar); ++baropencount; OnBarOpened(bar); ++_posBar; } //if (_posBar == _posTime) { DateTimeSlice currentT = _lstslice[_posTime]; if (newbar.EndTime >= currentT.EndTime) { ++barclosecount; _bars.Last.CloseBar(currentT.EndTime); OnBarClosed(_bars.Last); } } } if (baropencount == 0 && barclosecount == 0) { ChangeState = 0; return; } if (baropencount > barclosecount) { ChangeState = 2; return; } if (barclosecount > baropencount) { ChangeState = 1; return; } ChangeState = 3; } }