internal static List <BillSwapPricer2CashflowItem> GenerateFixedCashflowsFromAmortisingResultItems(List <AmortisingResultItem> amortisingResultItems, IDayCounter dayCounter, double fixedRate) { var result = new List <BillSwapPricer2CashflowItem>(); for (int i = 0; i < amortisingResultItems.Count - 1; ++i) { var billSwapPricer2CashflowItem = new BillSwapPricer2CashflowItem { StartDate = amortisingResultItems[i].RollDate, EndDate = amortisingResultItems[i + 1].RollDate, Notional = amortisingResultItems[i].OutstandingValue }; billSwapPricer2CashflowItem.AccrualPeriod = dayCounter.YearFraction(billSwapPricer2CashflowItem.StartDate, billSwapPricer2CashflowItem.EndDate); billSwapPricer2CashflowItem.ImpliedForwardRate = fixedRate; billSwapPricer2CashflowItem.DiscountedValue = billSwapPricer2CashflowItem.Notional / (1 + billSwapPricer2CashflowItem.ImpliedForwardRate * billSwapPricer2CashflowItem.AccrualPeriod); result.Add(billSwapPricer2CashflowItem); } return(result); }
internal static List <BillSwapPricer2CashflowItem> GenerateFloatingCashflowsFromAmortisingResultItems(List <AmortisingResultItem> amortisingResultItems, IDayCounter dayCounter, RateCurve curve, double floatRateMargin) { var result = new List <BillSwapPricer2CashflowItem>(); for (int i = 0; i < amortisingResultItems.Count - 1; ++i) { var billSwapPricer2CashflowItem = new BillSwapPricer2CashflowItem { StartDate = amortisingResultItems[i].RollDate, EndDate = amortisingResultItems[i + 1].RollDate, Notional = amortisingResultItems[i].OutstandingValue }; billSwapPricer2CashflowItem.AccrualPeriod = dayCounter.YearFraction(billSwapPricer2CashflowItem.StartDate, billSwapPricer2CashflowItem.EndDate); double startOfPeriodDiscount = curve.GetDiscountFactor(billSwapPricer2CashflowItem.StartDate); double endOfPeriodDiscount = curve.GetDiscountFactor(billSwapPricer2CashflowItem.EndDate); double forecastContinuouslyCompoundingRate = floatRateMargin + ((startOfPeriodDiscount / endOfPeriodDiscount - 1.0) / billSwapPricer2CashflowItem.AccrualPeriod); billSwapPricer2CashflowItem.ImpliedForwardRate = forecastContinuouslyCompoundingRate; billSwapPricer2CashflowItem.DiscountedValue = billSwapPricer2CashflowItem.Notional / (1 + billSwapPricer2CashflowItem.ImpliedForwardRate * billSwapPricer2CashflowItem.AccrualPeriod); result.Add(billSwapPricer2CashflowItem); } return(result); }