public override bool Execute(CancellationToken token) { DateTime curDay = DateTime.Today; Console.WriteLine("当前日期:{0}", curDay.ToLongDateString()); DateTime tradeDay = gmc.GetNextTradingDate("SHSE", curDay.AddDays(-1)); if (curDay == tradeDay) { List <Instrument> insts = new List <Instrument>(); foreach (string market in this.config.Markets.Split(',')) { insts.AddRange(gmc.GetInstruments(market, "stock")); } TradeDataAccessor.StoreInstruments(insts).Wait(); List <string> symbols = insts.Where(e => e.IsSuspended == false).Select(e => e.Symbol).ToList(); Console.WriteLine("市场<{0}>今日开市证券:{1}只", config.Markets, symbols.Count); foreach (DataJobConfig dataJobConfig in config.DataJobConfigs) { if (dataJobConfig.SubJobs != null && dataJobConfig.SubJobs.Count > 0) { List <IJob> jobQueue = new List <IJob>(); foreach (DataJobConfig subDataJobConfig in dataJobConfig.SubJobs) { int i = 0; float weightTotal = 0; foreach (DataCollector dataCollector in subDataJobConfig.DataCollectors) { weightTotal += dataCollector.Weight; int count = (int)Math.Round(symbols.Count * weightTotal) - i; object[] parameters = new object[] { dataCollector.MothedName, dataCollector.ClassName, symbols.GetRange(i, count), curDay }; i = i + count; Type type = Type.GetType(subDataJobConfig.ClassName, (aName) => Assembly.LoadFrom(aName.Name), (assem, name, ignore) => assem == null ? Type.GetType(name, false, ignore) : assem.GetType(name, false, ignore)); Job job = (Job)Activator.CreateInstance(type, parameters); jobQueue.Add(job); } } jobSche.Add(jobQueue, buildTrigger(dataJobConfig)); } else { int i = 0; float weightTotal = 0; foreach (DataCollector dataCollector in dataJobConfig.DataCollectors) { weightTotal += dataCollector.Weight; int count = (int)Math.Round(symbols.Count * weightTotal) - i; object[] parameters = new object[] { dataCollector.MothedName, dataCollector.ClassName, symbols.GetRange(i, count), curDay }; i = i + count; Type type = Type.GetType(dataJobConfig.ClassName, (aName) => Assembly.LoadFrom(aName.Name), (assem, name, ignore) => assem == null ? Type.GetType(name, false, ignore) : assem.GetType(name, false, ignore)); Job job = (Job)Activator.CreateInstance(type, parameters); jobSche.Add(job, buildTrigger(dataJobConfig), dataJobConfig.MaxTaskNumber); } } } } else { Console.WriteLine("今天不是交易日。"); } return(true); }