/// <summary> /// 保存日线行情数据 /// </summary> /// <returns></returns> public static object SaveDataByTime(object rep, object reqObj) { ReqDataByTime req = reqObj as ReqDataByTime; try { ulong securityID = Convert.ToUInt64(req.securityIDs[0]); if (rep is Exception) { string msg = string.Format("SecurityID:{0}.{1}", securityID, (rep as Exception).Message); LogHelper.Track("所有日线行情", msg); LstRetryReqDataByTime.Add(req); return(null); } List <DataByTime> lstInfo = DSPHelper.TransferDataByTime(rep, securityID); int count = lstInfo.Count; if (count > 0) { MongoDBHelper.InsertMany <DataByTime>(lstInfo); } LogHelper.Track("所有日线行情", string.Format("SecurityID:{0}. Count:{1}", securityID, count)); } catch (Exception ex) { string errMsg = string.Format("SecurityID:{0},{1}", (reqObj as ReqDataByTime).securityIDs[0], ex.Message); LogHelper.Track("所有日线行情", errMsg); LstRetryReqDataByTime.Add(req); } return(null); }
/// <summary> /// 从指定开始日开始,获取行情数据 /// </summary> /// <returns></returns> public static List <DataByTimeIndexInfo> GetDataByTimeIndexInfo(TimePeriod period, int retryTime = 0) { var securityIDs = MongoDBHelper.AsQueryable <SymbolInfo>().Select(m => m.SecurityID); var req = new ReqDataByTime(); req.securityIDs.AddRange(securityIDs); //从json文件取行情指标 string appDataPath = AppDomain.CurrentDomain.BaseDirectory; string jsonFileName = Path.Combine(appDataPath, "Data", "JsonData", "行情数据的字段.json"); string jsonData = File.ReadAllText(jsonFileName); var dic = JsonConvert.DeserializeObject <Dictionary <string, string> >(jsonData); req.fields.AddRange(dic.Keys); req.fields.Add("Symbol"); req.fields.Add("SecurityID"); req.fields.Add("TradingDate"); req.fields.Add("Filling"); req.quoteType = EQuoteType.Day; req.interval = 1; req.timePeriods.Add(period); req.page = new DataPage() { begin = 0, end = 0 }; req.priceAdj = EPriceAdjust.AdjNone; var rep = SyncRequestEx.Instance.SyncSendData(req, _waitTime); if (rep is Exception) { if (retryTime > RetryTime) { string exMsg = string.Format("同步行情异常. 重试{0}次仍未取到值.begin:{1}; end:{2}.", DSPHelper.RetryTime, period.begin, period.end); LogHelper.Error("异常", exMsg); return(null); } retryTime += 1; string errMsg = string.Format("获取行情:begin:{0}; end:{1}异常!重试{2}次!", period.begin, period.end, retryTime); LogHelper.Info("总运行", errMsg); return(GetDataByTimeIndexInfo(period, retryTime)); } var list = TransferHelper.Transfer2ListDataByTimeIndexInfo(rep); list = list.Where(m => m.Filling == "0").ToList(); return(list); }
/// <summary> /// 获取行情数据的请求条件 /// </summary> /// <returns></returns> public static ReqDataByTime GetReqDataByTime(ulong securityID, DateTime beginDate, DateTime endDate) { ReqDataByTime req = new ReqDataByTime(); req.securityIDs.Add(securityID); req.fields.Add("*"); req.quoteType = EQuoteType.Day; req.interval = 1; req.timePeriods.Add(new TimePeriod() { begin = TransferHelper.DateTimeToString(beginDate), // 只取在此时间之后的数据 end = TransferHelper.DateTimeToString(endDate) }); req.page = new DataPage() { begin = 0, end = 0 }; req.priceAdj = EPriceAdjust.AdjNone; return(req); }
/// <summary> /// 同步所有日线行情数据 /// </summary> public static void SyncDataByTime() { // 记日志 LogHelper.Info("总运行", "开始:同步所有日线行情"); DspRequest dspRequest = new DspRequest(); dspRequest.DealData = SaveDataByTime; LstRetryReqDataByTime = new List <ReqDataByTime>(); try { //取得所有a股安全码 List <ulong> lstSecurityID = MongoDBHelper.AsQueryable <SymbolInfo>().Select(m => m.SecurityID).ToList(); //根据代码同步所有日频行情数据 foreach (var securityID in lstSecurityID) { try { DataByTime info = MongoDBHelper.AsQueryable <DataByTime>() .Where(m => m.SecurityID == securityID) .OrderByDescending(m => m.TradingDate) .FirstOrDefault(); ReqDataByTime req = null; if (info == null) { req = DSPHelper.GetReqDataByTimeAll(securityID); } else { DateTime beginDate = Convert.ToDateTime(info.TradingDate).AddDays(1); if (beginDate >= DateTime.Today) { continue; } req = DSPHelper.GetReqDataByTimeLast(securityID, beginDate); } dspRequest.AsyncSendData(req, DSPHelper.WaitTime, req); } catch (Exception ex) { string errMsg = string.Format("同步所有日线行情发生异常.securityID:{0}", securityID); LogHelper.Error("异常", errMsg, ex); } } //等待DSP任务完成 dspRequest.WaitFinished(); if (LstRetryReqDataByTime.Count > 0) { //重试 RetrySyncDataByTime(dspRequest, 1); //等待DSP任务完成 dspRequest.WaitFinished(); } ////给10秒钟mongodb。 //Thread.Sleep(10000); } catch (Exception ex) { LogHelper.Error("异常", "同步所有日线行情发生异常.", ex); } finally { dspRequest.Dispose(); LogHelper.Info("总运行", "结束:同步所有日线行情"); } }