Beispiel #1
0
        public static dynamic[] macd60()
        {
            var kas = new db().kanalytics("60")
                      .Where(p => { return(p.macd > 0 && p.dif <= 0.01); })
                      .ToArray();

            if (!kas.Any())
            {
                return(new dynamic[0]);
            }
            kas = new db().kanalytic(kas.Select(p => p.code).Distinct().ToArray(), "15")
                  .Where(p => { return(p.macd > 0); })
                  .ToArray();
            if (!kas.Any())
            {
                return(new dynamic[0]);
            }

            kas = kas
                  .AsParallel()
                  .Where(p =>
            {
                var k = new kdatadb().kdata(p.code, "15");
                if (k == null || !k.Any())
                {
                    return(false);
                }

                var deviation = (deviation) new DEVIATION(k.close(), deviationtype.底背离);
                return(deviation != null && deviation.d2.Date.Date >= p.date.Date);
            })
                  .ToArray();

            if (!kas.Any())
            {
                return(new dynamic[0]);
            }

            var codes  = kas.Select(p => p.code).Distinct().ToArray();
            var basics = new db().basics(codes);
            var ka     = new db().kanalytic(codes, "D");

            var q = (from k in ka
                     join t in basics on k.code equals t.code
                     where t.assettype == assettypes.stock && !t.terminated && !t.suspended && !t.st
                     select new { k, t }
                     )
                    .Select(_ =>
            {
                var k = _.k;
                var t = _.t;

                dynamic d = new ExpandoObject();
                d.date    = k.date;
                d.pe      = t.pe;
                d.code    = t.code;
                d.name    = t.name;
                d.high    = k.high;
                d.low     = k.low;
                d.open    = k.open;
                d.close   = k.close;
                d.volume  = k.volume;
                d.chg     = k.chg;
                d.pb      = t.pb;
                d.pe      = t.pe;
                return(d);
            });

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

            return(r);
        }