/// <summary> /// Returns the known reset rate if necessary, either via user-specified known rate or rate fixings file. Returns null if either reset rate is not necessary or not found. /// </summary> private static double?GetKnownResetRate(TDate baseDate, TDate resetDate, TDate paymentDate, YesNo useKnownRate, double knownRate, string rateFixing, RateFixingsProvider rateFixingsProvider, Deal deal) { double?knownResetRate = null; if (paymentDate >= baseDate && resetDate <= baseDate) { if (useKnownRate == YesNo.Yes) { knownResetRate = knownRate; } else if (!string.IsNullOrWhiteSpace(rateFixing) && rateFixingsProvider != null) { // Try get realized reset rate from Rate fixing file. DateTime[] missingDates = { DateTime.FromOADate(resetDate) }; var fixings = CashflowsFixingsHelper.GetRateFixings(rateFixing, missingDates, rateFixingsProvider, baseDate, deal); if (fixings != null && fixings.Length != 0 && !double.IsNaN(fixings[0])) { knownResetRate = fixings[0]; } } } return(knownResetRate); }
/// <summary> /// Clones the cashflow list and applies missing fixings from the fixings file. If /// fixings are applied, the clone is stored in place of the original deal. /// </summary> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); var baseDate = factors.BaseDate; var deal = (CFFloatingInterestListDeal)fDeal; fCashflows = deal.Cashflows; // Apply any missing rate fixings, performing minimal cloning if (fCashflows.HasMissingRates(baseDate)) { fCashflows = CashflowsFixingsHelper.ApplyRateFixings(factors, deal, fCashflows); } }