Exemplo n.º 1
0
        /// <summary>按时间频率修正时间
        /// </summary>
        /// <param name="dtBase"></param>
        /// <param name="timeFrequency"></param>
        /// <returns></returns>
        public static DateTime CheckTime(DateTime dtBase, typeTimeFrequency timeFrequency, bool bFirst = true)
        {
            DateTime dtTime = dtBase;

            switch (timeFrequency)
            {
            case typeTimeFrequency.day:
                dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, 0, 0, 0);
                break;

            case typeTimeFrequency.m1:
                dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, dtBase.Hour, dtBase.Minute, 0);
                break;

            case typeTimeFrequency.m5:
                dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, dtBase.Hour, (int)Math.Floor(dtBase.Minute / 5.0) * 5, 0);
                break;

            case typeTimeFrequency.m10:
                dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, dtBase.Hour, (int)Math.Floor(dtBase.Minute / 10.0) * 10, 0);
                break;

            case typeTimeFrequency.m15:
                dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, dtBase.Hour, (int)Math.Floor(dtBase.Minute / 15.0) * 15, 0);
                break;

            case typeTimeFrequency.m30:
                dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, dtBase.Hour, (int)Math.Floor(dtBase.Minute / 30.0) * 30, 0);
                break;

            case typeTimeFrequency.m60:
                dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, dtBase.Hour, 0, 0);
                break;

            case typeTimeFrequency.m120:
                dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, dtBase.Hour, 0, 0);
                break;

            //case typeTimeFrequency.Week:
            //    dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, 0, 0, 0);
            //    break;
            //case typeTimeFrequency.Second_30:
            //    dtTime = new DateTime(dtBase.Year, dtBase.Month, dtBase.Day, dtBase.Hour, dtBase.Minute, (int)Math.Floor(dtBase.Second / 30.0) * 30);
            //    break;
            default:
                break;
            }

            //向后修正
            if (!bFirst)
            {
                dtTime = dtTime.AddSeconds((int)timeFrequency.Get_Value());
            }
            return(dtTime);
        }
Exemplo n.º 2
0
 DateTime _dtDataNow;        //当前数据时间步
 public DataCache_Set(string tagName, DateTime dtBase, typeTimeFrequency typeTimeFrequency, int cacheNums, IData_Factor infoFactor, IDataCache_Set srcDataCache_Set = null) : base(tagName)
 {
     if (tagName == "")
     {
         tagName = infoFactor.ID;
     }
     _id             = tagName;
     _Info_Factor    = infoFactor;
     _tagName        = tagName;
     _Time_Frequency = typeTimeFrequency;
     _sumStep        = cacheNums;
     _dtStep         = (int)_Time_Frequency.Get_Value();
     _dtBase         = dtBase;
     _Parent         = srcDataCache_Set;
     this.InitTime(dtBase, typeTimeFrequency);
 }
Exemplo n.º 3
0
        /// <summary>查询行情(历史)
        /// </summary>
        /// <param name="endTime">结束时间</param>
        /// <param name="quoteBars">标的行情数</param>
        /// <param name="quoteTime">行情时间类型</param>
        /// <param name="autoUpdate">是否自动更新本地库表</param>
        /// <returns></returns>
        public List <Data_Quote> Query(DateTime endTime, int quoteBars = 1, typeTimeFrequency quoteTime = typeTimeFrequency.day, bool autoUpdate = true)
        {
            //修正时间
            if (endTime == DateTime.MinValue)
            {
                endTime = DateTime.Now;
            }

            //自动更新修正数据
            if (autoUpdate)
            {
                if (!this.Query_Check(endTime.AddSeconds(-quoteBars * (int)quoteTime.Get_Value()), endTime, quoteBars, quoteTime, true))
                {
                    return(null);
                }
            }


            //查询库表
            List <Data_Quote> lstQuote = _dtQuote.FindAll(e => e.DateTime <= endTime && e.QuoteTimeType == quoteTime && e.IsDel == false).OrderByDescending(t => t.DateTime).Take(quoteBars).ToList();

            return(lstQuote);
        }
Exemplo n.º 4
0
        /// <summary>查询历史行情 (含自算实时-当未过时间标识时)
        /// </summary>
        /// <param name="pStockInfo">标的信息</param>
        /// <param name="startTime">开始时间</param>
        /// <param name="endTime">结束时间</param>
        /// <param name="quoteTime">时间类型</param>
        /// <param name="quoteBase">基础行情数据</param>
        /// <returns></returns>
        protected internal Data_Quote Query(StockInfo pStockInfo, DateTime endTime, typeTimeFrequency quoteTime = typeTimeFrequency.m5, Data_Quote quoteBase = null, bool autoStatics = false)
        {
            if (pStockInfo == null)
            {
                return(null);
            }

            //校正时间
            Data_Quote pQuote = null;
            DateTime   dtEnd  = zxcTimeHelper.CheckTime(endTime, quoteTime, true);

            if (DateTime.Now > dtEnd)
            {
                pQuote = QuoteQuery._Query.Query(pStockInfo.StockID_Tag, dtEnd, 1, quoteTime, true).FirstOrDefault();
                if (pQuote != null && pQuote.DateTime == dtEnd)
                {
                    if (pQuote.GetStockInfo() == null)
                    {
                        pQuote.SetStockInfo(pStockInfo);
                    }

                    //修正开盘值
                    if (pQuote.Price_Per == 0 && double.IsInfinity(pQuote.Value_RF))
                    {
                        Data_Quote pQuote_Day = QuoteQuery._Query.Query(pStockInfo.StockID_Tag, dtEnd, 1, typeTimeFrequency.day, true).FirstOrDefault();
                        if (pQuote_Day != null)
                        {
                            pQuote.Init_Price_Base(pQuote_Day.Price_Per);
                        }
                    }
                    return(pQuote);
                }
            }
            if (!autoStatics)
            {
                return(null);
            }

            //获取最数据,自行计算
            if ((int)quoteTime < 4)
            {
                return(null);
            }
            int nCount = (int)quoteTime.Get_Value() / 60;
            List <Data_Quote> lstQuotes = QuoteQuery._Query.Query(pStockInfo.StockID_Tag, dtEnd, nCount, typeTimeFrequency.m1, true);


            //统计最大最小
            DataStatistics pStatistics = new DataStatistics();

            pStatistics.Init(lstQuotes[0].Price_Close, lstQuotes[0].DateTime);
            foreach (var item in lstQuotes)
            {
                pStatistics.Statistics(item.Price_High, item.DateTime);
                pStatistics.Statistics(item.Price_Low, item.DateTime);
                pStatistics.Statistics(item.Price_Close, item.DateTime);
            }
            if (quoteBase != null)
            {
                pStatistics.Statistics(quoteBase.Price_High, quoteBase.DateTime);
                pStatistics.Statistics(quoteBase.Price_Low, quoteBase.DateTime);
                pStatistics.Statistics(quoteBase.Price_Close, quoteBase.DateTime);
            }

            //实例新数据
            Data_Quote pQuote_New = new Data_Quote(pStockInfo)
            {
                Price_Close   = pStatistics.Value_Original,
                Price_High    = pStatistics.Max_Original,
                Price_Low     = pStatistics.Min_Original,
                QuotePlat     = typeQuotePlat.none,
                QuoteTimeType = quoteTime,
                DateTime      = dtEnd,
                IsDel         = true
            };

            return(pQuote_New);
        }