Beispiel #1
0
        public void CanCalculateLinkedReturnsWithCumReturnsMonthToEnd()
        {
            var janSP500returns = sp500
                                  .Where(r => r.EffectiveDate.Month == 1)
                                  .Select(r => r.TotalReturn)
                                  .ToList();

            var cumReturns = FinCalcs.ReturnsToMonthEnd(janSP500returns);

            var longCalc = FinCalcs.LinkedReturns(
                periodReturns: janSP500returns,
                startPeriod: 0,
                endPeriod: janSP500returns.Count() - 1);

            var quickCalc = FinCalcs.LinkedReturns(
                returnToMonthEnd: cumReturns,
                startingPeriodReturn: janSP500returns.ElementAt(0),
                startPeriod: 0,
                endPeriod: janSP500returns.Count() - 1
                );

            Assert.AreEqual(
                Math.Round(longCalc, 6),
                Math.Round(quickCalc, 6));
        }
Beispiel #2
0
        public void CanCalculateLinkedReturnsFromList()
        {
            var janreturnRU1000 =
                FinCalcs.LinkedReturns(
                    ru1000
                    .Where(r => r.EffectiveDate.Month == 1)
                    .Select(r => r.TotalReturn)
                    .ToList());

            Assert.AreEqual(-0.000101m, Math.Round(janreturnRU1000, 6));
        }
Beispiel #3
0
        public void CanCalculateReturnToMonthEnd()
        {
            var cumReturns = FinCalcs.ReturnsToMonthEnd(
                sp500
                .Where(r => r.EffectiveDate.Month == 1)
                .Select(r => r.TotalReturn)
                .ToList()
                );

            Assert.AreEqual(0.990074m, Math.Round(cumReturns.First(), 6));
            Assert.AreEqual(1m, Math.Round(cumReturns.Last()));
        }
Beispiel #4
0
        public void CanCalculatePartialMonthReturns()
        {
            var janreturnSP500 =
                FinCalcs.LinkedReturns(
                    sp500
                    .Where(
                        r => r.EffectiveDate.Month == 1 &&
                        r.EffectiveDate.Day >= 15
                        )
                    .Select(r => r.TotalReturn)
                    .ToList());

            Assert.AreEqual(-0.017554m, Math.Round(janreturnSP500, 6));
        }
Beispiel #5
0
        public void CanCalculateAfterTaxReturn()
        {
            decimal pretaxReturn = 0.05m;
            decimal returnAT     = FinCalcs.AfterTaxReturn(
                pretaxReturn: pretaxReturn,
                timeWeightedMarketValue: 1042m,
                realizedGainST: 10m,
                realizedGainLT: 50m,
                dividends: 10m,
                taxRateST: .35m,
                taxRateLT: .15m,
                divTaxRate: .15m
                );

            Assert.AreEqual(0.038004m, Math.Round(returnAT, 6));
        }
Beispiel #6
0
        public void CanGetTimeWeightedMarketValue()
        {
            decimal startingMarketValue = 1000m;
            var     flows = new List <Flow> {
                new Flow {
                    Type   = Flow.FlowType.Cash,
                    Amount = 100m, EffectiveDate = new DateTime(2020, 1, 9)
                },
                new Flow {
                    Type   = Flow.FlowType.Cash,
                    Amount = -100m, EffectiveDate = new DateTime(2020, 1, 22)
                },
            };
            var wgtMktVal = FinCalcs.TimeWeightedMarketValue(startingMarketValue, flows);

            Assert.AreEqual(1042.00m, Math.Round(wgtMktVal));
        }