public override bool CheckData(DateTime dtTime, T data, IDataCache <T> dataCache = null) { bool bResult = base.CheckData(dtTime, data, dataCache); if (bResult == false) { return(false); } //初始统计信息 string msg = this.getMsg_Perfix(); if (!_dataStics.IsInited) { //修正最小生效间隔 double dValue_interval = _data.IsIndex() ? _valueRF_step * 0.4 : _data.GetStockType() == typeStock.Option ? _valueRF_step * 4.0 : _valueRF_step; //初始统计信息 _dataStics.Init(0, _data.DateTime, dValue_interval, _data.GetStockName(), _data.Price_High / _data.Price_Per - 1, _data.Price_Low / _data.Price_Per - 1); } //统计,无效退出 if (!_dataStics.Statistics(_data.Value_RF, _data.DateTime)) { return(false); } //组装消息 msg += this.getMsg_Infix(); msg += this.getMsg_Suffix(); _value_last = _data.Value; //ConsoleHelper.Debug("dataSticsInfo: 最大:{0},最小:{1},前值:{2}", _dataStics.Max, _dataStics.Min, _dataStics.Value_last); //float dValue_delta = _data._valueRF - _valueRF_last; ////float dValueRF_step = _data._isIndex ? _valueRF_step / 2.0f : _data._typeStock == typeStock.Option ? _valueRF_step * 5.0f : _valueRF_step; //if (Math.Abs(dValue_delta) > dValueRF_step) //{ // int ratio = dValue_delta > 0 ? 1 : -1; // _timeInterval_last = (int)Math.Ceiling((DateTime.Now - _timeRF_last).TotalMinutes); // _valueRF_step_last = dValueRF_step * ratio; // _valueRF_last += _valueRF_step_last; // _timeRF_last = DateTime.Now; // //组装消息 // msg += this.getMsg_Infix(); // msg += this.getMsg_Suffix(); // //this.NotifyMsg(msg); //} //输出、打印信息 string usrTo = this.getUser_str(); this.NotifyMsg(msg, usrTo); zxcConsoleHelper.Debug(false, "QuoteCheck_RiseFall_Fixed: {0} ---{1}.\n{2}", this.getMsg_Perfix(), _data.DateTime, msg); return(bResult); }
/// <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); }