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