Example #1
0
        public static KeyPrice[] keyprice(string code, string ktype)
        {
            var d      = new kdatadb().kdata(code, ktype);
            var peak_h = new PEAK(d, PEAK_TYPE.high);
            var peak_l = new PEAK(d, PEAK_TYPE.low);
            //var peak_h_volume = new PEAK(d, k => k.volume, PEAK_TYPE.high);
            //var peak_l_volume = new PEAK(d, k => k.volume, PEAK_TYPE.low);

            var keyprices = d.Select(p =>
            {
                var h = peak_h[p.date];
                var l = peak_l[p.date];
                //var h_volume = peak_h_volume[p.date];
                //var l_volume = peak_l_volume[p.date];
                //if (h > 0 && h_volume > 0) return KeyPrice.high(code, p.date, h, true);
                //else if (l > 0 && l_volume > 0) return KeyPrice.low(code, p.date, l, true);
                if (h > 0)
                {
                    return(KeyPrice.high(code, p.date, h, true));
                }
                else if (l > 0)
                {
                    return(KeyPrice.low(code, p.date, l, true));
                }
                return(null);
            })
                            .Where(p => p != null)
                            .ToArray();

            return(keyprices);
        }
Example #2
0
        public BOTTOM(kdata data)
        {
            var macd  = new MACD(data.close());
            var lows  = new PEAK(data, PEAK_TYPE.low).Select(p => new { p.Date, p.Value, type = PEAK_TYPE.low }).ToArray();
            var highs = new PEAK(data, PEAK_TYPE.high).Select(p => new { p.Date, p.Value, type = PEAK_TYPE.high }).ToArray();
            var peaks = lows.Concat(highs).OrderBy(p => p.Date).ToArray();

            for (var i = 0; i < peaks.Length - 3; ++i)
            {
                var a = peaks[i];
                var b = peaks[i + 1];
                var c = peaks[i + 2];
                var d = peaks[i + 3];

                if (a.type == PEAK_TYPE.low &&
                    b.type == PEAK_TYPE.high &&
                    c.type == PEAK_TYPE.low &&
                    d.type == PEAK_TYPE.high &&
                    b.Value > a.Value &&
                    c.Value < b.Value &&
                    c.Value >= a.Value &&
                    d.Value > b.Value)
                {
                    //var next = macd.Where(p => p.Date > d.Date).ToArray();
                    //for(var k = 2; k < next.Length; ++k)
                    //{
                    //    if (next[k].DIF < 0 &&
                    //        next[k - 1].DIF < 0 &&
                    //        next[k - 2].DIF < 0 &&
                    //        next[k].DIF > next[k - 1].DIF &&
                    //        next[k].DIF > next[k - 2].DIF)
                    //    {
                    //        var v = data.FirstOrDefault(p=>p.date == next[k].Date);
                    //        if (v != null)
                    //        {
                    //            if (!this.Any(p => p.Date == next[k].Date))
                    //            {
                    //                Add(next[k].Date, v.high);
                    //            }
                    //        }
                    //        break;
                    //    }
                    //}
                    var next = macd.cross_gold().Where(p => p.Date > d.Date).ToArray();
                    if (next.Any())
                    {
                        Add(next.First().Date, 0);
                    }
                }
            }
        }