public void GetRocWithSma() { int lookbackPeriod = 20; int smaPeriod = 5; List <RocResult> results = Indicator.GetRoc(history, lookbackPeriod, smaPeriod).ToList(); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count); Assert.AreEqual(502 - lookbackPeriod, results.Where(x => x.Roc != null).Count()); Assert.AreEqual(478, results.Where(x => x.Sma != null).Count()); // sample values RocResult r1 = results[501]; Assert.AreEqual(-8.2482m, Math.Round((decimal)r1.Roc, 4)); Assert.AreEqual(-8.4828m, Math.Round((decimal)r1.Sma, 4)); RocResult r2 = results[29]; Assert.AreEqual(3.2936m, Math.Round((decimal)r2.Roc, 4)); Assert.AreEqual(2.1558m, Math.Round((decimal)r2.Sma, 4)); }
public void WithSma() { int lookbackPeriods = 20; int smaPeriods = 5; List <RocResult> results = Indicator.GetRoc(quotes, lookbackPeriods, smaPeriods) .ToList(); // assertions // proper quantities // should always be the same number of results as there is quotes Assert.AreEqual(502, results.Count); Assert.AreEqual(482, results.Where(x => x.Roc != null).Count()); Assert.AreEqual(478, results.Where(x => x.RocSma != null).Count()); // sample values RocResult r1 = results[29]; Assert.AreEqual(3.2936, Math.Round((double)r1.Roc, 4)); Assert.AreEqual(2.1558, Math.Round((double)r1.RocSma, 4)); RocResult r2 = results[501]; Assert.AreEqual(-8.2482, Math.Round((double)r2.Roc, 4)); Assert.AreEqual(-8.4828, Math.Round((double)r2.RocSma, 4)); }
public void Standard() { int lookbackPeriod = 20; List <RocResult> results = Indicator.GetRoc(history, lookbackPeriod) .ToList(); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count); Assert.AreEqual(482, results.Where(x => x.Roc != null).Count()); Assert.AreEqual(false, results.Any(x => x.RocSma != null)); // sample values RocResult r1 = results[249]; Assert.AreEqual(2.4827m, Math.Round((decimal)r1.Roc, 4)); Assert.AreEqual(null, r1.RocSma); RocResult r2 = results[501]; Assert.AreEqual(-8.2482m, Math.Round((decimal)r2.Roc, 4)); Assert.AreEqual(null, r2.RocSma); }
public void Removed() { List <RocResult> results = quotes.GetRoc(20) .RemoveWarmupPeriods() .ToList(); // assertions Assert.AreEqual(502 - 20, results.Count); RocResult last = results.LastOrDefault(); Assert.AreEqual(-8.2482, Math.Round((double)last.Roc, 4)); Assert.AreEqual(null, last.RocSma); }
// internals private static List <PmoResult> CalcPmoRocEma <TQuote>( IEnumerable <TQuote> quotes, int timePeriods) where TQuote : IQuote { // initialize double smoothingMultiplier = 2d / timePeriods; double? lastRocEma = null; List <RocResult> roc = GetRoc(quotes, 1).ToList(); List <PmoResult> results = new(); int startIndex = timePeriods + 1; for (int i = 0; i < roc.Count; i++) { RocResult r = roc[i]; int index = i + 1; PmoResult result = new() { Date = r.Date }; if (index > startIndex) { result.RocEma = (r.Roc * smoothingMultiplier) + (lastRocEma * (1 - smoothingMultiplier)); } else if (index == startIndex) { double?sumRoc = 0; for (int p = index - timePeriods; p < index; p++) { RocResult d = roc[p]; sumRoc += d.Roc; } result.RocEma = sumRoc / timePeriods; } lastRocEma = result.RocEma; result.RocEma *= 10; results.Add(result); } return(results); }
public void GetRocTest() { int lookbackPeriod = 20; IEnumerable <RocResult> results = Indicator.GetRoc(history, lookbackPeriod); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count()); Assert.AreEqual(502 - lookbackPeriod, results.Where(x => x.Roc != null).Count()); // sample value RocResult r = results.Where(x => x.Index == 502).FirstOrDefault(); Assert.AreEqual(-8.2482m, Math.Round((decimal)r.Roc, 4)); }
public void GetRocTest() { int lookbackPeriod = 20; IEnumerable <RocResult> results = Indicator.GetRoc(history, lookbackPeriod); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count()); Assert.AreEqual(502 - lookbackPeriod, results.Where(x => x.Roc != null).Count()); // sample value RocResult r = results.Where(x => x.Date == DateTime.ParseExact("12/31/2018", "MM/dd/yyyy", null)).FirstOrDefault(); Assert.AreEqual((decimal) - 8.2482, Math.Round((decimal)r.Roc, 4)); }
public void Standard() { List <RocResult> results = quotes.GetRoc(20).ToList(); // assertions // proper quantities // should always be the same number of results as there is quotes Assert.AreEqual(502, results.Count); Assert.AreEqual(482, results.Where(x => x.Roc != null).Count()); Assert.AreEqual(false, results.Any(x => x.RocSma != null)); // sample values RocResult r1 = results[249]; Assert.AreEqual(2.4827, Math.Round((double)r1.Roc, 4)); Assert.AreEqual(null, r1.RocSma); RocResult r2 = results[501]; Assert.AreEqual(-8.2482, Math.Round((double)r2.Roc, 4)); Assert.AreEqual(null, r2.RocSma); }
public void GetRocTest() { int lookbackPeriod = 20; IEnumerable <RocResult> results = Indicator.GetRoc(history, lookbackPeriod); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count()); Assert.AreEqual(482, results.Where(x => x.Roc != null).Count()); Assert.AreEqual(false, results.Any(x => x.Sma != null)); // sample values RocResult r1 = results.Where(x => x.Index == 502).FirstOrDefault(); Assert.AreEqual(-8.2482m, Math.Round((decimal)r1.Roc, 4)); Assert.AreEqual(null, r1.Sma); RocResult r2 = results.Where(x => x.Index == 250).FirstOrDefault(); Assert.AreEqual(2.4827m, Math.Round((decimal)r2.Roc, 4)); Assert.AreEqual(null, r2.Sma); }