public jun_xian_dou_tout(kdata series) : base(series) { if (series.Any()) { var current = series.Last(); var ma5 = (double)new MA(series.close(), 5); var ma30 = (double)new MA(series.close(), 30); var ma55 = (double)new MA(series.close(), 55); var ma120 = (double)new MA(series.close(), 120); value = ma5 >= ma30 && ma30 >= ma55 && ma55 >= ma120; } }
public JAX(kdata data, int N, int M) { var MA = new MA(data.close(), N); var MA3 = new MA(data.series(d => (2 * d.close + d.low + d.high) / 4), M); var func = new Func <kdatapoint, double, double>((d, salt) => d.close / salt * (2 * d.close + d.low + d.high) / 4); var dmaPrevValue = 0d; for (int i = M - 1; i < data.Count; i++) { var curr = data[i]; if (MA[curr.date] == 0d) { continue; } var AA = Math.Abs((2 * curr.close + curr.high + curr.low) / 4 - MA[curr.date]) / MA[curr.date]; var dmaValue = (2 * curr.close + curr.low + curr.high) / 4; var jax = AA * dmaValue + (1 - AA) * dmaPrevValue; dmaPrevValue = jax; var MA1 = data.Skip(i + 1 - M).Take(M).Select(p => func(p, jax)).Average(); var MAAA = ((MA1 - jax) / jax) / 3.0d; var TMP = MA1 - MAAA * MA1; var J = TMP <= jax ? jax : 0d; var A = TMP; var X = TMP <= jax ? TMP : 0d; Add(new jax { Date = curr.date, JAX = Math.Round(jax, 2), J = Math.Round(J, 2), A = Math.Round(A, 2), X = Math.Round(X, 2) }); } }
void confirm(kdata k, crosstype confirmcross, PEAK_TYPE type) { var crosses = new MACD(k.close()).cross(); var list = new List <sValue <double> >(); DateTime?lastcrossdate = null; foreach (var peak in this) { var cross = crosses.FirstOrDefault(p => p.value.Date >= peak.Date); if (cross != null) { if (cross.type != confirmcross) { cross = crosses.FirstOrDefault(p => p.value.Date > peak.Date); } if (cross.type == confirmcross) { if (lastcrossdate == cross.value.Date) { switch (type) { case PEAK_TYPE.high: if (peak.Value > list[list.Count - 1].Value) { list.RemoveAt(list.Count - 1); list.Add(peak); } break; case PEAK_TYPE.low: if (peak.Value < list[list.Count - 1].Value) { list.RemoveAt(list.Count - 1); list.Add(peak); } break; } } else { list.Add(peak); } lastcrossdate = cross.value.Date; } } } Clear(); AddRange(list); }
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); } } } }
public QUOTATION(kdata data) { var close = data.close(); var macd = new MACD(close); var ma120 = new MA(close, 120); var q = (from a in data join m in macd on a.date equals m.Date select new { date = a.date, price = a, macd = m, ma120 = ma120[m.Date] }).ToArray(); for (var i = 0; i < q.Length; ++i) { var item = q[i]; var state = quotationstate.None; if (item.macd.MACD < 0) { state = quotationstate.调整; if (item.price.close >= item.price.open) { state = quotationstate.反弹; } } else { state = quotationstate.升; if (i - 1 > 0) { if (this[i - 1].state == quotationstate.回调 || this[i - 1].state == quotationstate.调整) { state = quotationstate.回升; } } if (item.price.close < item.price.open) { state = quotationstate.回调; } } Add(new quotation { date = item.date, state = state, position = judgePosition(state, item.price, item.ma120), strategy = judgeStrategy(state, item.price, item.ma120) }); } }