Example #1
0
        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);
        }
Example #2
0
        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);
                }
            }
        }
Example #3
0
        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);
        }
Example #4
0
 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("");
 }
Example #5
0
        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));
        }
Example #6
0
        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);
        }
Example #7
0
        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);
                }
            }
        }
Example #8
0
 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);
             }
         }
     }
 }