diff --git a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml index d174da7..c7fb440 100644 --- a/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml +++ b/.idea/.idea.EvoCalculator.Core/.idea/contentModel.xml @@ -57,7 +57,7 @@ - + diff --git a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml index 1d9e1ef..84d55be 100644 --- a/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml +++ b/.idea/.idea.EvoCalculator.Core/.idea/workspace.xml @@ -14,17 +14,12 @@ - - - - - - - - - + + + + @@ -78,7 +73,7 @@ - + @@ -122,7 +117,7 @@ @@ -248,10 +243,10 @@ - + - + @@ -260,10 +255,14 @@ - + - + + + + + diff --git a/EvoCalculator.Core.Calculation/FinanceFormulas/XIRR.cs b/EvoCalculator.Core.Calculation/FinanceFormulas/XIRR.cs index fac2e86..d5d40c6 100644 --- a/EvoCalculator.Core.Calculation/FinanceFormulas/XIRR.cs +++ b/EvoCalculator.Core.Calculation/FinanceFormulas/XIRR.cs @@ -6,17 +6,17 @@ namespace EvoCalculator.Core.Calculation.FinanceFormulas { public class XIRR : IFinanceFormula { - private FlowValue[] _values; + private Flow[] _flows; private double _guess = 0.1; - public XIRR(FlowValue[] values) + public XIRR(Flow[] flows) { - _values = values; + _flows = flows; } - public XIRR(FlowValue[] values, double guess) + public XIRR(Flow[] flows, double guess) { - _values = values; + _flows = flows; _guess = guess; } @@ -24,8 +24,8 @@ namespace EvoCalculator.Core.Calculation.FinanceFormulas { var x1 = 0.0; var x2 = _guess; - var f1 = new XNPV(_values, x1).GetResult(); - var f2 = new XNPV(_values, x2).GetResult(); + var f1 = new XNPV(_flows, x1).GetResult(); + var f2 = new XNPV(_flows, x2).GetResult(); for (var i = 0; i < 100; i++) { @@ -33,18 +33,18 @@ namespace EvoCalculator.Core.Calculation.FinanceFormulas if (Math.Abs(f1) < Math.Abs(f2)) { x1 += 1.6 * (x1 - x2); - f1 = new XNPV(_values, x1).GetResult(); + f1 = new XNPV(_flows, x1).GetResult(); } else { x2 += 1.6 * (x2 - x1); - f2 = new XNPV(_values, x2).GetResult(); + f2 = new XNPV(_flows, x2).GetResult(); } } if (f1 * f2 > 0.0) return 0; - var f = new XNPV(_values, x1).GetResult(); + var f = new XNPV(_flows, x1).GetResult(); var dx = 0.0; var rtb = 0.0; if (f < 0.0) @@ -62,7 +62,7 @@ namespace EvoCalculator.Core.Calculation.FinanceFormulas { dx *= 0.5; var xMid = rtb + dx; - var fMid = new XNPV(_values, xMid).GetResult(); + var fMid = new XNPV(_flows, xMid).GetResult(); if (fMid <= 0.0) rtb = xMid; if (Math.Abs(fMid) < 1.0e-6 || Math.Abs(dx) < 1.0e-6) return xMid; } diff --git a/EvoCalculator.Core.Calculation/FinanceFormulas/XNPV.cs b/EvoCalculator.Core.Calculation/FinanceFormulas/XNPV.cs index 98b225c..f537991 100644 --- a/EvoCalculator.Core.Calculation/FinanceFormulas/XNPV.cs +++ b/EvoCalculator.Core.Calculation/FinanceFormulas/XNPV.cs @@ -7,20 +7,20 @@ namespace EvoCalculator.Core.Calculation.FinanceFormulas { public class XNPV : IFinanceFormula { - private FlowValue[] _values; + private Flow[] _flows; private double _rate; - public XNPV(FlowValue[] values, double rate) + public XNPV(Flow[] flows, double rate) { - _values = values; + _flows = flows; _rate = rate; } public double GetResult() { - var firstDate = _values[0].Date; - return _values.Sum(flowValue => - flowValue.Flow / Math.Pow(1 + _rate, (flowValue.Date - firstDate).TotalDays / 365)); + var firstDate = _flows[0].Date; + return _flows.Sum(flow => + flow.Value / Math.Pow(1 + _rate, (flow.Date - firstDate).TotalDays / 365)); } } } \ No newline at end of file diff --git a/EvoCalculator.Core.Models/Calculation/Models/FlowValues.cs b/EvoCalculator.Core.Models/Calculation/Models/Flow.cs similarity index 68% rename from EvoCalculator.Core.Models/Calculation/Models/FlowValues.cs rename to EvoCalculator.Core.Models/Calculation/Models/Flow.cs index b4597c2..b5ac82b 100644 --- a/EvoCalculator.Core.Models/Calculation/Models/FlowValues.cs +++ b/EvoCalculator.Core.Models/Calculation/Models/Flow.cs @@ -2,9 +2,9 @@ namespace EvoCalculator.Core.Models.Calculation.Models { - public class FlowValue + public class Flow { public DateTime Date; - public double Flow; + public double Value; } } \ No newline at end of file diff --git a/EvoCalculator.Core.Tests/Calculation/Suite/FinanceFormulasTests.cs b/EvoCalculator.Core.Tests/Calculation/Suite/FinanceFormulasTests.cs index c29d2fb..eb258a9 100644 --- a/EvoCalculator.Core.Tests/Calculation/Suite/FinanceFormulasTests.cs +++ b/EvoCalculator.Core.Tests/Calculation/Suite/FinanceFormulasTests.cs @@ -11,72 +11,72 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite { private readonly ITestOutputHelper output; - readonly FlowValue[] _flowValues = + readonly Flow[] _flows = { - new FlowValue + new Flow { Date = new DateTime(2020, 09, 01), - Flow = -6500000 + Value = -6500000 }, - new FlowValue + new Flow { Date = new DateTime(2020, 09, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2020, 10, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2020, 11, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2020, 12, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2021, 1, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2021, 2, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2021, 3, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2021, 4, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2021, 5, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2021, 6, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2021, 7, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, - new FlowValue + new Flow { Date = new DateTime(2021, 8, 01), - Flow = 608944.445718643 + Value = 608944.445718643 }, }; @@ -88,7 +88,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite [Fact] public void XNPVTest() { - var XNPV = new XNPV(_flowValues.Skip(1).ToArray(), 0.3); + var XNPV = new XNPV(_flows.Skip(1).ToArray(), 0.3); var res = XNPV.GetResult(); output.WriteLine(res.ToString()); Assert.InRange(res, 6490000, 6590000); @@ -97,7 +97,7 @@ namespace EvoCalculator.Core.Tests.Calculation.Suite [Fact] public void XIRRTest() { - var XIRR = new XIRR(_flowValues); + var XIRR = new XIRR(_flows); var res = XIRR.GetResult(); output.WriteLine(res.ToString()); Assert.InRange(res, 0.29, 0.31);