Description
Description
Calling the AccrInt(issue, firstInterest, settlement, rate, par, frequency, basis, calcMethod = AccrIntCalcMethod.FromIssueToSettlement)
function with firstInterest <= settlement
results in an exception. This does not occur in Excel (tested 2007 and 2013).
Repro steps
-
Add DLL to a C# project
-
Execute following code:
using Excel.FinancialFunctions;
DateTime issue = DateTime.Parse("08/15/18");
DateTime firstInterest = DateTime.Parse("02/15/19");
DateTime settlement = DateTime.Parse("02/15/19");
double rate = 0.02125;
double par = 100;
Frequency freq = Frequency.SemiAnnual;
DayCountBasis basis = DayCountBasis.ActualActual;
var ret = Financial.AccrInt(issue, firstInterest, settlement, rate, par, freq, basis).ToString();
Console.WriteLine("Result of test is: " + ret.ToString());
This results in an exception.
Expected behavior
We expect this to match the output of the Excel function call =ACCRINT(08/15/18, 02/15/19, 02/15/19, 0.02125, 100, 2, 1)
, which evaluates to 1.0625
.
Actual behavior
We get the following exception:
System.Exception: firstInterest must be after settlement at Excel.FinancialFunctions.Bonds.calcAccrInt(DateTime issue, DateTime firstInterest, DateTime settlement, Double rate, Double par, Frequency frequency, DayCountBasis basis, AccrIntCalcMethod calcMethod)
Known workarounds
Comment out the line in bonds.fs
under let calcAccrInt issue firstInterest settlement rate par (frequency:Frequency) basis (calcMethod:AccrIntCalcMethod) =
that looks like this:
(firstInterest > settlement) |> elseThrow "firstInterest must be after settlement"
For example, it's currently (as of writing) at this line in the code.
I'm not sure how this might affect other functionality or expectations. Compiling and testing this change doesn't seem to break any of the ~200000 test cases on my machine though.
Related information
- Operating system: CentOS 7
- Branch: master
- .NET Core Version: 2.2
Thanks for authoring this fantastic library!