public List <string> doFilter(List <string> stocks)
        {
            List <string> src = new List <string>();

            src.AddRange(stocks);
            List <string> target = new List <string>();

            target.AddRange(stocks);
            for (int i = 0; i < ms_filterSequence.Length; i++)
            {
                AppFilterType type = ms_filterSequence[i];
                if (m_conditionMap.ContainsKey(type))
                {
                    AppFilterItem item = m_conditionMap[type];
                    IStockFilter  flt  = item.generateFilter();
                    if (flt != null)
                    {
                        target = flt.filter(src);
                        outputInfo(item, src.Count, target.Count);
                        src.Clear();
                        src.AddRange(target);
                    }
                }
            }

            return(target);
        }
        protected IStockFilter generateHolderCountFilter()
        {
            IStockFilter filter = null;
            AppHolderCountFilterSubType hcfType = (AppHolderCountFilterSubType)m_subType;
            string year             = GlobalConfig.getInstance().curYear;
            string quarter          = GlobalConfig.getInstance().curQuarter;
            int    continousQuarter = (int)m_param1;

            switch (hcfType)
            {
            case AppHolderCountFilterSubType.HCFST_AccumRatio:
                double ratio = double.Parse(m_param2);
                filter = new HolderChangeRatioFilter(year, quarter, ratio, continousQuarter);
                break;

            case AppHolderCountFilterSubType.HCFST_Decrease:
                bool allowInvariant = bool.Parse(m_param2);
                filter = new HolderCountTrendFilter(year, quarter, continousQuarter, allowInvariant);
                break;

            default:
                break;
            }

            return(filter);
        }
        protected IStockFilter generateInIndustryFilter()
        {
            IStockFilter               filter   = null;
            NumericStockFilter         comparer = null;
            AppInIndustryFilterSubType indType  = (AppInIndustryFilterSubType)m_subType;
            string year    = GlobalConfig.getInstance().curYear;
            string quarter = GlobalConfig.getInstance().curQuarter;

            switch (indType)
            {
            case AppInIndustryFilterSubType.IIFST_CostAnnual:
                comparer = new AnnualCostPerfFilter(year, quarter, 0.0);
                break;

            case AppInIndustryFilterSubType.IIFST_CostDynamic:
                comparer = new CostPerfFilter(year, quarter, 0.0);
                break;

            case AppInIndustryFilterSubType.IIFST_PEDynamic:
                comparer = new DynamicPEFilter(0.0);
                break;

            case AppInIndustryFilterSubType.IIFST_PEStatic:
                comparer = new PEFilter(0.0);
                break;

            case AppInIndustryFilterSubType.IIFST_ROE:
                comparer = new ROEFilter(year, quarter, 0.0);
                break;

            case AppInIndustryFilterSubType.IIFST_NetProfitRatio:
                comparer = new NetProfitRatioFilter(year, quarter, 0.0);
                break;

            default:
                break;
            }

            if (comparer != null)
            {
                filter = new AvgValInIndustryFilter(comparer, m_param1);
            }

            return(filter);
        }
Esempio n. 4
0
        public GetBetDecisions(
            IStockDataProvider stockDataProvider,
            IStockFilter stockFilter,
            IInvestDecider investDecider,
            ICommandBus commandBus,
            IUpdate priceUpdate)
        {
            Condition.Requires(stockDataProvider).IsNotNull();
            Condition.Requires(stockFilter).IsNotNull();
            Condition.Requires(investDecider).IsNotNull();
            Condition.Requires(commandBus).IsNotNull();
            Condition.Requires(priceUpdate).IsNotNull();

            this._stockDataProvider = stockDataProvider;
            this._stockFilter       = stockFilter;
            this._investDecider     = investDecider;
            this._commandBus        = commandBus;
            this._priceUpdate       = priceUpdate;
        }
        protected IStockFilter generatePEFilter()
        {
            IStockFilter       filter = null;
            AppPEFilterSubType peType = (AppPEFilterSubType)m_subType;

            switch (peType)
            {
            case AppPEFilterSubType.PEFST_Dynamic:
                filter = new PEFilter(m_param1);
                break;

            case AppPEFilterSubType.PEFST_Static:
                filter = new DynamicPEFilter(m_param1);
                break;

            default:
                break;
            }

            return(filter);
        }
        protected IStockFilter generateCostFilter()
        {
            IStockFilter         filter = null;
            AppCostFilterSubType cfType = (AppCostFilterSubType)m_subType;
            string year    = GlobalConfig.getInstance().curYear;
            string quarter = GlobalConfig.getInstance().curQuarter;

            switch (cfType)
            {
            case AppCostFilterSubType.CFST_Annual:
                filter = new AnnualCostPerfFilter(year, quarter, m_param1);
                break;

            case AppCostFilterSubType.CFST_Dynamic:
                filter = new CostPerfFilter(year, quarter, m_param1);
                break;

            case AppCostFilterSubType.CFST_Quarter:
                filter = new QuarterCostPerfFilter(year, quarter, m_param1);
                break;

            case AppCostFilterSubType.CFST_Spec:
                string refYear = GlobalConfig.getInstance().defaultRefYear;
                filter = new SpecifiedCostPerfFilter(refYear, quarter, year, quarter, m_param1);
                break;

            case AppCostFilterSubType.CFST_Yoy:
                filter = new CostPerfYoyFilter(year, quarter, m_param1);
                break;

            default:
                break;
            }

            return(filter);
        }
        public IStockFilter generateFilter()
        {
            IStockFilter filter  = null;
            string       year    = GlobalConfig.getInstance().curYear;
            string       quarter = GlobalConfig.getInstance().curQuarter;

            switch (m_type)
            {
            case AppFilterType.FLTT_Cost:
                filter = generateCostFilter();
                break;

            case AppFilterType.FLTT_PE:
                filter = generatePEFilter();
                break;

            case AppFilterType.FLTT_InIndustry:
                filter = generateInIndustryFilter();
                break;

            case AppFilterType.FLTT_PriceScale:
                filter = new PriceScaleFilter(m_param1);
                break;

            case AppFilterType.FLTT_Distrib:
                filter = new DistribBonusFilter(year, quarter, m_param1);
                break;

            case AppFilterType.FLTT_ExcludeIndustry:
                filter = new IndustryExcludeFilter();
                break;

            case AppFilterType.FLTT_STStocks:
                filter = new STFilter();
                break;

            case AppFilterType.FLTT_ROE:
                filter = new ROESustainedFilter(year, quarter, m_param1, int.Parse(m_param2));
                break;

            case AppFilterType.FLTT_NetProfitRatio:
                filter = new NetProfitRatioSustainedFilter(year, quarter, m_param1, int.Parse(m_param2));
                break;

            case AppFilterType.FLTT_IncludeIndustry:
                string[]      arr        = m_param2.Split(';');
                List <string> industries = new List <string>();
                industries.AddRange(arr);
                filter = new IndustryIncludeFilter(industries);
                break;

            case AppFilterType.FLTT_HolderCount:
                filter = generateHolderCountFilter();
                break;

            case AppFilterType.FLTT_StableProfit:
                int yearsCount = int.Parse(m_param2);
                filter = new QuarterNetProfitFilter(year, quarter, yearsCount, 0.1);
                // AnnualNetProfitFilter(year, quarter, yearsCount, 0.1);
                break;

            case AppFilterType.FLTT_Amplitude:
                int daysCount = int.Parse(m_param2);
                filter = new AvgAmplitudeFilter(m_param1, daysCount);
                break;

            case AppFilterType.FLTT_SubNew:
                filter = new SubNewFilter();
                break;

            case AppFilterType.FLTT_PBCost:
                filter = new AnnualPBCostFilter(year, quarter, m_param1);
                break;

            case AppFilterType.FLTT_BlackList:
                filter = new BlackListFilter();
                break;

            default:
                break;
            }

            return(filter);
        }