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); } }
public void Add(IStockRealTime realTimeItem) { if (realTimeItem.Time.Date != this.date.Date) throw new ArgumentOutOfRangeException("item"); // todo: 过滤掉非交易时间的数据 AddNewItemIfNeeded(realTimeItem); UpdateLastItemInfo(realTimeItem); }
private bool IsKLineDay(IStockRealTime realTimeData) { if(null == realTimeData) { return false; } // 今天未开盘 if(realTimeData.TodayOpen - 0 < 0.000001) { return false; } return true; }
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; }
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; //} }