/// <summary> /// 载入股票部分 /// </summary> /// <param name="rootXml"></param> private void LoadStock(XmlElement rootXml) { foreach (XmlNode node in rootXml) { #region 股票 XmlElement exElem = node as XmlElement; if (exElem == null) { continue; } //解析交易所ID,默认时间 string exchangeId = exElem.GetAttribute(IdAttr).Trim(); List <TimeSlice> lstTimeSlice = ParseTimeSlice(exElem.GetAttribute(TradingTimeTag).Trim()); //维护股票的默认时间段 _dictDefaultStockTradingFrame.Add(exchangeId, lstTimeSlice); TradingFrameSeries lstTradeFrames = new TradingFrameSeries(); //然后读取所有的交易所 foreach (XmlNode subNode in exElem.ChildNodes) { XmlElement subElem = subNode as XmlElement; DateTime beginDay = ParseDate(subElem.GetAttribute(BeginDayTag).Trim()); List <TimeSlice> tradingFrameExch = ParseTimeSlice(subElem.GetAttribute(TradingTimeTag).Trim()); var i = 0; for (; i < lstTradeFrames.Count; ++i) { if (beginDay < lstTradeFrames[i].BeginDay) { lstTradeFrames.Insert(i, new TradingFrame(beginDay, tradingFrameExch)); break; } } if (i == lstTradeFrames.Count) { lstTradeFrames.Add(new TradingFrame(beginDay, tradingFrameExch)); } //lstTradeFrames.Add(new TradingFrame(beginDay, tradingFrameExch)); } //交易所的 _dictStockTradingFrame.Add(exchangeId, lstTradeFrames); #endregion } }
/// <summary> /// 获取最后的(当前执行的)交易时段 /// 实盘的时候调用这个方法 /// </summary> /// <param name="market">市场</param> /// <param name="exchangeId">交易所ID</param> /// <param name="productId">产品ID(股票和股票期权填空)</param> /// <returns>指定的交易时段</returns> public List <TimeSlice> GetLastTradingFrame(EnumMarket market, string exchangeId, string productId = "") { TradingFrameSeries frameSeries = GetAllTradingTimeFrames(market, exchangeId, productId); if (frameSeries != null) { return(frameSeries.Last.TradingTimes); } else { //没有历史数据,取其交易所的 return(GetDefaultTradingFrame(market, exchangeId)); } }
/// <summary> /// 给定一个交易日,获取这个交易日的交易时段 /// </summary> /// <param name="theDate">指定交易日</param> /// <param name="market">市场</param> /// <param name="exchangeId">交易所ID</param> /// <param name="productId">产品ID(股票和股票期权填空)</param> /// <returns>指定的交易时段</returns> public List <TimeSlice> GetTradingFrame(DateTime theDate, EnumMarket market, string exchangeId, string productId = "") { if (theDate == default(DateTime)) { return(GetLastTradingFrame(market, exchangeId, productId)); } TradingFrameSeries frameSeries = GetAllTradingTimeFrames(market, exchangeId, productId); if (frameSeries != null) { List <TimeSlice> timeSlice = frameSeries.GetTradingTimes(theDate); if (timeSlice != null) { return(timeSlice); } } //如果找不到,则返回默认的 return(GetDefaultTradingFrame(market, exchangeId)); }
private void LoadFutureOption(XmlElement rootXml) { foreach (XmlNode node in rootXml) { #region 期货期权 XmlElement exElem = node as XmlElement; if (exElem == null) { continue; } //解析4个交易所 //解析交易所ID,默认时间 string exchangeId = exElem.GetAttribute(IdAttr).Trim(); List <TimeSlice> lstTimeSlice = ParseTimeSlice(exElem.GetAttribute(TradingTimeTag).Trim()); //维护股票的默认时间段 _dictDefaultFutureOptionTradingFrame.Add(exchangeId, lstTimeSlice); //然后每个交易所下面的品种都要整理出来 if (exElem.ChildNodes.Count > 0) { XmlNode productsNode = exElem.ChildNodes[0]; //然后读取所有的交易所 foreach (XmlNode prodNode in productsNode.ChildNodes) { //这里是一个品种的节点 XmlElement prodElem = prodNode as XmlElement; string productId = prodElem.GetAttribute(IdAttr).Trim(); TradingFrameSeries lstTradeFrames = new TradingFrameSeries(); foreach (XmlNode frameNode in prodNode.ChildNodes) { XmlElement frameElem = frameNode as XmlElement; if (frameElem != null && frameElem.Name == "TradingFrame") { DateTime beginDay = ParseDate(frameElem.GetAttribute(BeginDayTag).Trim()); List <TimeSlice> tradingFrameExch = ParseTimeSlice(frameElem.GetAttribute(TradingTimeTag).Trim()); var i = 0; for (; i < lstTradeFrames.Count; ++i) { if (beginDay < lstTradeFrames[i].BeginDay) { lstTradeFrames.Insert(i, new TradingFrame(beginDay, tradingFrameExch)); break; } } if (i == lstTradeFrames.Count) { lstTradeFrames.Add(new TradingFrame(beginDay, tradingFrameExch)); } //lstTradeFrames.Add(new TradingFrame(beginDay, tradingFrameExch)); } else if (frameElem != null && frameElem.Name == "LimitValue") { double limit = 0.0; double.TryParse(frameElem.GetAttribute(UpLimit).Trim(), out limit); _limitDictionary.Add(productId.ToLower(), limit); } } _dictFutureOptionTradingFrame.Add(productId, lstTradeFrames); } } #endregion } }