public void Standard() { List <CorrResult> results = quotes.GetCorrelation(otherQuotes, 20) .ToList(); // proper quantities // should always be the same number of results as there is quotes Assert.AreEqual(502, results.Count); Assert.AreEqual(483, results.Where(x => x.Correlation != null).Count()); // sample values CorrResult r18 = results[18]; Assert.IsNull(r18.Correlation); Assert.IsNull(r18.RSquared); CorrResult r19 = results[19]; Assert.AreEqual(0.6933, Math.Round((double)r19.Correlation, 4)); Assert.AreEqual(0.4806, Math.Round((double)r19.RSquared, 4)); CorrResult r257 = results[257]; Assert.AreEqual(-0.1347, Math.Round((double)r257.Correlation, 4)); Assert.AreEqual(0.0181, Math.Round((double)r257.RSquared, 4)); CorrResult r501 = results[501]; Assert.AreEqual(0.8460, Math.Round((double)r501.Correlation, 4)); Assert.AreEqual(0.7157, Math.Round((double)r501.RSquared, 4)); }
public void Removed() { List <CorrResult> results = quotes.GetCorrelation(otherQuotes, 20) .RemoveWarmupPeriods() .ToList(); // assertions Assert.AreEqual(502 - 19, results.Count); CorrResult last = results.LastOrDefault(); Assert.AreEqual(0.8460, Math.Round((double)last.Correlation, 4)); Assert.AreEqual(0.7157, Math.Round((double)last.RSquared, 4)); }
public void GetCorrelationTest() { int lookbackPeriod = 20; IEnumerable <CorrResult> results = Indicator.GetCorrelation(history, historyOther, 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 + 1, results.Where(x => x.Correlation != null).Count()); // sample value CorrResult r = results.Where(x => x.Index == 502).FirstOrDefault(); Assert.AreEqual(0.8460m, Math.Round((decimal)r.Correlation, 4)); Assert.AreEqual(0.7157m, Math.Round((decimal)r.RSquared, 4)); }
public void GetCorrelationTest() { int lookbackPeriod = 20; IEnumerable <CorrResult> results = Indicator.GetCorrelation(history, historyOther, 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 + 1, results.Where(x => x.Correlation != null).Count()); // sample value CorrResult result = results.Where(x => x.Date == DateTime.Parse("12/31/2018")).FirstOrDefault(); Assert.AreEqual((decimal)0.8460, Math.Round((decimal)result.Correlation, 4)); }
public void Standard() { int lookbackPeriod = 20; List <CorrResult> results = history.GetCorrelation(historyOther, lookbackPeriod) .ToList(); // assertions // proper quantities // should always be the same number of results as there is history Assert.AreEqual(502, results.Count); Assert.AreEqual(483, results.Where(x => x.Correlation != null).Count()); // sample value CorrResult r = results[501]; Assert.AreEqual(0.8460m, Math.Round((decimal)r.Correlation, 4)); Assert.AreEqual(0.7157m, Math.Round((decimal)r.RSquared, 4)); }
// calculate correlation private static void CalcCorrelation( this CorrResult r, double[] dataA, double[] dataB) { int length = dataA.Length; double sumA = 0; double sumB = 0; double sumA2 = 0; double sumB2 = 0; double sumAB = 0; for (int i = 0; i < length; i++) { double a = dataA[i]; double b = dataB[i]; sumA += a; sumB += b; sumA2 += a * a; sumB2 += b * b; sumAB += a * b; } double avgA = sumA / length; double avgB = sumB / length; double avgA2 = sumA2 / length; double avgB2 = sumB2 / length; double avgAB = sumAB / length; r.VarianceA = avgA2 - (avgA * avgA); r.VarianceB = avgB2 - (avgB * avgB); r.Covariance = avgAB - (avgA * avgB); double divisor = Math.Sqrt((double)(r.VarianceA * r.VarianceB)); r.Correlation = (divisor == 0) ? null : r.Covariance / divisor; r.RSquared = r.Correlation * r.Correlation; }