private List <LogFileInfo> GetLogFiles(USeProductManager productManager) { DirectoryInfo klineDir = new DirectoryInfo(m_kLineFolder); string searchParten = ""; if (m_cycle == USeCycleType.Day) { searchParten = "1day-*.csv"; } else if (m_cycle == USeCycleType.Min1) { searchParten = "1min-*.csv"; } else { throw new NotSupportedException(string.Format("未知的周期类型文件:{0}", m_cycle)); } FileInfo[] klineFiles = klineDir.GetFiles(searchParten); List <LogFileInfo> logFileList = new List <LogFileInfo>(); foreach (FileInfo fileItem in klineFiles) { //if (fileItem.Name.StartsWith("1min-cu1707") || fileItem.Name.StartsWith("1day-cu1707")) { LogFileInfo logFileInfo = LogFileInfo.ParseLogFile(fileItem, productManager); logFileList.Add(logFileInfo); } } return(logFileList); }
public override bool Run() { USeProductManager varietiesManager = CreateVarietiesManager(); DirectoryInfo klineDir = new DirectoryInfo(m_kLineFolder); FileInfo[] klineFiles = klineDir.GetFiles("1min-*.csv"); List <LogFileInfo> logFileList = new List <LogFileInfo>(); foreach (FileInfo fileItem in klineFiles) { //if (fileItem.Name.StartsWith("1min") || fileItem.Name.StartsWith("1day")) //if (fileItem.Name.StartsWith("1min-cu1707"))// || fileItem.Name.StartsWith("1day")) { LogFileInfo logFileInfo = LogFileInfo.ParseLogFile(fileItem, varietiesManager); logFileList.Add(logFileInfo); } } if (logFileList.Count < 0) { string text = "无可导入文件"; m_eventLogger.WriteInformation(text); USeConsole.WriteLine(text); return(true); } int index = 0; foreach (LogFileInfo file in logFileList) { index++; try { ClosePrice2Importer importer = new ClosePrice2Importer(file); List <ClosePrice2Entity> closePriceList = importer.ParseClosePrice2(); string text = string.Format("解析{0}.{1}午盘数据完成,共计{2}条", importer.InstrumentCode, importer.Market, closePriceList.Count); USeConsole.WriteLine(text); Stopwatch stopWathch = new Stopwatch(); stopWathch.Start(); SaveClosePrice2Data(importer.Market, closePriceList); stopWathch.Stop(); long useSecondes = stopWathch.ElapsedMilliseconds / 1000; USeConsole.WriteLine(string.Format("导入{0}.{1}午盘数据完成,共计{2}条,耗时{3}秒,平均速度{4}/秒,Finish{5}/{6}", importer.InstrumentCode, importer.Market, closePriceList.Count, useSecondes, useSecondes > 0 ? closePriceList.Count / useSecondes : 0, index, logFileList.Count)); } catch (Exception ex) { string text = string.Format("导入数据失败,文件路径:{0},错误:{1}", file.FileInfo.FullName, ex.Message); m_eventLogger.WriteInformation(text); USeConsole.WriteLine(text); } } return(true); }
/// <summary> /// 创建品种管理类。 /// </summary> private void CreateProductManager() { string dbConnStr = ConfigurationManager.ConnectionStrings["KLineDB"].ConnectionString; if (string.IsNullOrEmpty(dbConnStr)) { throw new ArgumentException("Not found KLineDB ConnectionString"); } string alpahDBName = ConfigurationManager.AppSettings["AlphaDBName"]; if (string.IsNullOrEmpty(alpahDBName)) { throw new ArgumentException("Not foun AlphaDBName config"); } try { USeProductManager manager = new USeProductManager(dbConnStr, alpahDBName); manager.Initialize(); m_productManager = manager; string text = String.Format("{0} Create {1} OK.", this, manager); m_eventLogger.WriteInformation(text); } catch (Exception ex) { string text = "Create ProductManager object failed, " + ex.Message; throw new ApplicationException(text, ex); } }
protected USeProductManager CreateVarietiesManager() { USeProductManager manager = new USeProductManager(m_dbConStr, m_alphaDBName); manager.Initialize(); return(manager); }
/// <summary> /// 启动。 /// </summary> /// <param name="marketDataProvider"></param> /// <param name="dbStore"></param> public void Start(List <IKLineDataListener> storers, ITradeRangeManager tradeRangeManager, MainContractManager mainContractManager, USeProductManager productManager, AlphaDBVistor alphaDBVistor, USeTradingInstrumentManager instrumentManager, IAppLogger eventLogger) { m_runFlag = true; if (storers == null) { throw new ArgumentNullException("storers"); } if (tradeRangeManager == null) { throw new ArgumentNullException("tradeRangeManager"); } if (mainContractManager == null) { throw new ArgumentNullException("mainContractManager"); } if (productManager == null) { throw new ArgumentNullException("productManager"); } if (alphaDBVistor == null) { throw new ArgumentNullException("kLineVistor"); } if (instrumentManager == null) { throw new ArgumentNullException("instrumentManager"); } if (eventLogger == null) { throw new ArgumentNullException("eventLogger"); } m_storers = storers; m_tradeRangeManager = tradeRangeManager; m_productManager = productManager; m_mainContractManager = mainContractManager; m_alphaDBVistor = alphaDBVistor; m_instrumentManager = instrumentManager; m_eventLogger = eventLogger; KLinePublisher kLinePublisher = new KLinePublisher(); kLinePublisher.SetMarketDataStore(storers); m_kLinePublisher = kLinePublisher; this.m_workThread = new Thread(new ThreadStart(DoWork)); this.m_workThread.Start(); }
public override bool Run() { USeProductManager varietiesManager = CreateVarietiesManager(); List <LogFileInfo> logFileList = GetLogFiles(varietiesManager); if (logFileList.Count < 0) { string text = "无可导入文件"; m_eventLogger.WriteInformation(text); USeConsole.WriteLine(text); return(true); } int index = 0; foreach (LogFileInfo file in logFileList) { index++; try { KLineImporter importer = new KLineImporter(file); if (importer.Cycel != USeCycleType.Min1 && importer.Cycel != USeCycleType.Day) { continue; } DateTime beginDate; DateTime endDate; List <USeKLine> klineList = importer.ParseKLine(out beginDate, out endDate); string text = string.Format("解析{0}.{1}@{2}数据完成,共计{3}条", importer.InstrumentCode, importer.Market, importer.Cycel, klineList.Count); USeConsole.WriteLine(text); Stopwatch stopWathch = new Stopwatch(); stopWathch.Start(); SaveKLineData(importer.Market, importer.Cycel, importer.InstrumentCode, beginDate, endDate, klineList); stopWathch.Stop(); long useSecondes = stopWathch.ElapsedMilliseconds / 1000; USeConsole.WriteLine(string.Format("导入{0}.{1}@{2}完成,共计{3}条,耗时{4}秒,平均速度{7}/秒,Finish{5}/{6}", importer.InstrumentCode, importer.Market, importer.Cycel, klineList.Count, useSecondes, index, logFileList.Count, useSecondes > 0 ? klineList.Count / useSecondes : 0)); } catch (Exception ex) { string text = string.Format("导入数据失败,文件路径:{0},错误:{1}", file.FileInfo.FullName, ex.Message); m_eventLogger.WriteInformation(text); USeConsole.WriteLine(text); } } return(true); }
public static LogFileInfo ParseLogFile(FileInfo fileInfo, USeProductManager productManager) { string[] items = fileInfo.Name.Split(new char[] { '-', '.' }); if (items.Length != 3 && items[2].ToLower() != "csv") { throw new Exception("Undistinguish fileName:" + fileInfo.Name); } USeCycleType cycle = USeCycleType.Unknown; string cycleValue = items[0].ToLower(); string instrumentCode = items[1]; if (cycleValue == "1min") { cycle = USeCycleType.Min1; } else if (cycleValue == "5min") { cycle = USeCycleType.Min5; } else if (cycleValue == "1day") { cycle = USeCycleType.Day; } else { throw new Exception("Undistinguish cycel:" + cycleValue); } string productCode = USeTraderProtocol.GetVarieties(instrumentCode); USeProduct product = productManager.GetPruduct(productCode); if (product == null) { throw new Exception("Undistinguish cycel:" + cycleValue); } LogFileInfo logInfo = new LogFileInfo(); logInfo.InstrumentCode = GetOfficeInstrumentCode(instrumentCode, product.Market); logInfo.Market = product.Market; logInfo.Cycle = cycle; logInfo.FileInfo = fileInfo; return(logInfo); }