/// <summary> /// A slightly ore complicated date scheduler. /// </summary> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="rollsMetaSchedule"></param> /// <param name="backwardGeneration"></param> /// <param name="businessDayAdjustments"></param> /// <param name="businessCalendar"></param> /// <returns></returns> public static List <DateTime> GetAdjustedDates3(DateTime startDate, DateTime endDate, List <MetaScheduleItem> rollsMetaSchedule, bool backwardGeneration, BusinessDayAdjustments businessDayAdjustments, IBusinessCalendar businessCalendar) { var unadjustedDates = DatesMetaSchedule.GetUnadjustedDates3(startDate, endDate, rollsMetaSchedule, backwardGeneration); return(unadjustedDates.Select(date => AdjustedDateHelper.ToAdjustedDate(businessCalendar, date, businessDayAdjustments)).ToList()); }
///<summary> /// Gets the adjusted dates from a provided date schedule. ///</summary> ///<param name="metaScheduleDefinition"></param> ///<param name="startDate"></param> ///<param name="businessDayAdjustments"></param> ///<param name="businessCalendar"></param> ///<returns></returns> public static List <DateTime> GetAdjustedDates(List <Triplet <Period, Period, RollConventionEnum> > metaScheduleDefinition, DateTime startDate, BusinessDayAdjustments businessDayAdjustments, IBusinessCalendar businessCalendar) { var unadjustedDates = DatesMetaSchedule.GetUnadjustedDates(metaScheduleDefinition, startDate); return(unadjustedDates.Select(date => AdjustedDateHelper.ToAdjustedDate(businessCalendar, date, businessDayAdjustments)).ToList()); }
/// <summary> /// A simple date scheduler. /// </summary> /// <param name="startDate"></param> /// <param name="endDate"></param> /// <param name="interval"></param> /// <param name="rollConventionEnum"></param> /// <param name="backwardGeneration"></param> /// <param name="businessDayAdjustments"></param> /// <param name="businessCalendar"></param> /// <returns></returns> public static List <DateTime> GetAdjustedDates2(DateTime startDate, DateTime endDate, Period interval, RollConventionEnum rollConventionEnum, bool backwardGeneration, BusinessDayAdjustments businessDayAdjustments, IBusinessCalendar businessCalendar) { var unadjustedDates = DatesMetaSchedule.GetUnadjustedDates2(startDate, endDate, interval, rollConventionEnum, backwardGeneration); return(unadjustedDates.Select(date => AdjustedDateHelper.ToAdjustedDate(businessCalendar, date, businessDayAdjustments)).ToList()); }
/// <summary> /// Gets a dates schedule. /// </summary> /// <param name="metaScheduleDefinitionRange"></param> /// <param name="startDate"></param> /// <param name="calendar"></param> /// <param name="businessCentreAsString">This should not be blank.</param> /// <param name="businessDayAdjustment">This should not be blank.</param> /// <returns></returns> public static DateTime[] GetDatesSchedule(List <ThreeStringsRangeItem> metaScheduleDefinitionRange, DateTime startDate, IBusinessCalendar calendar, string businessCentreAsString, string businessDayAdjustment) { var metaScheduleDefinition = metaScheduleDefinitionRange.Select(item => new Triplet <Period, Period, RollConventionEnum>(PeriodHelper.Parse(item.Value1), PeriodHelper.Parse(item.Value2), RollConventionEnumHelper.Parse(item.Value3))).ToList(); List <DateTime> resultAsListOfDates; if (calendar == null) { resultAsListOfDates = DatesMetaSchedule.GetUnadjustedDates(metaScheduleDefinition, startDate); } if (String.IsNullOrEmpty(businessCentreAsString) | String.IsNullOrEmpty(businessDayAdjustment)) { resultAsListOfDates = DatesMetaSchedule.GetUnadjustedDates(metaScheduleDefinition, startDate); } else { var businessDayAdjustments = BusinessDayAdjustmentsHelper.Create(businessDayAdjustment, businessCentreAsString); resultAsListOfDates = GetAdjustedDates(metaScheduleDefinition, startDate, businessDayAdjustments, calendar); } var result = resultAsListOfDates.ToArray(); return(result); }
public void GetUnadjustedDates3Forward() { DateTime startDate = new DateTime(2008, 04, 10); DateTime endDate = new DateTime(2009, 04, 24); //Period interval = IntervalHelper.FromMonths(3); RollConventionEnum rollConventionEnum = RollConventionEnumHelper.Parse(startDate.Day.ToString()); List<MetaScheduleItem> rollsMetaSchedule = new List<MetaScheduleItem>(); MetaScheduleItem item1 = new MetaScheduleItem(); item1.Period = IntervalHelper.FromMonths(6); item1.RollFrequency = IntervalHelper.FromMonths(1); item1.RollConvention = rollConventionEnum; rollsMetaSchedule.Add(item1); MetaScheduleItem item2 = new MetaScheduleItem(); item2.Period = IntervalHelper.FromMonths(6); item2.RollFrequency = IntervalHelper.FromMonths(3); item2.RollConvention = rollConventionEnum; rollsMetaSchedule.Add(item2); List<DateTime> unadjustedDates = DatesMetaSchedule.GetUnadjustedDates3(startDate, endDate, rollsMetaSchedule, false); Debug.Print("Meta schedule:"); // Debug.Print(ParameterFormatter.FormatObject(ObjectToArrayOfPropertiesConverter.ConvertListToHorizontalArrayRange(rollsMetaSchedule))); Debug.Print("Start date: {0}", startDate); Debug.Print("End date: {0}", endDate); Debug.Print("Schedule:"); PrintListOfDates(unadjustedDates); }
public void GetUnadjustedDates() { DateTime startDate = DateTime.Today; Debug.Print("Start date: {0}", startDate); List<DateTime> unadjustedDates = DatesMetaSchedule.GetUnadjustedDates(DatesScheduleGeneratorTests.GetMetaScheduleDefinition(), startDate); PrintListOfDates(unadjustedDates); }
public void GetUnadjustedDates2Forward() { DateTime startDate = new DateTime(2008, 04, 10); DateTime endDate = new DateTime(2009, 04, 24); Period interval = IntervalHelper.FromMonths(3); RollConventionEnum rollConventionEnum = RollConventionEnumHelper.Parse(startDate.Day.ToString()); List<DateTime> unadjustedDates = DatesMetaSchedule.GetUnadjustedDates2(startDate, endDate, interval, rollConventionEnum, false); PrintListOfDates(unadjustedDates); }
public void GetUnadjustedDatesfromStartToEndDate() { DateTime startDate = DateTime.Today; DateTime endDate = new DateTime(startDate.Year + 15, startDate.Month, startDate.Day); Debug.Print("Start date: {0}", startDate); Debug.Print("End date: {0}", endDate); DateTime[] unadjustedDates = DatesMetaSchedule.GetUnadjustedDates(GetMetaScheduleDefinition2(), startDate, endDate, PeriodHelper.Parse("1Y"), RollConventionEnumHelper.Parse("17"), true); PrintListOfDates(new List<DateTime>(unadjustedDates)); }
///<summary> ///</summary> ///<param name="termsRange"></param> ///<param name="metaScheduleDefinitionRange"></param> ///<param name="paymentCalendar"></param> ///<returns></returns> public static List <AmortisingResultItem> GenerateCashflowSchedule(BillsSwapPricer2TermsRange termsRange, List <MetaScheduleRangeItem> metaScheduleDefinitionRange, IBusinessCalendar paymentCalendar) { RollConventionEnum rollConventionEnum = RollConventionEnumHelper.Parse(termsRange.RollDay); BusinessDayAdjustments businessDayAdjustments = BusinessDayAdjustmentsHelper.Create(termsRange.DateRollConvention, termsRange.Calendar); bool backwardGeneration = (termsRange.BuildDates.ToLower() == "backward"); List <DateTime> adjustedDatesResult; List <DateTime> unadjustedDatesResult; if (termsRange.RollFrequency.ToLower().Contains("custom")) { var rollsMetaSchedule = metaScheduleDefinitionRange.Select(item => new MetaScheduleItem { RollFrequency = PeriodHelper.Parse(item.RollFrequency), Period = PeriodHelper.Parse(item.Period), RollConvention = RollConventionEnumHelper.Parse(item.RollConvention) }).ToList(); unadjustedDatesResult = DatesMetaSchedule.GetUnadjustedDates3(termsRange.StartDate, termsRange.EndDate, rollsMetaSchedule, backwardGeneration); adjustedDatesResult = AdjustedDatesMetaSchedule.GetAdjustedDates3(termsRange.StartDate, termsRange.EndDate, rollsMetaSchedule, backwardGeneration, businessDayAdjustments, paymentCalendar); } else { Period interval = PeriodHelper.Parse(termsRange.RollFrequency); unadjustedDatesResult = DatesMetaSchedule.GetUnadjustedDates2(termsRange.StartDate, termsRange.EndDate, interval, rollConventionEnum, backwardGeneration); adjustedDatesResult = AdjustedDatesMetaSchedule.GetAdjustedDates2(termsRange.StartDate, termsRange.EndDate, interval, rollConventionEnum, backwardGeneration, businessDayAdjustments, paymentCalendar); } var result = new List <AmortisingResultItem>(); for (int i = 0; i < adjustedDatesResult.Count; i++) { DateTime adjustedTime = adjustedDatesResult[i]; DateTime unadjustedTime = unadjustedDatesResult[i]; var amortisingResultItem = new AmortisingResultItem { WasRolled = (adjustedTime == unadjustedTime) ? "No" : "Yes", RollDate = adjustedTime, AmortisingAmount = 0, OutstandingValue = termsRange.FaceValue }; result.Add(amortisingResultItem); } return(result); }