예제 #1
0
        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];
                        }
                    }
                }
            }
        }