Beispiel #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)
            });
        }
        public analytic Get(string id, string ktype)
        {
            var result = new analytic();

            var k     = new kdatadb().kdata(id, ktype);
            var basic = new db().basics(id);

            result.istock  = basic.assettype == assettypes.stock;
            result.sectors = basic.getsectors();
            result.indexes = new db().basicnames(basic.getindexes()).ToArray();
            result.stocks  = basic.assettype == assettypes.sector
                            ? new db().basicnamesinsector(id).ToArray() : new basicname[0];
            result.code = basic.code;
            result.name = basic.name;
            result.PE   = basic.pe;

            if (k != null && k.Any())
            {
                var cur  = k.Last();
                var prev = k.Count > 1 ? k[k.Count - 2] : null;

                result.date   = cur.date.ToString("yyyy-MM-dd");
                result.high   = cur.high;
                result.low    = cur.close;
                result.open   = cur.open;
                result.close  = cur.close;
                result.change = prev == null ? (double?)null : ((cur.close - prev.close) / prev.close) * 100;

                var q = (quotation) new QUOTATION(k);
                if (q != null)
                {
                    result.state    = q.state.ToString();
                    result.position = q.position;
                    result.strategy = q.strategy;
                }

                var devs_up = deviations(id, cur.date.Date, deviationtype.底背离);
                if (devs_up.Any())
                {
                    result.deviation_up = string.Join(",", devs_up);
                }
                var devs_down = deviations(id, cur.date.Date, deviationtype.顶背离);
                if (devs_down.Any())
                {
                    result.deviation_down = string.Join(",", devs_down);
                }

                var ma    = new List <string>();
                var close = k.close();
                var ma5   = (double?)new MA(close, 5);
                var ma30  = (double?)new MA(close, 30);
                var ma55  = (double?)new MA(close, 55);
                var ma120 = (double?)new MA(close, 120);
                if (ma5 >= ma30 && ma30 >= ma55 && ma55 >= ma120)
                {
                    ma.Add("多头");
                }
                if (cur.close < ma5)
                {
                    ma.Add("↓↓5日线");
                }
                //if (cur.close < ma30)
                //    ma.Add("破30日生命线");
                //if (cur.close < ma55)
                //    ma.Add("破55日生命线");
                if (cur.close < ma120)
                {
                    ma.Add("↓↓半年线");
                }
                else
                {
                    ma.Add("半年线↑↑");
                }
                if (ma.Any())
                {
                    result.ma = string.Join(",", ma);
                }

                var cross = new MACD(k.volume()).cross();
                if (cross.Any())
                {
                    if (cross.Last().type == Interface.Data.crosstype.gold)
                    {
                        result.buyorsell = cross.Last().value.Date.Date == DateTime.Today ? "买入" : "持有";
                    }
                    else if (cross.Last().type == Interface.Data.crosstype.dead)
                    {
                        result.buyorsell = "卖出";
                    }
                }
            }

            var mainindex = basic.mainindex();

            if (!string.IsNullOrEmpty(mainindex))
            {
                var dindex = new kdatadb().kdata(mainindex, ktype);
                result.beta = new BETA(
                    new kdata(id, k.Where(p => p.date >= Trade.Cfg.Configuration.data.bearcrossbull).ToArray()),
                    new kdata(id, dindex.Where(p => p.date >= Trade.Cfg.Configuration.data.bearcrossbull).ToArray())).beta;
            }

            return(result);
        }