示例#1
0
        public chart Get(string id, string ktype)
        {
            var kdata   = new kdatadb().kdata(id, ktype);
            var basic   = new Trade.Db.db().basics(id);
            var since   = Trade.Cfg.Configuration.data.bearcrossbull;
            var k       = kdata.Where(p => p.date >= since).ToArray();
            var macd    = new MACD(kdata.close()).Where(p => p.Date >= since).ToArray();
            var macdvol = new MACD(kdata.volume(100)).Where(p => p.Date >= since).ToArray();
            var ma5     = new MA(kdata.close(), 5).Range(since);
            var ma30    = new MA(kdata.close(), 30).Range(since);
            var ma60    = new MA(kdata.close(), 60).Range(since);
            var ma120   = new MA(kdata.close(), 120).Range(since);
            var chg     = new CHG(kdata.close()).Range(since);
            var bottom  = new BOTTOM(kdata).Range(since);

            return(new chart {
                data = k.Select(p => new object[] { p.date, p.open, p.high, p.low, p.close, chg[p.date] }).ToArray(),
                volume = k.Select(p => new object[] { p.date, p.volume / 100 }).ToArray(),
                macd = macd.Select(p => new object[] { p.Date, p.MACD }).ToArray(),
                dif = macd.Select(p => new object[] { p.Date, p.DIF }).ToArray(),
                dea = macd.Select(p => new object[] { p.Date, p.DEA }).ToArray(),
                macdvol = macdvol.Select(p => new object[] { p.Date, p.MACD }).ToArray(),
                difvol = macdvol.Select(p => new object[] { p.Date, p.DIF }).ToArray(),
                deavol = macdvol.Select(p => new object[] { p.Date, p.DEA }).ToArray(),
                ma5 = ma5.Select(p => new object[] { p.Date, p.Value }).ToArray(),
                ma30 = ma30.Select(p => new object[] { p.Date, p.Value }).ToArray(),
                ma60 = ma60.Select(p => new object[] { p.Date, p.Value }).ToArray(),
                ma120 = ma120.Select(p => new object[] { p.Date, p.Value }).ToArray(),
                code = kdata.Code,
                name = basic.name,
                bottom = bottom.Select(p => new object[] { p.Date, p.Value }).ToArray(),
                keyprices = keyprice(k, id, ktype)
            });
        }
示例#2
0
        public void basics()
        {
            var db                  = new Db.db();
            var stock_basics        = db.stock_basics().ToList();
            var suspended           = code_names(() => db.suspended());
            var terminated          = code_names(() => db.terminated());
            var st_classified       = code_names(() => db.st_classified());
            var hs300s              = code_names(() => db.hs300s());
            var sz50s               = code_names(() => db.sz50s());
            var sme_classified      = code_names(() => db.sme_classified());
            var gem_classified      = code_names(() => db.gem_classified());
            var concept_classified  = code_cnames(() => db.concept_classified());
            var industry_classified = code_cnames(() => db.industry_classified());
            var custom_classified   = code_cnames(() => db.custom_classified());
            var fenjib              = db.fenjib_classified();
            var privatefunds        = db.private_fund_classified();

            var basiscs = stock_basics.ToList();

            foreach (var stockbasic in stock_basics)
            {
                if (string.IsNullOrEmpty(stockbasic.code))
                {
                    log.WarnFormat("invalid code={0} | {1}", stockbasic.code, stockbasic.name);
                    continue;
                }
                stockbasic.assettype = assettypes.stock;
                stockbasic.nameabbr  = pinyin(stockbasic.name);

                if (suspended.ContainsKey(stockbasic.code))
                {
                    stockbasic.suspended = true;
                }
                if (terminated.ContainsKey(stockbasic.code))
                {
                    stockbasic.terminated = true;
                }
                if (st_classified.ContainsKey(stockbasic.code))
                {
                    stockbasic.st = true;
                }

                if (sme_classified.ContainsKey(stockbasic.code))
                {
                    stockbasic.addindex(index.zxb);
                }
                if (gem_classified.ContainsKey(stockbasic.code))
                {
                    stockbasic.addindex(index.cyb);
                }
                if (stockbasic.code.StartsWith("60"))
                {
                    stockbasic.addindex(index.sh);
                }
                if (stockbasic.code.StartsWith("00") || stockbasic.code.StartsWith("30"))
                {
                    stockbasic.addindex(index.sz);
                }
                if (hs300s.ContainsKey(stockbasic.code))
                {
                    stockbasic.addindex(index.hs300);
                }
                if (sz50s.ContainsKey(stockbasic.code))
                {
                    stockbasic.addindex(index.sz50);
                }

                if (concept_classified.ContainsKey(stockbasic.code))
                {
                    stockbasic.addsector(concept_classified[stockbasic.code]);
                }
                if (industry_classified.ContainsKey(stockbasic.code))
                {
                    stockbasic.addsector(industry_classified[stockbasic.code]);
                }
                if (custom_classified.ContainsKey(stockbasic.code))
                {
                    stockbasic.addsector(custom_classified[stockbasic.code]);
                }

                stockbasic.addsector(fenjib.Where(p => p.stock_code == stockbasic.code).Select(p => p.fund_code).Distinct().ToArray());
                //stockbasic.addsector(privatefunds.Where(p => p.stock_code == stockbasic.code).Select(p => p.fund_name).Distinct().ToArray());
            }

            basiscs.Add(new basics
            {
                code      = index.hs300,
                name      = "沪深300",
                nameabbr  = "hs300",
                assettype = assettypes.index
            });
            basiscs.Add(new basics
            {
                code      = index.sz50,
                name      = "上证50",
                nameabbr  = "sz50",
                assettype = assettypes.index
            });
            basiscs.Add(new basics
            {
                code      = index.sz,
                name      = "深圳成指",
                nameabbr  = "sz",
                assettype = assettypes.index
            });
            basiscs.Add(new basics
            {
                code      = index.sh,
                name      = "上证综指",
                nameabbr  = "sh",
                assettype = assettypes.index
            });
            basiscs.Add(new basics
            {
                code      = index.cyb,
                name      = "创业板指",
                nameabbr  = "cyb",
                assettype = assettypes.index
            });
            basiscs.Add(new basics
            {
                code      = index.zxb,
                name      = "中小板指",
                nameabbr  = "zxb",
                assettype = assettypes.index
            });

            var concepts = concept_classified
                           .Concat(custom_classified)
                           .SelectMany(p => p.Value)
                           .Where(p => !string.IsNullOrEmpty(p))
                           .Distinct()
                           .ToArray();

            foreach (var i in concepts)
            {
                basiscs.Add(new basics
                {
                    code      = i,
                    name      = i,
                    nameabbr  = pinyin(i),
                    assettype = assettypes.sector
                });
            }

            var industries = industry_classified
                             .SelectMany(p => p.Value)
                             .Where(p => !string.IsNullOrEmpty(p))
                             .Distinct()
                             .ToArray();

            foreach (var i in industries)
            {
                basiscs.Add(new basics
                {
                    code      = i,
                    name      = i,
                    nameabbr  = pinyin(i),
                    assettype = assettypes.sector
                });
            }

            foreach (var i in fenjib)
            {
                basiscs.Add(new basics
                {
                    code      = i.fund_code,
                    name      = i.fund_name,
                    nameabbr  = pinyin(i.fund_name),
                    assettype = assettypes.sector
                });
            }

            //foreach (var i in privatefunds)
            //{
            //    basiscs.Add(new basics
            //    {
            //        code = i.fund_name,
            //        name = i.fund_name,
            //        nameabbr = pinyin(i.fund_name),
            //        assettype = assettypes.sector
            //    });
            //}

            var indexdict = basiscs
                            .Where(p => p.assettype == assettypes.index)
                            .ToDictionary(p => p, p => basiscs
                                          .Where(p1 => p1.assettype == assettypes.stock)
                                          .Where(p1 => p1.belongtoindex(p.code))
                                          .ToArray());

            calc(indexdict);

            var sectordict = basiscs
                             .Where(p => p.assettype == assettypes.sector)
                             .ToDictionary(p => p, p => basiscs
                                           .Where(p1 => p1.assettype == assettypes.stock)
                                           .Where(p1 => p1.belongtosector(p.code))
                                           .ToArray());

            calc(sectordict);

            db.save(basiscs);
        }
示例#3
0
        public static dynamic[] hitkeyprices()
        {
            var db = new Db.db();

            var keyprices   = db.keyprices("D");
            var todayquotes = new kdatadb().ktoday();

            keyprices = keyprices
                        .OrderBy(p => p.Code)
                        .ThenByDescending(p => p.Date)
                        .Where(p => p.Flag == KeyPrice.Flags.lower)
                        .GroupBy(p => p.Code)
                        .Select(p => p.First())
                        .ToArray();

            var q = (from k in keyprices
                     join t in todayquotes on k.Code equals t.code
                     where k.Flag == KeyPrice.Flags.lower &&
                     Math.Abs((t.low / k.Price - 1) * 100d) <= 0.8 &&
                     t.changepercent >= 0.01 && t.changepercent <= 1.0 &&
                     Math.Abs((k.Date - DateTime.Today).TotalDays) >= 8
                     select new { k, t }
                     )
                    .ToArray()
                    .Where(p =>
            {
                var code = (string)p.t.code;
                var k    = new kdatadb().kdata(code, "D");
                if (k == null)
                {
                    return(false);
                }

                var low = (double)p.t.low;
                var N   = 8;
                for (var i = k.Count - 1; i > k.Count - N; --i)
                {
                    if (k[i].low < low)
                    {
                        return(false);
                    }
                }

                return(true);
            })
                    .Select(_ =>
            {
                var k = _.k;
                var t = _.t;

                dynamic d       = new ExpandoObject();
                d.date          = k.Date;
                d.cross         = Math.Abs((k.Date - DateTime.Today).TotalDays);
                d.price         = k.Price;
                d.distpercent   = (t.low / k.Price - 1) * 100;
                d.pe            = t.pe;
                d.code          = t.code;
                d.name          = t.name;
                d.trade         = t.trade;
                d.high          = t.high;
                d.low           = t.low;
                d.open          = t.open;
                d.close         = t.close;
                d.volume        = t.volume;
                d.changepercent = t.changepercent;
                d.turnoverratio = t.turnoverratio;
                d.pb            = t.pb;
                d.amount        = t.amount;
                d.mktcap        = t.mktcap;
                d.ts            = t.ts;

                return(d);
            });

            var r = q
                    .OrderBy(p => p.code)
                    .ThenByDescending(p => p.date)
                    .GroupBy(p => new { p.code })
                    .Select(p => p.First())
                    .OrderBy(p => p.cross)
                    .ThenByDescending(p => p.changepercent)
                    .ToArray();

            return(r);
        }