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));
    }
Example #3
0
        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));
        }
Example #4
0
        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));
        }
Example #6
0
    // 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;
    }