예제 #1
0
        public List <string> screen()
        {
            List <string> stocks = StockPool.getInstance().getAllStocks();


            return(filterStocksByCostPerf_PricePos_PE(stocks, "2018", "1", 0.05, 0.5, 40.0));
        }
        public static bool isUninterestedIndustry(string stockID)
        {
            string industryName = StockPool.getInstance().getStockIndustry(stockID);

            if (industryName == null)
            {
                return(false);
            }

            return(ms_uninterestIndustries.Contains(industryName));
        }
예제 #3
0
        public List <string> screen()
        {
            List <string> src = StockPool.getInstance().getAllStocks();

            STFilter stFlt = new STFilter();
            IndustryExcludeFilter indFlt = new IndustryExcludeFilter();
            KLinePatternFilter    osFlt  = new KLinePatternFilter(new Oversold2Day());
            PriceScaleFilter      psFlt  = new PriceScaleFilter(0.5);
            List <string>         stocks = psFlt.filter(osFlt.filter(indFlt.filter(stFlt.filter(src))));

            return(stocks);
        }
예제 #4
0
        public static void filterStocksByPriceScaleAndPE(double ratio, double pe, string filepath)
        {
            List <string>    stocks      = new List <string>();
            PEFilter         peFilter    = new PEFilter(pe);
            PriceScaleFilter priceFilter = new PriceScaleFilter(ratio);

            List <string> shStocks = peFilter.filter(priceFilter.filter(StockPool.getInstance().allSHStocks));
            List <string> szStocks = peFilter.filter(priceFilter.filter(StockPool.getInstance().allSZStocks));

            stocks.AddRange(shStocks);
            stocks.AddRange(szStocks);

            StockListFileUtil.writeStocksToFile(stocks, filepath);
        }
예제 #5
0
        public List <string> screen()
        {
            List <string> stocks = null;

            if (m_useIntermediate)
            {
                stocks = IntermediateImporter.readLowPriceStocks();
            }
            else
            {
                stocks = StockPool.getInstance().getAllStocks();
            }

            return(filterStocksByPriceScale_PE_Eps(stocks, 0.3, 40.0, 0.2));
        }
예제 #6
0
        public IActionResult OnGet(int?id)
        {
            if (id == null)
            {
                return(this.NotFound());
            }

            this.stockPool = this.stockPoolService.GetStockPool(id.Value);

            if (this.stockPool == null)
            {
                return(this.NotFound());
            }

            return(this.Page());
        }
예제 #7
0
        public static bool isSTStock(string stockID)
        {
            string stockName = StockPool.getInstance().getStockName(stockID);

            if (stockName == null)
            {
                return(false);
            }

            if (stockName.Contains("ST"))
            {
                return(true);
            }

            return(false);
        }
        public bool calcAvgValInIndustry(string stockID, out double val)
        {
            val = 0.0;
            if (m_comparer == null)
            {
                return(false);
            }

            string industryName = StockPool.getInstance().getStockIndustry(stockID);
            string comparerName = m_comparer.getFilterDesc();
            bool   ret          = true;

            if (!StockDataCache.getInstance().getAvgValInIndustry(comparerName, industryName, out val))
            {
                double accumVal   = 0.0;
                int    accumCount = 0;

                List <string> stocksInIndustry = StockPool.getInstance().getStocksInIndustry(industryName);
                foreach (string code in stocksInIndustry)
                {
                    double curVal = 0.0;
                    if (m_comparer.getNumericValue(code, out curVal))
                    {
                        if (m_comparer.needLimitValue() &&
                            !m_comparer.isValueValid(curVal))
                        {
                            curVal = m_comparer.getLimitValue();
                        }
                        accumVal += curVal;
                        accumCount++;
                    }
                }

                if (accumCount > 0)
                {
                    val = accumVal / accumCount;
                    StockDataCache.getInstance().setAvgValInIndustry(comparerName, industryName, val);
                }
                else
                {
                    ret = false;
                }
            }

            return(ret);
        }
예제 #9
0
        static void Main(string[] args)
        {
            GlobalConfig.getInstance().init();
            StockPool.getInstance().init();
            OptionalStocks.getInstance().init();

            //double ratio = calcCostPerfInHistory("sh603067");
            //double r2 = calcCostPerfInHistory("sh600995");

            //StockRealTimeData rd = StockDataCenter.getInstance().queryRealTimeData("sz000662");
            double pe = 0;

            DynamicPEFilter.calcDynamicPE("sz002551", out pe);

            while (true)
            {
                Thread.Sleep(1000);
            }
        }
예제 #10
0
        public int calcRankInIndustry(string stockID)
        {
            if (m_comparer == null)
            {
                return(-1);
            }

            string              industryName     = StockPool.getInstance().getStockIndustry(stockID);
            List <string>       stocksInIndustry = StockPool.getInstance().getStocksInIndustry(industryName);
            List <RankMetadata> sortableArr      = new List <RankMetadata>();

            foreach (string code in stocksInIndustry)
            {
                double val = 0.0;
                if (!m_comparer.getNumericValue(code, out val))
                {
                    continue;
                }
                RankMetadata md = new RankMetadata(code, val);
                sortableArr.Add(md);
            }

            sortableArr.Sort();
            int i = 0;

            for (i = 0; i < sortableArr.Count; i++)
            {
                if (sortableArr[i].stockID.Equals(stockID))
                {
                    break;
                }
            }

            if (i == sortableArr.Count)
            {
                return(-1);
            }

            return(i + 1);
        }
예제 #11
0
        public void SetUp()
        {
            this.stockPool1 = new StockPool {
                Id = 1, StockPoolCode = "one"
            };
            this.stockPool2 = new StockPool {
                Id = 2, StockPoolCode = "two"
            };

            this.StockPoolFacadeService.GetAll()
            .Returns(new SuccessResult <IEnumerable <StockPool> >(new List <StockPool>
            {
                this.stockPool1, this.stockPool2
            }));

            this.Response = this.Browser.Get(
                "/inventory/stock-pools",
                with =>
            {
                with.Header("Accept", "application/json");
            }).Result;
        }
예제 #12
0
 public static bool isInBlackList(string stockID)
 {
     return(StockPool.getInstance().blackList.Contains(stockID));
 }
예제 #13
0
 private void button_src_defaultAll_Click(object sender, EventArgs e)
 {
     AppStockData.getInstance().m_srcList.copy(StockPool.getInstance().getAllStocks());
     refreshSrcList();
 }
예제 #14
0
        public override void exec()
        {
            //var a = analytic.hitkeyprices();
            //log.Info(a.ToCsv());
            //return;

            log.Info("run strategy " + param.name.ToLower());

            log.Info("get codes");
            universe universe;

            if (param.astock)
            {
                var codes =
                    param.universe.Split(new[] { ' ', ',' }, StringSplitOptions.RemoveEmptyEntries);
                universe = new universe(param.universe, codes);
            }
            else if (param.asector)
            {
                universe = new universe(param.universe, new Trade.Db.db().codes(param.universe).ToArray());
            }
            else
            {
                universe = getUniverse(param.universe);
            }

            log.Info("total " + universe.codes.Length);

            log.Info("get run");
            var pool   = new StockPool(universe.codes);
            var orders = !param.backtest
                ? new IOrder[] { new dbOrder(), new smsOrder() }
                : new IOrder[] { new dbOrder() };
            var portflio = (param.portflio ?? param.name.ToLower()) + (param.backtest ? "-backtest" : "");
            var account  = new Account(portflio, pool, orders, param.backtest);

            switch (param.name.ToLower())
            {
            case "macd15min":
                new strategies.macd15minstrategy().Run(account);
                break;
            }

            if (param.backtest)
            {
                log.Info("run back test");
                var client = new kdatadb();
                log.InfoFormat("total {0}", account.universe.Count);
                var pnls = new List <pnl>();
                foreach (var stock in account.universe.AsParallel())
                {
                    log.InfoFormat("run {0}", stock.Code);
                    var k = client.kdata(stock.Code, "D");
                    if (k == null && !k.Any())
                    {
                        log.WarnFormat("empty data set for {0}", stock.Code);
                        continue;
                    }

                    var trades = account.Trades
                                 .Where(p => p.code == stock.Code)
                                 //.Where(p=>p.Date >= new DateTime(2016,9,1))
                                 .OrderBy(p => p.date)
                                 .ToArray();

                    var backtest = new backtesting(stock.Code, k.close(), trades);

                    if (backtest.pnl != null)
                    {
                        pnls.Add(backtest.pnl);
                    }
                }

                var format = "{0,-15}{1,-20}{2,10:N0}{3,10:N0}{4,10:N1}";
                log.InfoFormat(format, "code", "date", "value", "capital", "ratio%");
                foreach (var pnl in pnls)
                {
                    log.InfoFormat(format, pnl.code, pnl.date, pnl.value, pnl.capital, pnl.ratio);
                }
            }

            log.Info("**********DONE**********");
        }
예제 #15
0
        public static bool isStockInIndustry(string stockID, string inddustry)
        {
            string industryName = StockPool.getInstance().getStockIndustry(stockID);

            return(inddustry == industryName);
        }
예제 #16
0
 public Form1()
 {
     InitializeComponent();
     m_dt = new StockPool();
 }
예제 #17
0
        static void Main(string[] args)
        {
            GlobalConfig.getInstance().init();
            StockPool.getInstance().init();
            OptionalStocks.getInstance().init();

            // #1
            //LowLevelCheapPESelector s = new LowLevelCheapPESelector();
            //List<string> stocks = s.screen();

            // #2
            //List<string> src = new List<string>();
            //src.Add("sh600097");
            //PEFilter peFilter = new PEFilter(40);
            //IndustryFilter indFilter = new IndustryFilter();
            //EPSPerfFilter epsFilter = new EPSPerfFilter(0.2);

            //List<string> r0 = peFilter.filter(src);
            //List<string> r1 = indFilter.filter(r0);

            //List<string> stocks = epsFilter.filter(r1);

            //foreach (string stockCode in stocks)
            //{
            //    Logger.debugOutput(stockCode);
            //}

            // #3
            //string curYear = "2018";
            //string curSeason = "1";
            ////string targetYear = "2013";
            ////string targetSeason = "1";
            //string stc1 = "sh600995";
            //string stc2 = "sz000883";
            //double curVal1 = CostPerfFilter.calcCostRefValue(stc1, curYear, curSeason);
            //double curVal2 = CostPerfFilter.calcCostRefValue(stc2, curYear, curSeason);
            ////double targVal1 = CostPerfFilter.calcCostRefValue(stc1, targetYear, targetSeason);
            ////double targVal2 = CostPerfFilter.calcCostRefValue(stc2, targetYear, targetSeason);
            ////double param = curVal1 / targVal1 - curVal2 / targVal2;
            //double histVal1 = CostPerfFilter.getMaxCostRefValueBefore(stc1, curYear, curSeason);
            //double histVal2 = CostPerfFilter.getMaxCostRefValueBefore(stc2, curYear, curSeason);

            //double param = curVal1 / histVal1 - curVal2 / histVal2;

            // #4
            //HighCostPerfNotHighPosSelector s = new HighCostPerfNotHighPosSelector();
            //List<string> stocks = s.screen();

            // #5
            //List<string> src = IntermediateImporter.readCheapStocks();
            //List<StockSortableMetadata> target = new List<StockSortableMetadata>();
            //foreach(string stockID in src)
            //{
            //    if (IndustryFilter.isStockInIndustry(stockID, "银行"))
            //    {
            //        continue;
            //    }
            //    StockSortableMetadata sd = new SSMDCostPerf(stockID);
            //    target.Add(sd);
            //}
            //target.Sort();

            //List<string> stocks = new List<string>();
            //for(int i = target.Count - 1; i >= 0; i--)
            //{
            //    stocks.Add(target[i].stockID);
            //}

            //foreach (string stockCode in stocks)
            //{
            //    Logger.debugOutput(stockCode);
            //}

            // #6
            string stockID = "sz000034";
            double curVal = CostPerfFilter.calcCurCostRefValue(stockID, "2018", "1");
            int    maxYearDyn = 0, maxQuarterDyn = 0, maxYearAnl = 0;
            double refValByReport = CostPerfFilter.getMaxCostRefValueBefore(stockID, "2018", "1", out maxYearDyn, out maxQuarterDyn);
            double refValByAnnual = AnnualCostPerfFilter.getMaxAnnualCostRefValueBefore(stockID, "2018", out maxYearAnl);
            double refVal         = Math.Max(refValByReport, refValByAnnual);
            double ratio          = curVal / refVal;

            // #7
            //List<string> selfSelectedList = OptionalStocks.getInstance().optionalStockList;
            //List<StockSortableMetadata> selfSelectSortByQuarter = new List<StockSortableMetadata>();
            //List<StockSortableMetadata> selfSelectSortByYoy = new List<StockSortableMetadata>();
            //List<StockSortableMetadata> selfSelectSortByNormal = new List<StockSortableMetadata>();
            //List<StockSortableMetadata> selfSelectSortByAnnual = new List<StockSortableMetadata>();
            //foreach (string stockCode in selfSelectedList)
            //{
            //    StockSortableMetadata sdn = new SSMDCostPerf(stockCode);
            //    StockSortableMetadata sdq = new SSMDQuarterCostPerf(stockCode);
            //    StockSortableMetadata sdy = new SSMDCostPerf(stockCode);
            //    StockSortableMetadata sda = new SSMDAnnualCostPerf(stockCode);
            //    selfSelectSortByQuarter.Add(sdq);
            //    selfSelectSortByNormal.Add(sdn);
            //    selfSelectSortByYoy.Add(sdy);
            //    selfSelectSortByAnnual.Add(sda);
            //}

            //selfSelectSortByQuarter.Sort();
            //selfSelectSortByQuarter.Reverse();
            //selfSelectSortByNormal.Sort();
            //selfSelectSortByNormal.Reverse();
            //selfSelectSortByYoy.Sort();
            //selfSelectSortByYoy.Reverse();
            //selfSelectSortByAnnual.Sort();
            //selfSelectSortByAnnual.Reverse();

            //Logger.log("Normal sort: ");
            //outputSortData(selfSelectSortByNormal);
            //Logger.log("Quarter sort: ");
            //outputSortData(selfSelectSortByQuarter);
            //Logger.log("Yoy sort: ");
            //outputSortData(selfSelectSortByYoy);
            //Logger.log("Annual sort: ");
            //outputSortData(selfSelectSortByAnnual);

            // #8
            //List<string> src = IntermediateImporter.readMidRepGrowthStocks();
            //AnnualCostPerfFilter acpFilter = new AnnualCostPerfFilter("2018", "1", 0.0);
            //PriceScaleFilter pcFilter = new PriceScaleFilter(0.5);
            //List<string> stocks = pcFilter.filter(acpFilter.filter(src));
            //List<StockSortableMetadata> arr = new List<StockSortableMetadata>();
            //foreach(string code in stocks)
            //{
            //    StockSortableMetadata sda = new SSMDAnnualCostPerf(code);
            //    arr.Add(sda);
            //}
            //arr.Sort();
            //outputSortData(arr);

            // #9
            //OversoldSelector s = new OversoldSelector();
            //List<string> stocks = s.screen();
            //List<StockSortableMetadata> stocksSortByAnnual = new List<StockSortableMetadata>();
            //foreach (string stockCode in stocks)
            //{
            //    StockSortableMetadata sda = new SSMDAnnualCostPerf(stockCode);
            //    stocksSortByAnnual.Add(sda);
            //}
            //stocksSortByAnnual.Sort();
            //outputSortData(stocksSortByAnnual);

            // # temp
            //string stockID = "sh600703";
            //string str = StockDataCollector.queryKLineDataBaidu(stockID);
            //List<StockKLineBaidu> arr = StockDataConvertor.parseKLineArrayBaiduAdvanced(str);
            //int endIndex = StockDataUtil.getIndexByDate(arr, "20180426");
            //List<StockKLineBaidu> subArr = arr.GetRange(0, endIndex + 1);
            //Oversold2Day osp = new Oversold2Day();
            //bool ret = osp.isMatch(subArr);

            while (true)
            {
                Thread.Sleep(1000);
            }
        }
예제 #18
0
 static void initCore()
 {
     GlobalConfig.getInstance().init();
     StockPool.getInstance().init();
 }
예제 #19
0
 public Form1()
 {
     InitializeComponent();
     m_dt = new StockPool();
 }