/// <summary> /// Prepare for valuation anything that will be shared between scenarios. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (BondLendingBase)fDeal; DateGenerationRequest dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresYearFractions = true, RequiresPrincipals = true, }; DateGenerationParams dateGenerationParams = new DateGenerationParams { EffectiveDate = deal.Issue_Date, MaturityDate = deal.Bond_Maturity_Date, CouponPeriod = deal.Coupon_Interval, FirstCouponDate = deal.First_Coupon_Date, PenultimateCouponDate = deal.Penultimate_Coupon_Date, AccrualCalendar = deal.GetHolidayCalendar(), AccrualDayCount = deal.Accrual_Day_Count, Principal = deal.Notional, Amortisation = deal.Amortisation }; DateGenerationResults dateGenerationResults = CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams); fPayDates = dateGenerationResults.PayDates; fAccruals = dateGenerationResults.AccrualYearFractions; fPrincipals = dateGenerationResults.Principals; fFinalPrincipal = dateGenerationResults.FinalPrincipal; }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.PreCloneInitialize(factors, baseTimes, resultsRequired); // Set up date lists DateGenerationRequest dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresAccrualDates = true, RequiresYearFractions = true }; DateGenerationParams dateGenerationParams = new DateGenerationParams { EffectiveDate = fDeal.Effective_Date, MaturityDate = fDeal.Maturity_Date, CouponPeriod = fDeal.Pay_Frequency, AccrualCalendar = fDeal.GetHolidayCalendar(), AccrualDayCount = fDeal.Accrual_Day_Count, }; DateGenerationResults dateGenerationResults = CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams); AccrualDates = dateGenerationResults.AccrualDates; PayDates = dateGenerationResults.PayDates; Accruals = dateGenerationResults.AccrualYearFractions; bool cashRequired = resultsRequired.CashRequired(); fT.AddPayDate(fDeal.Upfront_Date, cashRequired); fT.AddPayDates(PayDates, cashRequired); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList Factors, BaseTimeGrid BaseTimes, RequiredResults ResultsRequired) { base.PreCloneInitialize(Factors, BaseTimes, ResultsRequired); DealCreditLinkedNoteBase deal = (DealCreditLinkedNoteBase)fDeal; DateGenerationRequest dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresResetDates = true, RequiresYearFractions = true, }; DateGenerationParams dateGenerationParams = new DateGenerationParams { EffectiveDate = deal.Effective_Date, MaturityDate = deal.Maturity_Date, CouponPeriod = deal.Coupon_Interval, AccrualCalendar = deal.GetHolidayCalendar(), AccrualDayCount = deal.Accrual_Day_Count, }; DateGenerationResults dateGenerationResults = CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams); PayDates = dateGenerationResults.PayDates; Accruals = dateGenerationResults.AccrualYearFractions; ResetDates = dateGenerationResults.ResetDates; // Add to valuation time grid bool cashRequired = ResultsRequired.CashRequired(); fT.AddPayDate(deal.Effective_Date, cashRequired); fT.AddPayDates(PayDates, cashRequired); }
/// <summary> /// Returns a <see cref="DateGenerationResults"/> which contains bond futures option's dates and accrual information. /// </summary> /// <returns></returns> public DateGenerationResults GetDateGenerationResults(double issueDate, double maturityDate, double couponInterval, double firstCouponDate, double penultimateCouponDate, DayCount dayCount, IHolidayCalendar calendar) { var dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresYearFractions = true, }; var dateGenerationParams = new DateGenerationParams { EffectiveDate = issueDate, MaturityDate = maturityDate, CouponPeriod = couponInterval, FirstCouponDate = firstCouponDate, PenultimateCouponDate = penultimateCouponDate, AccrualCalendar = calendar, AccrualDayCount = dayCount }; return(CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams)); }
/// <summary> /// Generate CTD dates and set CTD coupon rate and conversion factor. /// </summary> protected void GenerateCTD(double issueDate, double maturityDate, double couponInterval, double firstCouponDate, double penultimateCouponDate, DayCount dayCount, IHolidayCalendar calendar, double couponRate, double conversionFactor) { if (conversionFactor <= 0.0) { return; // No CTD details or details invalid } BondFuture deal = (BondFuture)fDeal; if (deal.Settlement_Date >= maturityDate) { throw new AnalyticsException("Settlement date must be before cheapest-to-deliver maturity date."); } DateGenerationRequest dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresYearFractions = true, }; DateGenerationParams dateGenerationParams = new DateGenerationParams { EffectiveDate = issueDate, MaturityDate = maturityDate, CouponPeriod = couponInterval, FirstCouponDate = firstCouponDate, PenultimateCouponDate = penultimateCouponDate, AccrualCalendar = calendar, AccrualDayCount = dayCount }; DateGenerationResults dateGenerationResults = CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams); fPayDates = dateGenerationResults.PayDates; fAccruals = dateGenerationResults.AccrualYearFractions; fIssueDate = issueDate; fMaturityDate = maturityDate; fCouponRate = couponRate; fConversionFactor = conversionFactor; }
/// <summary> /// Returns a <see cref="DateGenerationResults"/> which contains bond option's payment dates, pricipals and accrual year fractions information. /// </summary> public DateGenerationResults GetDateGenerationResults() { var dateGenerationRequest = new DateGenerationRequest { RequiresPayDates = true, RequiresPrincipals = true, RequiresYearFractions = true }; var dateGenerationParams = new DateGenerationParams { EffectiveDate = Issue_Date, MaturityDate = Bond_Maturity_Date, CouponPeriod = Coupon_Interval, FirstCouponDate = First_Coupon_Date, PenultimateCouponDate = Penultimate_Coupon_Date, AccrualCalendar = GetHolidayCalendar(), AccrualDayCount = Accrual_Day_Count, Principal = Notional, Amortisation = Amortisation }; return(CashflowGeneration.GenerateCashflowDateAndValueLists(dateGenerationRequest, dateGenerationParams)); }