public void GetKeltnerTest() { int emaPeriod = 20; int multiplier = 2; int atrPeriod = 10; int lookbackPeriod = Math.Max(emaPeriod, atrPeriod); IEnumerable <KeltnerResult> results = Indicator.GetKeltner(history, emaPeriod, multiplier, atrPeriod); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count()); Assert.AreEqual(502 - lookbackPeriod + 1, results.Where(x => x.Centerline != null).Count()); Assert.AreEqual(502 - lookbackPeriod + 1, results.Where(x => x.UpperBand != null).Count()); Assert.AreEqual(502 - lookbackPeriod + 1, results.Where(x => x.LowerBand != null).Count()); Assert.AreEqual(502 - lookbackPeriod + 1, results.Where(x => x.Width != null).Count()); // sample value KeltnerResult r1 = results.Where(x => x.Date == DateTime.Parse("12/31/2018")).FirstOrDefault(); Assert.AreEqual((decimal)262.1873, Math.Round((decimal)r1.UpperBand, 4)); Assert.AreEqual((decimal)249.3519, Math.Round((decimal)r1.Centerline, 4)); Assert.AreEqual((decimal)236.5165, Math.Round((decimal)r1.LowerBand, 4)); Assert.AreEqual((decimal)0.102950, Math.Round((decimal)r1.Width, 6)); KeltnerResult r2 = results.Where(x => x.Date == DateTime.Parse("12/06/2018")).FirstOrDefault(); Assert.AreEqual((decimal)275.4260, Math.Round((decimal)r2.UpperBand, 4)); Assert.AreEqual((decimal)265.4599, Math.Round((decimal)r2.Centerline, 4)); Assert.AreEqual((decimal)255.4938, Math.Round((decimal)r2.LowerBand, 4)); Assert.AreEqual((decimal)0.075085, Math.Round((decimal)r2.Width, 6)); }
public void Convergence() { foreach (int qty in convergeQuantities) { IEnumerable <Quote> h = History.GetHistoryLong(200 + qty); IEnumerable <KeltnerResult> r = Indicator.GetKeltner(h, 100); KeltnerResult l = r.LastOrDefault(); Console.WriteLine("KC-UP on {0:d} with {1,4} periods: {2:N8}", l.Date, h.Count(), l.UpperBand); } }
public void Keltner() { foreach (int qty in QuotesQuantities) { IEnumerable <Quote> quotes = TestData.GetLongish(qty); IEnumerable <KeltnerResult> r = quotes.GetKeltner(100); KeltnerResult l = r.LastOrDefault(); Console.WriteLine( "KC-UP on {0:d} with {1,4} periods: {2:N8}", l.Date, quotes.Count(), l.UpperBand); } }
public void Removed() { int emaPeriods = 20; int multiplier = 2; int atrPeriods = 10; int n = Math.Max(emaPeriods, atrPeriods); List <KeltnerResult> results = quotes.GetKeltner(emaPeriods, multiplier, atrPeriods) .RemoveWarmupPeriods() .ToList(); // assertions Assert.AreEqual(502 - Math.Max(2 * n, n + 100), results.Count); KeltnerResult last = results.LastOrDefault(); Assert.AreEqual(262.1873m, Math.Round((decimal)last.UpperBand, 4)); Assert.AreEqual(249.3519m, Math.Round((decimal)last.Centerline, 4)); Assert.AreEqual(236.5165m, Math.Round((decimal)last.LowerBand, 4)); Assert.AreEqual(0.102950m, Math.Round((decimal)last.Width, 6)); }
public void Standard() { int emaPeriod = 20; int multiplier = 2; int atrPeriod = 10; List <KeltnerResult> results = Indicator.GetKeltner(history, emaPeriod, multiplier, atrPeriod) .ToList(); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count); int warmupPeriod = 502 - Math.Max(emaPeriod, atrPeriod) + 1; Assert.AreEqual(warmupPeriod, results.Where(x => x.Centerline != null).Count()); Assert.AreEqual(warmupPeriod, results.Where(x => x.UpperBand != null).Count()); Assert.AreEqual(warmupPeriod, results.Where(x => x.LowerBand != null).Count()); Assert.AreEqual(warmupPeriod, results.Where(x => x.Width != null).Count()); // sample value KeltnerResult r1 = results[485]; Assert.AreEqual(275.4260m, Math.Round((decimal)r1.UpperBand, 4)); Assert.AreEqual(265.4599m, Math.Round((decimal)r1.Centerline, 4)); Assert.AreEqual(255.4938m, Math.Round((decimal)r1.LowerBand, 4)); Assert.AreEqual(0.075085m, Math.Round((decimal)r1.Width, 6)); KeltnerResult r2 = results[501]; Assert.AreEqual(262.1873m, Math.Round((decimal)r2.UpperBand, 4)); Assert.AreEqual(249.3519m, Math.Round((decimal)r2.Centerline, 4)); Assert.AreEqual(236.5165m, Math.Round((decimal)r2.LowerBand, 4)); Assert.AreEqual(0.102950m, Math.Round((decimal)r2.Width, 6)); }