/// <summary> /// Applies the roll convention to date. /// </summary> /// <param name="rollConvention">The roll convention.</param> /// <param name="referenceDate">The reference date.</param> /// <returns></returns> public static DateTime ApplyRollConventionToDate(RollConventionEnum rollConvention, DateTime referenceDate) { int result = 0; int daysInRefDateMonth = DateTime.DaysInMonth(referenceDate.Year, referenceDate.Month); if (rollConvention >= RollConventionEnum.Item1 && rollConvention <= RollConventionEnum.Item30) { int.TryParse(rollConvention.ToString().Replace("Item", string.Empty), out result); } else if (rollConvention == RollConventionEnum.EOM) { result = daysInRefDateMonth; } else if (rollConvention == RollConventionEnum.NONE) { result = referenceDate.Day; } if (result == 0) { throw new ArgumentOutOfRangeException(nameof(rollConvention), rollConvention, "supplied value is not supported."); } if (result > daysInRefDateMonth) { result = daysInRefDateMonth; } return(new DateTime(referenceDate.Year, referenceDate.Month, result)); }
public void ShortFinalStubSpecified() { DateTime startDate = new DateTime(2007, 01, 5); DateTime endDate = new DateTime(2012, 01, 5); RollConventionEnum rollConvention = RollConventionEnum.Item26; CalculationPeriodFrequency periodFrequency = CalculationPeriodFrequencyHelper.Parse("3M", rollConvention.ToString()); DateTime firstRegularPeriodDate = new DateTime(2007, 1, 26); CalculationPeriodSchedule cps = new CalculationPeriodSchedule(); List <CalculationPeriod> unadjustedCalcPeriods = cps.GetUnadjustedCalculationDateSchedule(startDate, endDate, firstRegularPeriodDate, periodFrequency, StubPeriodTypeEnum.ShortFinal); List <DateTime> dates = CalculationPeriodHelper.GetCalculationPeriodsProperty <DateTime>(unadjustedCalcPeriods, "unadjustedStartDate"); Assert.AreEqual(unadjustedCalcPeriods.Count, 21); Assert.IsTrue(cps.HasFinalStub); Assert.IsTrue(cps.HasInitialStub); Assert.IsTrue(CalculationPeriodHelper.IsShortStub(unadjustedCalcPeriods[unadjustedCalcPeriods.Count - 1], cps.PeriodInterval)); }
public void ShortFinalStubSpecifiedFromTermination() { DateTime startDate = new DateTime(2007, 01, 5); DateTime endDate = new DateTime(2010, 01, 5); RollConventionEnum rollConvention = RollConventionEnum.Item12; CalculationPeriodFrequency periodFrequency = CalculationPeriodFrequencyHelper.Parse("3M", rollConvention.ToString()); Period periodInterval = CalculationPeriodHelper.CalculationPeriodFrequencyToInterval(periodFrequency); CalculationPeriodSchedule cps = new CalculationPeriodSchedule(); DateTime lastRegularPeriodEndDate = new DateTime(2009, 8, 12); List <CalculationPeriod> unadjustedCalcPeriods = cps.GetUnadjustedCalculationDateScheduleFromTermDate(startDate, endDate, periodInterval, lastRegularPeriodEndDate, rollConvention, StubPeriodTypeEnum.ShortFinal); Assert.AreEqual(unadjustedCalcPeriods.Count, 13); Assert.IsTrue(cps.HasFinalStub); Assert.IsTrue(cps.HasInitialStub); Assert.IsTrue(CalculationPeriodHelper.IsShortStub(unadjustedCalcPeriods[unadjustedCalcPeriods.Count - 1], cps.PeriodInterval)); }
public void RegularPeriodFrequencyUnadjustedDates() { // 5 year 3 month cash flow DateTime startDate = new DateTime(2007, 01, 5); RollConventionEnum rollConvention = RollConventionEnum.Item26; CalculationPeriodFrequency frequencyToMaturity = CalculationPeriodFrequencyHelper.Parse("5Y", rollConvention.ToString()); CalculationPeriodFrequency periodFrequency = CalculationPeriodFrequencyHelper.Parse("3M", rollConvention.ToString()); CalculationPeriodSchedule cps = new CalculationPeriodSchedule(); List <CalculationPeriod> unadjustedCalcPeriods = cps.GetUnadjustedCalculationDateSchedule(startDate, frequencyToMaturity, periodFrequency); List <DateTime> dates = CalculationPeriodHelper.GetCalculationPeriodsProperty <DateTime>(unadjustedCalcPeriods, "unadjustedStartDate"); Assert.AreEqual(unadjustedCalcPeriods.Count, 20); Assert.IsFalse(cps.HasInitialStub); Assert.IsFalse(cps.HasFinalStub); }
public void LongFinalStubSpecifiedButNoStub() { DateTime startDate = new DateTime(2007, 01, 5); DateTime endDate = new DateTime(2012, 01, 5); RollConventionEnum rollConvention = RollConventionEnum.Item5; CalculationPeriodFrequency periodFrequency = CalculationPeriodFrequencyHelper.Parse("3M", rollConvention.ToString()); CalculationPeriodSchedule cps = new CalculationPeriodSchedule(); Period periodInterval = CalculationPeriodHelper.CalculationPeriodFrequencyToInterval(periodFrequency); List <CalculationPeriod> unadjustedCalcPeriods = cps.GetUnadjustedCalculationDateSchedule(startDate, endDate, periodInterval, rollConvention, StubPeriodTypeEnum.LongFinal); Assert.AreEqual(unadjustedCalcPeriods.Count, 20); Assert.IsFalse(cps.HasFinalStub); Assert.IsFalse(cps.HasInitialStub); }