Example #1
0
    public void Removed()
    {
        List <BetaResult> results = Indicator.GetBeta(quotes, otherQuotes, 20)
                                    .RemoveWarmupPeriods()
                                    .ToList();

        // assertions
        Assert.AreEqual(502 - 19, results.Count);

        BetaResult last = results.LastOrDefault();

        Assert.AreEqual(1.6759, Math.Round((double)last.Beta, 4));
    }
Example #2
0
    public void All()
    {
        List <BetaResult> results = Indicator
                                    .GetBeta(quotes, otherQuotes, 20, BetaType.All)
                                    .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.Beta != null).Count());
        Assert.AreEqual(482, results.Where(x => x.BetaUp != null).Count());
        Assert.AreEqual(482, results.Where(x => x.BetaDown != null).Count());

        // sample values
        BetaResult r19 = results[19];

        Assert.IsNull(r19.Beta);
        Assert.IsNull(r19.BetaUp);
        Assert.IsNull(r19.BetaDown);
        Assert.IsNull(r19.Ratio);
        Assert.IsNull(r19.Convexity);

        BetaResult r20 = results[20];

        Assert.AreEqual(1.5139, Math.Round((double)r20.Beta, 4));
        Assert.AreEqual(1.8007, Math.Round((double)r20.BetaUp, 4));
        Assert.AreEqual(0.3292, Math.Round((double)r20.BetaDown, 4));
        Assert.AreEqual(5.4693, Math.Round((double)r20.Ratio, 4));
        Assert.AreEqual(2.1652, Math.Round((double)r20.Convexity, 4));
        Assert.AreEqual(-0.010678, Math.Round((double)r20.ReturnsEval, 6));
        Assert.AreEqual(0.000419, Math.Round((double)r20.ReturnsMrkt, 6));

        BetaResult r249 = results[249];

        Assert.AreEqual(1.9200, Math.Round((double)r249.Beta, 4));
        Assert.AreEqual(-1.2289, Math.Round((double)r249.BetaUp, 4));
        Assert.AreEqual(-0.3956, Math.Round((double)r249.BetaDown, 4));
        Assert.AreEqual(3.1066, Math.Round((double)r249.Ratio, 4));
        Assert.AreEqual(0.6944, Math.Round((double)r249.Convexity, 4));

        BetaResult r501 = results[501];

        Assert.AreEqual(1.5123, Math.Round((double)r501.Beta, 4));
        Assert.AreEqual(2.0721, Math.Round((double)r501.BetaUp, 4));
        Assert.AreEqual(1.5908, Math.Round((double)r501.BetaDown, 4));
        Assert.AreEqual(1.3026, Math.Round((double)r501.Ratio, 4));
        Assert.AreEqual(0.2316, Math.Round((double)r501.Convexity, 4));
    }
Example #3
0
    public void All()
    {
        List <BetaResult> results = Indicator
                                    .GetBeta(quotes, otherQuotes, 20, BetaType.All)
                                    .ToList();

        // assertions

        // 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.Beta != null).Count());
        Assert.AreEqual(482, results.Where(x => x.BetaUp != null).Count());
        Assert.AreEqual(482, results.Where(x => x.BetaDown != null).Count());

        // sample values
        BetaResult r19 = results[19];

        Assert.AreEqual(7.5476, Math.Round((double)r19.Beta, 4));
        Assert.IsNull(r19.BetaUp);
        Assert.IsNull(r19.BetaDown);
        Assert.IsNull(r19.Ratio);
        Assert.IsNull(r19.Convexity);

        BetaResult r20 = results[20];

        Assert.AreEqual(6.7488, Math.Round((double)r20.Beta, 4));
        Assert.AreEqual(8.2407, Math.Round((double)r20.BetaUp, 4));
        Assert.AreEqual(5.9296, Math.Round((double)r20.BetaDown, 4));
        Assert.AreEqual(1.3898, Math.Round((double)r20.Ratio, 4));
        Assert.AreEqual(5.3415, Math.Round((double)r20.Convexity, 4));

        BetaResult r249 = results[249];

        Assert.AreEqual(3.5528, Math.Round((double)r249.Beta, 4));
        Assert.AreEqual(3.1061, Math.Round((double)r249.BetaUp, 4));
        Assert.AreEqual(4.0684, Math.Round((double)r249.BetaDown, 4));
        Assert.AreEqual(0.7635, Math.Round((double)r249.Ratio, 4));
        Assert.AreEqual(0.9260, Math.Round((double)r249.Convexity, 4));

        BetaResult r501 = results[501];

        Assert.AreEqual(1.6759, Math.Round((double)r501.Beta, 4));
        Assert.AreEqual(1.2838, Math.Round((double)r501.BetaUp, 4));
        Assert.AreEqual(2.1034, Math.Round((double)r501.BetaDown, 4));
        Assert.AreEqual(0.6104, Math.Round((double)r501.Ratio, 4));
        Assert.AreEqual(0.6717, Math.Round((double)r501.Convexity, 4));
    }
Example #4
0
        public void Standard()
        {
            List <BetaResult> results = Indicator.GetBeta(history, historyOther, 20)
                                        .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.Beta != null).Count());

            // sample value
            BetaResult r = results[501];

            Assert.AreEqual(1.6759m, Math.Round((decimal)r.Beta, 4));
        }
Example #5
0
        public void GetBetaTest()
        {
            int lookbackPeriod = 20;
            IEnumerable <BetaResult> results = Indicator.GetBeta(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.Beta != null).Count());

            // sample value
            BetaResult r = results.Where(x => x.Index == 502).FirstOrDefault();

            Assert.AreEqual(1.6759m, Math.Round((decimal)r.Beta, 4));
        }
Example #6
0
        public void GetBetaTest()
        {
            int lookbackPeriod = 20;
            IEnumerable <BetaResult> results = Indicator.GetBeta(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.Beta != null).Count());

            // sample value
            BetaResult r = results.Where(x => x.Date == DateTime.ParseExact("12/31/2018", "MM/dd/yyyy", null)).FirstOrDefault();

            Assert.AreEqual((decimal)1.6759, Math.Round((decimal)r.Beta, 4));
        }
Example #7
0
        public void SameSame()
        {
            // Beta should be 1 if evaluating against self
            List <BetaResult> results = Indicator.GetBeta(history, history, 20)
                                        .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.Beta != null).Count());

            // sample value
            BetaResult r = results[501];

            Assert.AreEqual(1, Math.Round((decimal)r.Beta, 4));
        }
Example #8
0
    public void Down()
    {
        List <BetaResult> results = Indicator
                                    .GetBeta(quotes, otherQuotes, 20, BetaType.Down)
                                    .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.BetaDown != null).Count());

        // sample value
        BetaResult r = results[501];

        Assert.AreEqual(2.1034, Math.Round((double)r.BetaDown, 4));
    }
Example #9
0
        public void GetBetaSameTest()
        {
            // Beta should be 1 if evaluating against self
            int lookbackPeriod = 20;
            IEnumerable <BetaResult> results = Indicator.GetBeta(history, 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 + 1, results.Where(x => x.Beta != null).Count());

            // sample value
            BetaResult r = results.Where(x => x.Date == DateTime.Parse("12/31/2018")).FirstOrDefault();

            Assert.AreEqual(1, Math.Round((decimal)r.Beta, 4));
        }
Example #10
0
    // calculate beta
    private static void CalcBeta(
        this BetaResult r,
        int index,
        int lookbackPeriods,
        List <BasicD> bdListMrkt,
        List <BasicD> bdListEval,
        BetaType type)
    {
        // note: BetaType.All is ineligible for this method

        // initialize
        CorrResult c = new();

        List <double> dataA = new(lookbackPeriods);
        List <double> dataB = new(lookbackPeriods);

        for (int p = index - lookbackPeriods + 1; p <= index; p++)
        {
            double a = bdListMrkt[p].Value;
            double b = bdListEval[p].Value;

            if (type is BetaType.Standard)
            {
                dataA.Add(a);
                dataB.Add(b);
            }
            else if (type is BetaType.Down &&
                     a < bdListMrkt[p - 1].Value)
            {
                dataA.Add(a);
                dataB.Add(b);
            }
            else if (type is BetaType.Up &&
                     a > bdListMrkt[p - 1].Value)
            {
                dataA.Add(a);
                dataB.Add(b);
            }
        }

        if (dataA.Count > 0)
        {
            // calculate correlation, covariance, and variance
            c.CalcCorrelation(dataA.ToArray(), dataB.ToArray());

            // calculate beta
            if (c.Covariance != null && c.VarianceA != null && c.VarianceA != 0)
            {
                double?beta = c.Covariance / c.VarianceA;

                if (type == BetaType.Standard)
                {
                    r.Beta = beta;
                }
                else if (type == BetaType.Down)
                {
                    r.BetaDown = beta;
                }
                else if (type == BetaType.Up)
                {
                    r.BetaUp = beta;
                }
            }
        }
    }
Example #11
0
    // calculate beta
    private static void CalcBeta(
        this BetaResult r,
        int i,
        int lookbackPeriods,
        double[] mrktReturns,
        double[] evalReturns,
        BetaType type)
    {
        // note: BetaType.All is ineligible for this method

        // initialize
        CorrResult c = new();

        List <double> dataA = new(lookbackPeriods);
        List <double> dataB = new(lookbackPeriods);

        for (int p = i - lookbackPeriods + 1; p <= i; p++)
        {
            double a = mrktReturns[p];
            double b = evalReturns[p];

            if (type is BetaType.Standard)
            {
                dataA.Add(a);
                dataB.Add(b);
            }
            else if (type is BetaType.Down && a < 0)
            {
                dataA.Add(a);
                dataB.Add(b);
            }
            else if (type is BetaType.Up && a > 0)
            {
                dataA.Add(a);
                dataB.Add(b);
            }
        }

        if (dataA.Count > 0)
        {
            // calculate correlation, covariance, and variance
            c.CalcCorrelation(dataA.ToArray(), dataB.ToArray());

            // calculate beta
            if (c.Covariance != null && c.VarianceA != null && c.VarianceA != 0)
            {
                double?beta = c.Covariance / c.VarianceA;

                if (type == BetaType.Standard)
                {
                    r.Beta = beta;
                }
                else if (type == BetaType.Down)
                {
                    r.BetaDown = beta;
                }
                else if (type == BetaType.Up)
                {
                    r.BetaUp = beta;
                }
            }
        }
    }