Esempio n. 1
0
        public DEVIATION(Series <double> k, deviationtype type, int tolerance = 13)
        {
            var macd  = new MACD(k);
            var close = k.ToDictionary(p => p.Date, p => p.Value);

            if (type == deviationtype.底背离)
            {
                var cross_up = cross(macd, (i, next) => i.MACD < 0 && next.MACD >= 0);
                for (var i = 1; i < cross_up.Length; ++i)
                {
                    var c1       = cross_up[i].DIF - cross_up[i - 1].DIF;
                    var c2       = close[cross_up[i].Date] - close[cross_up[i - 1].Date];
                    var deviated = c1 >= 0 && c2 <= 0;
                    if (!deviated)
                    {
                        continue;
                    }

                    var units     = k.Count(p => p.Date >= cross_up[i - 1].Date && p.Date <= cross_up[i].Date);
                    var deviation = new deviation
                    {
                        d1    = cross_up[i - 1].Date,
                        d2    = cross_up[i].Date,
                        cross = units
                    };

                    if (deviation.cross > tolerance)
                    {
                        Add(deviation);
                    }
                }
            }
            else
            {
                var cross_down = cross(macd, (i, next) => i.MACD >= 0 && next.MACD < 0);
                for (var i = 1; i < cross_down.Length; ++i)
                {
                    var c1       = cross_down[i].DIF - cross_down[i - 1].DIF;
                    var c2       = close[cross_down[i].Date] - close[cross_down[i - 1].Date];
                    var deviated = c1 < 0 && c2 >= 0;
                    if (!deviated)
                    {
                        continue;
                    }

                    var units     = k.Count(p => p.Date >= cross_down[i - 1].Date && p.Date <= cross_down[i].Date);
                    var deviation = new deviation
                    {
                        d1    = cross_down[i - 1].Date,
                        d2    = cross_down[i].Date,
                        cross = units
                    };

                    if (deviation.cross > tolerance)
                    {
                        Add(deviation);
                    }
                }
            }
        }
Esempio n. 2
0
        private IEnumerable <string> deviations(string code, DateTime date, deviationtype type)
        {
            var ktypes = new[] { "D", "60", "30", "15", "5" };

            foreach (var ktype in ktypes)
            {
                var k = new kdatadb().kdata(code, ktype);
                if (k == null || !k.Any())
                {
                    continue;
                }

                var deviation = (deviation) new DEVIATION(k.close(), type);
                if (deviation != null && deviation.d2.Date == date.Date)
                {
                    yield return(ktype);
                }
            }
        }