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); }