/// <summary> /// 指定日期是否为节假日。 /// </summary> /// <param name="config"></param> /// <param name="date">指定日期。</param> /// <returns></returns> private bool IsHoliday(TradingDaySection config, DateTime date) { if (config.Holidays != null && config.Holidays.Count > 0) { foreach (HolidayItemElement element in config.Holidays) { if (date >= element.BeginDay.Date && date <= element.EndDay.Date) { return(true); } } } return(false); }
/// <summary> /// 运行。 /// </summary> public int Start() { try { m_serverLogger = AppLogger.InitInstance(); } catch (Exception ex) { throw new ApplicationException("Initialize applogger failed," + ex.Message); } m_serverLogger.LineFeed(); string message = string.Empty; TradingDaySection config = ConfigurationManager.GetSection("TradingDayManager") as TradingDaySection; if (config == null) { message = "Not found [TradingDayManager] config."; WriteConsoleLog(message); m_serverLogger.WriteError(message); return(-1); } try { m_dbConn = ConfigurationManager.ConnectionStrings["KLineDB"].ConnectionString; if (string.IsNullOrEmpty(m_dbConn)) { throw new ApplicationException("KLineDB connection string is null"); } } catch (Exception ex) { message = "Read db connection string failed," + ex.Message; WriteConsoleLog(message); m_serverLogger.WriteError(message); return(-1); } message = "Begin process trading day."; WriteConsoleLog(message); m_serverLogger.WriteInformation(message); DateTime startDate; DateTime endDate; startDate = config.BeginDay; endDate = config.EndDay; List <string> commands = new List <string>(); DateTime currDate = startDate; List <TradeCalendar> calendarList = new List <TradeCalendar>(); while (currDate <= endDate) { bool isTradingDay = false; switch (currDate.DayOfWeek) { case DayOfWeek.Monday: case DayOfWeek.Tuesday: case DayOfWeek.Wednesday: case DayOfWeek.Thursday: case DayOfWeek.Friday: isTradingDay = !IsHoliday(config, currDate); break; default: isTradingDay = false; break; } TradeCalendar calendar = new TradeCalendar() { Today = currDate, IsTradeDay = isTradingDay, PreTradeDay = DateTime.MinValue, NextTradeDay = DateTime.MinValue }; calendarList.Add(calendar); currDate = currDate.AddDays(1); } for (int i = 0; i < calendarList.Count; i++) { TradeCalendar calendar = calendarList[i]; //补前一交易日 for (int j = i - 1; j >= 0; j--) { if (calendarList[j].IsTradeDay) { calendar.PreTradeDay = calendarList[j].Today; break; } } if (calendar.PreTradeDay == DateTime.MinValue) { calendar.PreTradeDay = config.BeginDayPreTradeDay; } //补下一交易日 for (int j = i + 1; j < calendarList.Count; j++) { if (calendarList[j].IsTradeDay) { calendar.NextTradeDay = calendarList[j].Today; break; } } if (calendar.NextTradeDay == DateTime.MinValue) { calendar.NextTradeDay = config.EndDayNextTradeDay; } } try { SaveToMySqlDB(calendarList, config.BeginDay, config.EndDay); } catch (Exception ex) { message = string.Format("Save data to db failed,Error:{0}.", ex.Message); WriteConsoleLog(message); m_serverLogger.WriteError(message); return(-2); } message = "End process trading day."; WriteConsoleLog(message); m_serverLogger.WriteInformation(message); return(0); }