示例#1
0
        private void AddNewItemIfNeeded(IStockRealTime realTimeItem)
        {
            if (_items.Count < 1 ||
                realTimeItem.Time - _items.Last().Time > span)
            {
                var newItem = new StockMinutesKLine
                {
                    Time = new DateTime(
                        realTimeItem.Time.Year,
                        realTimeItem.Time.Month,
                        realTimeItem.Time.Day,
                        realTimeItem.Time.Hour,
                        realTimeItem.Time.Minute,
                        0),

                    // 当前分析周期的开盘价 = 第一条数据的成交价
                    Open = realTimeItem.Current,

                    // 构造第一条数据的时候,就设定好最高、最低的值
                    High = realTimeItem.Current,
                    Low = realTimeItem.Current,
                };

                _items.Add(newItem);
            }
        }
 public void Add(IStockRealTime data)
 {
     using (var file = RealTimeFile.CreateOrOpen(data.Code, data.Time))
     {
         RealTimeItem dataItem = data.Convert();
         file.Add(dataItem);
     }
 }
示例#3
0
        public void Add(IStockRealTime realTimeItem)
        {
            if (realTimeItem.Time.Date != this.date.Date)
                throw new ArgumentOutOfRangeException("item");

            // todo: 过滤掉非交易时间的数据

            AddNewItemIfNeeded(realTimeItem);

            UpdateLastItemInfo(realTimeItem);
        }
示例#4
0
        private bool IsKLineDay(IStockRealTime realTimeData)
        {
            if(null == realTimeData)
            {
                return false;
            }

            // 今天未开盘
            if(realTimeData.TodayOpen - 0 < 0.000001)
            {
                return false;
            }

            return true;
        }
示例#5
0
        private StockKLine ConvertToDayLine(IStockRealTime realTimeData)
        {
            StockKLine data = new StockKLine();
            // 日期与时间
            data.Time = realTimeData.Time.Date;
            // 今开
            data.Open = realTimeData.TodayOpen;
            // 最高
            data.High = realTimeData.High;
            // 最低
            data.Low = realTimeData.Low;
            // 收盘
            data.Close = realTimeData.Current;
            // 成交量
            data.Volume = realTimeData.Volume;
            // 成交额
            data.Amount = realTimeData.Amount;

            return data;
        }
示例#6
0
        private void UpdateLastItemInfo(IStockRealTime realTimeItem)
        {
            StockMinutesKLine currentItem = _items.Last();

            currentItem.Close = realTimeItem.Current;

            // 取得最高价和最低价
            if(realTimeItem.Current > currentItem.High)
            {
                currentItem.High = realTimeItem.Current;
            }
            else if(realTimeItem.Current < currentItem.Low)
            {
                currentItem.Low = realTimeItem.Current;
            }

            //// 根据前面的数据,求出分时成交量和成交额, 以及前收盘价
            //if (_items.Count > 1)
            //{
            //    StockMinutesKLine previousDate = _items[_items.Count - 2];
            //    currentItem.Volume = realTimeItem.Volume - previousDate.CurrentTotalVolume;
            //    currentItem.Amount = realTimeItem.Amount - previousDate.CurrentTotalAmount;

            //    currentItem.PreClose = previousDate.Current;
            //}
            //else
            //{
            //    currentItem.Volume = realTimeItem.Volume;
            //    currentItem.Amount = realTimeItem.Amount;

            //    // 如果是某一天的第一条数据,前收盘价就取昨日收盘价
            //    currentItem.PreClose = realTimeItem.YesterdayClose;
            //}
        }