public List <MainContractInfo> GetMainContractInfos(string variety, int startDate, int endDate) { List <MainContractInfo> mainContractInfos = new List <MainContractInfo>(); List <MainContractInfo> allContracts = GetMainContractInfos(variety); bool isFirst = true; for (int i = 0; i < allContracts.Count; i++) { MainContractInfo currentContract = allContracts[i]; if (currentContract.End < startDate) { continue; } MainContractInfo contract = new MainContractInfo(); contract.CopyFrom(currentContract); if (isFirst) { contract.Start = startDate; isFirst = false; } if (contract.End > endDate) { contract.End = endDate; } mainContractInfos.Add(contract); } return(mainContractInfos); }
private void Proceed(string variety, CacheUtils_MainContract cache, List <MainContractInfo> contracts, ITradingDayReader reader) { MainContractInfo contractInfo = cache.GetRecentMainContract(variety); if (contractInfo == null) { List <int> tradingDays = reader.GetAllTradingDays(); MainFutures mf = scan.Scan(variety, tradingDays); contracts.AddRange(mf.mainFutures); } else { int tradingDay = contractInfo.End; int nextTradingDay = reader.GetNextTradingDay(tradingDay); if (nextTradingDay < 0) { contracts.AddRange(cache.GetMainContractInfos(variety)); return; } List <int> allTradingDays = reader.GetAllTradingDays(); IList <int> tradingDays = reader.GetTradingDays(nextTradingDay, allTradingDays[allTradingDays.Count - 1]); MainFutures mf = scan.Scan(variety, tradingDays); if (mf.mainFutures.Count > 0) { MainContractInfo firstMf = mf.mainFutures[0]; if (firstMf.Code == contractInfo.Code) { contractInfo.End = firstMf.End; mf.mainFutures.RemoveAt(0); } contracts.AddRange(cache.GetMainContractInfos(variety)); contracts.AddRange(mf.mainFutures); } } }
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 String GetMainFutureCode(int date) { for (int i = 0; i < mainFutures.Count; i++) { MainContractInfo period = mainFutures[i]; if (period.IsBetween(date)) { return(period.Code); } } return(""); }
private ICodePeriod GetCodePackage_MainContract(string variety, int start, int end) { List <MainContractInfo> contractInfos = dataReader.MainContractReader.GetMainContractInfos(variety, start, end); List <ICodePeriod> mainContracts = new List <ICodePeriod>(); for (int i = 0; i < contractInfos.Count; i++) { MainContractInfo mainContractInfo = contractInfos[i]; ICodePeriod codePeriod = CreateCodePeriod(mainContractInfo.Code, mainContractInfo.Start, mainContractInfo.End); mainContracts.Add(codePeriod); } return(CreateCodePeriod_MainContract(variety, start, end, mainContracts)); }
public MainContractInfo GetMainContractInfo(string variety, int date) { if (!dic_Variety_Contracts.ContainsKey(variety)) { return(null); } List <MainContractInfo> mainContracts = dic_Variety_Contracts[variety]; for (int i = 0; i < mainContracts.Count; i++) { MainContractInfo mainContract = mainContracts[i]; if (mainContract.Start <= date && mainContract.End >= date) { return(mainContract); } } return(null); }
public MainContractReader(IDataStore dataStore) { IList <MainContractInfo> mainContractInfos = dataStore.CreateMainContractStore().Load(); for (int i = 0; i < mainContractInfos.Count; i++) { MainContractInfo mainContract = mainContractInfos[i]; if (dic_Variety_Contracts.ContainsKey(mainContract.Variety)) { dic_Variety_Contracts[mainContract.Variety].Add(mainContract); } else { List <MainContractInfo> mainContracts = new List <MainContractInfo>(); mainContracts.Add(mainContract); dic_Variety_Contracts.Add(mainContract.Variety, mainContracts); } } }
public CacheUtils_MainContract(IList <MainContractInfo> mainContractInfos) { if (mainContractInfos != null) { for (int i = 0; i < mainContractInfos.Count; i++) { MainContractInfo mainContract = mainContractInfos[i]; if (dic_Variety_Contracts.ContainsKey(mainContract.Variety)) { dic_Variety_Contracts[mainContract.Variety].Add(mainContract); } else { List <MainContractInfo> mainContracts = new List <MainContractInfo>(); mainContracts.Add(mainContract); dic_Variety_Contracts.Add(mainContract.Variety, mainContracts); } } } }