public MainFutures Scan(String variety, IList <int> openDates) { MainFutures mainF = new MainFutures(); mainF.Variety = variety; List <MainContractInfo> mainFutures = mainF.mainFutures; List <CodeInfo> codes = cache.GetCodesByCatelog(variety); String lastMainCode = ""; for (int i = 0; i < openDates.Count; i++) { int openDate = openDates[i]; String mainCode = GetMainCode(csvPath, codes, openDate); if (mainCode == null) { continue; } if (!mainCode.Equals(lastMainCode)) { bool addNew = true; if (mainFutures.Count > 0) { //主合约改变条件: // MainContractInfo lastMain = mainFutures[mainFutures.Count - 1]; lastMain.End = openDates[i - 1]; if (mainFutures.Count > 1 && lastMain.Last < 25) { MainContractInfo lastMain2 = mainFutures[mainFutures.Count - 2]; if (lastMain2.Code.Equals(mainCode)) { mainFutures.RemoveAt(mainFutures.Count - 1); addNew = false; } } } if (addNew) { MainContractInfo main = new MainContractInfo(); main.Variety = variety; main.Code = mainCode; main.Start = openDate; mainFutures.Add(main); } } lastMainCode = mainCode; } if (mainFutures.Count != 0) { MainContractInfo lMain = mainFutures[mainFutures.Count - 1]; lMain.End = openDates[openDates.Count - 1]; } return(mainF); }
public void TestScan() { string path = @"E:\FUTURES\CSV\DATACENTERSOURCE\"; string codePath = path + "instruments.csv"; List <CodeInfo> codes = CsvUtils_Code.Load(codePath); string datePath = path + "tradingdays.csv"; MainFuturesScan scan = new MainFuturesScan(path, codes); List <int> openDates = CsvUtils_TradingDay.Load(datePath); MainFutures mainFutures = scan.Scan("B", openDates); Console.WriteLine(mainFutures); }