/// <summary> /// 判断当前时间是否在最先开市前半小时和最后收市后半小时之间的时间段内 /// </summary> /// <param name="time">当前时间</param> /// <returns></returns> public bool IsMarketTime(DateTime time) { try { AcceptTradeTime accTime = GetAllTradeTimeOpenCloseTime(); if (accTime == null) { LogHelper.WriteError("CH-1108: 无法获取交易时间中最先开市的和最后收市时间", new Exception("")); return(false); } //最先开始时间 DateTime accstartTime = Utils.ConvertToNowDateTime((DateTime)accTime.AcceptStartTime); //最后收市时间 DateTime accendTime = Utils.ConvertToNowDateTime((DateTime)accTime.AcceptEndTime); //当日第一秒时间 DateTime lowerLimitTime = Utils.ConvertToDateTime(DateTime.Now.ToString("yyyy-MM-dd"), "00:00:00"); //当日最后一秒时间 DateTime upperLimitTime = Utils.ConvertToDateTime(DateTime.Now.ToString("yyyy-MM-dd"), "23:59:59"); if ((time >= lowerLimitTime && time < accstartTime.AddMinutes(0 - 30)) || (time >= accendTime.AddMinutes(30) && time <= upperLimitTime)) { return(false); } return(true); } catch (Exception ex) { LogHelper.WriteError("CH-1218: 判断当前时间是否是关市时间异常", ex); return(false); } }
/// <summary> /// 获取所有交易所的交易时间中最先开市的和最后收市时间 /// </summary> /// <returns></returns> public AcceptTradeTime GetAllTradeTimeOpenCloseTime() { List <CM_TradeTime> tradeTimes = CommonDataCacheProxy.Instanse.GetCacheALLCM_TradeTime(); if (Utils.IsNullOrEmpty(tradeTimes)) { return(null); } AcceptTradeTime acc = new AcceptTradeTime(); acc.AcceptStartTime = Utils.ConvertToNowDateTime(tradeTimes[0].StartTime.Value); acc.AcceptEndTime = Utils.ConvertToNowDateTime(tradeTimes[0].EndTime.Value); foreach (var time in tradeTimes) { DateTime start = Utils.ConvertToNowDateTime(time.StartTime.Value); if (acc.AcceptStartTime > start) { acc.AcceptStartTime = start; } DateTime end = Utils.ConvertToNowDateTime(time.EndTime.Value); if (acc.AcceptEndTime < end) { acc.AcceptEndTime = end; } } return(acc); }
/// <summary> /// 根据商品代码返回所属交易所 /// </summary> /// <param name="code">代码</param> /// <returns></returns> public AcceptTradeTime GetAcceptTradeTimeByCommodityCode(string code) { AcceptTradeTime accetpTime = new AcceptTradeTime(); CM_BourseType cm_bourseType = CommonDataManagerOperate.GetCM_BourseTypeByCommodityCode(code); if (cm_bourseType == null || !cm_bourseType.ReceivingConsignStartTime.HasValue || !cm_bourseType.ReceivingConsignEndTime.HasValue) { return(null); } accetpTime.AcceptStartTime = cm_bourseType.ReceivingConsignStartTime.Value; accetpTime.AcceptEndTime = cm_bourseType.ReceivingConsignEndTime.Value; return(accetpTime); }
/// <summary> /// 判断某港股交易代码所属的交易所是否在某时间接收委托 /// </summary> /// <param name="time">时间</param> /// <param name="code">交易代码</param> /// <returns></returns> public bool IsHKAcceptTime(DateTime time, string code) { AcceptTradeTime acceptTime = GetHKAcceptTradeTimeByCommodityCode(code); if (acceptTime == null) { LogHelper.WriteError(string.Format(GenerateInfo.CH_E008, code), new Exception()); return(false); } if (Utils.ConvertToNowDateTime(acceptTime.AcceptStartTime) > time) { return(false); } if (Utils.ConvertToNowDateTime(acceptTime.AcceptEndTime) < time) { return(false); } return(true); }
/// <summary> /// 判断当前时间比最后收市时间还要大于30分钟和小于1小时之间内执行关市操作 /// </summary> /// <param name="time"></param> /// <returns></returns> public bool IsCloseMarketTime(DateTime time) { try { AcceptTradeTime accTime = GetAllTradeTimeOpenCloseTime(); if (accTime == null) { LogHelper.WriteError("CH-1218: 无法获取交易时间中最先开市的和最后收市时间", new Exception("")); return(false); } DateTime accendTime = Utils.ConvertToNowDateTime((DateTime)accTime.AcceptEndTime); //当前时间比最后收市时间还要大于30分钟和小于1小时之间内执行关市操作 if (time >= accendTime.AddMinutes(30) && time < accendTime.AddMinutes(60)) { return(true); } return(false); } catch (Exception ex) { LogHelper.WriteError("CH-1218: 判断当前时间是否是关市时间异常", ex); return(false); } }
/// <summary> /// 判断当前时间是否是开市时间的前半小时之内 /// </summary> /// <param name="time"></param> /// <returns></returns> public bool IsOpenMarketTime(DateTime time) { try { AcceptTradeTime accTime = GetAllTradeTimeOpenCloseTime(); if (accTime == null) { LogHelper.WriteError("CH-1108: 无法获取交易时间中最先开市的和最后收市时间", new Exception("")); return(false); } DateTime accstartTime = Utils.ConvertToNowDateTime((DateTime)accTime.AcceptStartTime); TimeSpan timespan = new TimeSpan(0, 30, 0); if (time >= accstartTime.Subtract(timespan) && time < accstartTime) { return(true); } return(false); } catch (Exception ex) { LogHelper.WriteError("CH-1108: 判断当前时间是否是市时间的前十五分钟时间异常", ex); return(false); } }