public Coupbase(FinancialDay settlement, FinancialDay maturity, int frequency, DayCountBasis basis) { Settlement = settlement; Maturity = maturity; Frequency = frequency; Basis = basis; }
public void Should_OrderBy_YearFirst() { FinancialDay day2 = Calendar.GetDayForDate(new DateTime(2000, 1, 1)); FinancialDay day1 = Calendar.GetDayForDate(new DateTime(1999, 12, 1)); Assert.AreEqual(day1, Calendar.Days.ElementAt(0)); Assert.AreEqual(day2, Calendar.Days.ElementAt(1)); }
public void Should_EndWithStatementBalance_When_StartOfDay() { FinancialDay day = Tester.GetToday(); decimal balance = 1000; day.AddStatement(new Statement(balance, AddWhen.StartOfDay)); Assert.AreEqual(balance, day.EndingBalance); }
public void Should_AddPreviousDay() { FinancialDay day1 = Calendar.GetDayForDate(new DateTime(2000, 1, 1)); FinancialDay day2 = Calendar.GetDayForDate(new DateTime(1999, 12, 1)); Assert.AreSame(day2, day1.PreviousDay); }
public void Should_Ignore_Time_Of_Day() { FinancialDay day1 = Calendar.GetDayForDate(new DateTime(2000, 1, 1, 12, 0, 0)); FinancialDay day2 = Calendar.GetDayForDate(new DateTime(2000, 1, 1, 12, 30, 0)); Assert.AreSame(day1, day2); Assert.AreEqual(1, Calendar.Days.Count()); }
public void Should_Not_Add_Day_If_It_Exists_Already() { FinancialDay day1 = Calendar.GetDayForDate(new DateTime(2000, 1, 1)); FinancialDay day2 = Calendar.GetDayForDate(new DateTime(2000, 1, 1)); Assert.AreSame(day1, day2); Assert.AreEqual(1, Calendar.Days.Count()); }
public static FinanceCalcResult <double> GetPrice(FinancialDay settlement, FinancialDay maturity, double rate, double yield, double redemption, int frequency, DayCountBasis basis = DayCountBasis.US_30_360) { var coupDaysResult = new CoupdaysImpl(settlement, maturity, frequency, basis).GetCoupdays(); if (coupDaysResult.HasError) { return(coupDaysResult); } var coupdaysNcResult = new CoupdaysncImpl(settlement, maturity, frequency, basis).Coupdaysnc(); if (coupdaysNcResult.HasError) { return(coupdaysNcResult); } var coupnumResult = new CoupnumImpl(settlement, maturity, frequency, basis).GetCoupnum(); if (coupnumResult.HasError) { return(new FinanceCalcResult <double>(coupnumResult.ExcelErrorType)); } var coupdaysbsResult = new CoupdaybsImpl(settlement, maturity, frequency, basis).Coupdaybs(); if (coupdaysbsResult.HasError) { return(new FinanceCalcResult <double>(coupdaysbsResult.ExcelErrorType)); } var E = coupDaysResult.Result; var DSC = coupdaysNcResult.Result; var N = coupnumResult.Result; var A = coupdaysbsResult.Result; var retVal = -1d; if (N > 1) { var part1 = redemption / System.Math.Pow(1d + (yield / frequency), N - 1d + (DSC / E)); var sum = 0d; for (var k = 1; k <= N; k++) { sum += (100 * (rate / frequency)) / System.Math.Pow(1 + yield / frequency, k - 1 + DSC / E); } retVal = part1 + sum - (100 * (rate / frequency) * (A / E)); } else { var DSR = E - A; var T1 = 100 * (rate / frequency) + redemption; var T2 = (yield / frequency) * (DSR / E) + 1; var T3 = 100 * (rate / frequency) * (A / E); retVal = T1 / T2 - T3; } return(new FinanceCalcResult <double>(retVal)); }
public void Should_AddNextDay() { FinancialDay day1 = Calendar.GetDayForDate(new DateTime(2000, 1, 1)); Assert.IsNull(day1.NextDay); FinancialDay day2 = Calendar.GetDayForDate(new DateTime(2000, 1, 2)); Assert.AreSame(day2, day1.NextDay); }
public void Should_StartWith_PreviousDays_EndingBalance_If_NoStatementsPresent() { FinancialDay day = Tester.GetToday(); decimal balance = 2000; day.PreviousDay = new MockBalance(null, balance).Object; Assert.AreEqual(balance, day.StartingBalance); }
public void Should_Statement_If_Statement_Is_EndOfDay() { FinancialDay day = Tester.GetToday(); decimal balance = 1000; day.AddStatement(new Statement(balance, AddWhen.EndOfDay)); Assert.AreEqual(balance, day.StartingBalance); }
public void Should_OrderBy_While_Inserting() { FinancialDay day1 = Calendar.GetDayForDate(new DateTime(2000, 1, 1)); FinancialDay day3 = Calendar.GetDayForDate(new DateTime(2000, 1, 3)); FinancialDay day2 = Calendar.GetDayForDate(new DateTime(2000, 1, 2)); Assert.AreEqual(day1, Calendar.Days.ElementAt(0)); Assert.AreEqual(day2, Calendar.Days.ElementAt(1)); Assert.AreEqual(day3, Calendar.Days.ElementAt(2)); }
public void Should_SubtractNegativeTransactionValue() { FinancialDay day = Tester.GetToday(); decimal expense = -500; day.AddTransaction(new MockTransaction() { Value = expense }.Object); Assert.AreEqual(expense, day.EndingBalance); }
public void Should_AddTransactionValue() { FinancialDay day = Tester.GetToday(); decimal income = 500; day.AddTransaction(new MockTransaction() { Value = income }.Object); Assert.AreEqual(income, day.EndingBalance); }
public DayWrapper(FinancialDay day) { Day = day; Statements = Day.Statement; Transactions = new ObservableCollection <ITransaction>(Day.TransactionCollection); Day.TransactionsChanged += Day_TransactionsChanged; RemoveStatementCommand = new RelayCommand <Statement>(RemoveStatement); RemoveTransactionCommand = new RelayCommand <ITransaction>(RemoveTransaction); }
public void Should_Replace_Previous_And_NextDays() { FinancialDay day1 = Calendar.GetDayForDate(new DateTime(2000, 1, 1)); FinancialDay day3 = Calendar.GetDayForDate(new DateTime(2000, 1, 3)); Assert.AreSame(day3, day1.NextDay); Assert.AreSame(day1, day3.PreviousDay); FinancialDay day2 = Calendar.GetDayForDate(new DateTime(2000, 1, 2)); Assert.AreSame(day2, day1.NextDay); Assert.AreSame(day2, day3.PreviousDay); }
public void Should_StartWith_StatementBalance_If_PreviousDay_HasNoStatement() { FinancialDay day = Tester.GetToday(); day.PreviousDay = new MockBalance(0, 500) { HasStatementOnLeft = false }.Object; decimal balance = 1000; day.AddStatement(new Statement(balance, AddWhen.EndOfDay)); Assert.AreEqual(1000, day.StartingBalance); }
public void Should_AddBalance_To_StartOfDayStatement() { FinancialDay day = Tester.GetToday(); decimal balance = 1000; day.AddStatement(new Statement(balance, AddWhen.StartOfDay)); decimal income = 500; day.AddTransaction(new MockTransaction() { Value = income }.Object); Assert.AreEqual(balance + income, day.EndingBalance); }
public void Should_EndWithStatementBalance_Over_Transactions_When_EndOfDay() { FinancialDay day = Tester.GetToday(); decimal balance = 1000; day.AddStatement(new Statement(balance, AddWhen.EndOfDay)); decimal income = 500; day.AddTransaction(new MockTransaction() { Value = income }.Object); Assert.AreEqual(balance, day.EndingBalance); }
public void Should_AddTransactions_To_PreviousDays_EndingBalance() { FinancialDay day = Tester.GetToday(); decimal balance = 2000; day.PreviousDay = new MockBalance(null, balance) { HasStatementOnLeft = true }.Object; Assert.AreEqual(balance, day.StartingBalance); decimal income = 500; day.AddTransaction(new MockTransaction() { Value = income }.Object); Assert.AreEqual(balance + income, day.EndingBalance); }
public void Should_EndWithZero() { FinancialDay day = Tester.GetToday(); Assert.AreEqual(0, day.EndingBalance); }
public CoupncdImpl(FinancialDay settlement, FinancialDay maturity, int frequency, DayCountBasis basis) : base(settlement, maturity, frequency, basis) { }
protected override FinanceCalcResult <double> ExecuteFunction(FinancialDay settlementDate, FinancialDay maturityDate, int frequency, DayCountBasis basis = DayCountBasis.US_30_360) { var impl = new CoupdaysImpl(settlementDate, maturityDate, frequency, basis); return(impl.GetCoupdays()); }
public void Should_StartAtZero() { FinancialDay day = Tester.GetToday(); Assert.AreEqual(0, day.StartingBalance); }
protected abstract FinanceCalcResult <T> ExecuteFunction(FinancialDay settlementDate, FinancialDay maturityDate, int frequency, DayCountBasis basis = DayCountBasis.US_30_360);
public CouponPeriod(FinancialDay start, FinancialDay end) { Start = start; End = end; }