Esempio n. 1
0
        /// <summary>
        /// 计算指定日主力合约。
        /// </summary>
        /// <param name="settlementDate"></param>
        /// <returns></returns>
        private bool CalculateSerialContract(SettlementDayType settlementDayType, DateTime settlementDate, List <ErrorVarieties> errorList)
        {
            string text = string.Empty;

            if (!m_tradingDateManager.IsTradingDate(settlementDate))
            {
                text = string.Format("{0:yyyy-MM-dd}为非交易日,无需计算", settlementDate);
                USeConsole.WriteLine(text);
                return(true);
            }

            Debug.Assert(m_varietiesList != null && m_varietiesList.Count > 0);
            foreach (USeProduct varieties in m_varietiesList)
            {
                try
                {
                    List <string> serialContractList = null;
                    if (settlementDayType == SettlementDayType.Today)
                    {
                        serialContractList = GetTodaySerialInstrument(varieties, settlementDate);
                    }
                    else
                    {
                        Debug.Assert(settlementDayType == SettlementDayType.SpecialDay);
                        serialContractList = GetHistorySerialInstrument(varieties, settlementDate); //连续合约
                    }

                    SaveSerialContract(varieties, settlementDate, serialContractList);
                    text = string.Format("{0}@{1:yyyy-MM-dd}连续合约计算完成,共{2}个合约", varieties.ProductCode, settlementDate, serialContractList.Count);
                    m_logger.WriteInformation(text);
                    USeConsole.WriteLine(text);
                }
                catch (Exception ex)
                {
                    text = string.Format("{0}@{1:yyyy-MM-dd}连续合约计算失败,{2}", varieties.ProductCode, settlementDate, ex.Message);
                    m_logger.WriteInformation(text);
                    USeConsole.WriteLine(text);

                    errorList.Add(new ErrorVarieties()
                    {
                        Varieties      = varieties.ProductCode,
                        SettlementDate = settlementDate,
                        ErrorMessage   = ex.Message
                    });
                }
            }

            return(true);
        }
Esempio n. 2
0
        /// <summary>
        /// 计算指定时段连续合约。
        /// </summary>
        /// <param name="beginDate">起始日。</param>
        /// <param name="endDate">结束日。</param>
        /// <returns></returns>
        private bool CalculateSerialContract(SettlementDayType settlementDayType, DateTime beginDate, DateTime endDate, List <ErrorVarieties> errorList)
        {
            string   text           = string.Empty;
            DateTime settlementDate = beginDate;

            while (settlementDate <= endDate)
            {
                try
                {
                    CalculateSerialContract(settlementDayType, settlementDate, errorList);
                }
                catch (Exception ex)
                {
                    text = string.Format("{0:yyyy-MM-dd}计算失败,错误:{1}", settlementDate, ex.Message);
                    m_logger.WriteError(text);
                    USeConsole.WriteLine(text);
                }
                settlementDate = settlementDate.AddDays(1);
            }

            return(true);
        }
        /// <summary>
        /// 读取配置。
        /// </summary>
        private void ReadConfig()
        {
            string text = string.Empty;

            m_dbConnStr = ConfigurationManager.ConnectionStrings["AlphaDB"].ConnectionString;
            if (string.IsNullOrEmpty(m_dbConnStr))
            {
                text = "AlphaDB数据库连接串为空";
            }

            m_alpahDBName = ConfigurationManager.AppSettings["AlphaDBName"];
            if (string.IsNullOrEmpty(m_alpahDBName))
            {
                text = "AlphaDBName为空";
                throw new ApplicationException(text);
            }

            try
            {
                MainContractCalculateSection section = (ConfigurationManager.GetSection("MainContractCalculater") as MainContractCalculateSection);
                if (section == null)
                {
                    text = "未找到MainContractCalculater配置节点";
                    throw new ApplicationException(text);
                }

                if (section.CalculateDate.CalculateDayType == SettlementDayType.SpecialDay)
                {
                    if (section.CalculateDate.BeginDay.HasValue == false)
                    {
                        text = "未设定beginDate节点值";
                        throw new ApplicationException(text);
                    }

                    if (section.CalculateDate.EndDay.HasValue == false)
                    {
                        text = "未设定endDate节点值";
                        throw new ApplicationException(text);
                    }

                    if (section.CalculateDate.EndDay < section.CalculateDate.BeginDay)
                    {
                        text = "beginDate节点值大于endDate";
                        throw new ApplicationException(text);
                    }

                    m_dayType   = SettlementDayType.SpecialDay;
                    m_beginDate = section.CalculateDate.BeginDay.Value.Date;
                    m_endDate   = section.CalculateDate.EndDay.Value.Date;
                }
                else
                {
                    Debug.Assert(section.CalculateDate.CalculateDayType == SettlementDayType.Today);
                    m_dayType   = SettlementDayType.Today;
                    m_beginDate = DateTime.Today;
                    m_endDate   = DateTime.Today;
                }

                if (section.QuerySetting.Interval <= TimeSpan.Zero)
                {
                    text = "轮询间隔不能为空";
                    throw new Exception(text);
                }

                if (section.QuerySetting.Count <= 0)
                {
                    text = "重试次数不能小于0";
                    throw new Exception(text);
                }

                m_tryInterval = section.QuerySetting.Interval;
                m_tryCount    = section.QuerySetting.Count;
            }
            catch (ApplicationException ex)
            {
                throw ex;
            }
        }