Beispiel #1
0
 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());
        }
Beispiel #7
0
        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);
        }
Beispiel #14
0
        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);
        }
Beispiel #21
0
 public CoupncdImpl(FinancialDay settlement, FinancialDay maturity, int frequency, DayCountBasis basis) : base(settlement, maturity, frequency, basis)
 {
 }
Beispiel #22
0
        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);
        }
Beispiel #24
0
 protected abstract FinanceCalcResult <T> ExecuteFunction(FinancialDay settlementDate, FinancialDay maturityDate, int frequency, DayCountBasis basis = DayCountBasis.US_30_360);
Beispiel #25
0
 public CouponPeriod(FinancialDay start, FinancialDay end)
 {
     Start = start;
     End   = end;
 }