public void XirrTest_2() { var values = new List <double> { -100, 20, 40, 25, 8, 15 }; var dates = new List <DateTime> { new DateTime(2016, 01, 01), new DateTime(2016, 04, 01), new DateTime(2016, 10, 01), new DateTime(2017, 02, 01), new DateTime(2017, 03, 01), new DateTime(2017, 06, 01) }; var result = XirrImpl.GetXirr(values, dates); var retVal = Math.Round(result.Result, 4); Assert.AreEqual(0.0944, retVal); }
public void XirrTest_3() { var values = new List <double> { -10000, 2750, 4250, 3250, 2750 }; var dates = new List <DateTime> { new DateTime(2008, 01, 01), new DateTime(2008, 03, 01), new DateTime(2008, 10, 30), new DateTime(2009, 02, 15), new DateTime(2009, 04, 01) }; var result = XirrImpl.GetXirr(values, dates, 0.1); var retVal = Math.Round(result.Result, 4); Assert.AreEqual(0.3734, retVal); }
public override CompileResult Execute(IEnumerable <FunctionArgument> arguments, ParsingContext context) { ValidateArguments(arguments, 2); var values = ArgsToDoubleEnumerable(new List <FunctionArgument> { arguments.ElementAt(0) }, context).Select(x => (double)x); var dates = ArgsToDoubleEnumerable(new List <FunctionArgument> { arguments.ElementAt(1) }, context).Select(x => System.DateTime.FromOADate(x)); var guess = 0.1; if (arguments.Count() > 2) { guess = ArgToDecimal(arguments, 2); } var result = XirrImpl.GetXirr(values, dates, guess); if (result.HasError) { return(CreateResult(result.ExcelErrorType)); } return(CreateResult(result.Result, DataType.Decimal)); }