Esempio n. 1
0
        /// <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);
        }
Esempio n. 2
0
        /// <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);
        }
Esempio n. 3
0
        /// <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);
        }
Esempio n. 4
0
        /// <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("总运行", "结束:同步所有日线行情");
            }
        }