/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); var deal = (SwaptionBaseDeal)Deal; // Call HeadNodeInitialize on leg models to create time grid on leg models. fItems.HeadNodeInitialize(factors, baseTimes, requiredResults); SwaptionBaseValuation.SetCashflowLists(null, deal, ref fFixedCashflowList, ref fFloatCashflowList); Debug.Assert(fFloatCashflowList != null && fFixedCashflowList != null, "One or both of the underlying swap legs are null."); // Calculate fixed interest cashflows fFixedCashflowList.CalculateInterest(factors.BaseDate); // Add to valuation time grid bool cashRequired = requiredResults.CashRequired(); fT.Add(deal.Option_Expiry_Date, true); if (deal.Settlement_Style == SettlementType.Physical) { fT.AddPayDates(fFixedCashflowList, cashRequired); fT.AddPayDates(fFloatCashflowList, cashRequired); } else { fT.AddPayDate(deal.Settlement_Date, cashRequired); } }
/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); Prepare(factors.BaseDate, factors.RateFixings); fSettlementOffsetHelper.InitialiseHolidayCalendars(factors.CalendarData); }
/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); BaseCliquetOption deal = (BaseCliquetOption)fDeal; DateList accrualDates = CashflowGeneration.GenerateStripOfDates(deal.Effective_Date, deal.Maturity_Date, deal.Frequency, deal.GetHolidayCalendar()); fTimes = new double[accrualDates.Count]; for (int i = 0; i < accrualDates.Count; ++i) { fTimes[i] = CalcUtils.DaysToYears(accrualDates[i] - factors.BaseDate); } // Get the asset price from the deal helper var dealHelper = (BaseAssetFxDealHelper)deal.GetDealHelper(); IAssetPrice assetPrice = dealHelper.GetAssetPrice(factors); fKnownPrices = deal.GetKnownPrices(accrualDates, factors, assetPrice); // Add expiry dates to valuation time grid. if (accrualDates.Count > 1) { DateList expiryDates = new DateList(accrualDates); expiryDates.RemoveAt(0); fT.AddPayDates(expiryDates, requiredResults.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); // 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 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 requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); IInflationCashflowListDeal deal = (IInflationCashflowListDeal)Deal; // Set up cashflow list IInflationRate inflationRate = deal.NeedInflationRate() ? factors.GetInterface <IInflationRate>(deal.Index) : null; deal.GetCashflows().PreCloneInitialize(factors.BaseDate, inflationRate, deal.GetHolidayCalendar()); // Add to valuation time grid deal.AddPayDates(fT); if (deal.Investment_Horizon > 0.0) { fT.AddPayDate(deal.Investment_Horizon, requiredResults.CashRequired()); } if (deal.Settlement_Date > 0.0) { fT.AddPayDate(deal.Settlement_Date, requiredResults.CashRequired()); } // Recovery cashflows are created on the fly to respect customized cashflows if (NeedRecoveryCashflows()) { fRecoveryCashflowList = new CFRecoveryInflationList(); fRecoveryCashflowList.PopulateRecoveryCashflowList(factors.BaseDate, deal.Settlement_Date, deal.GetCashflows()); } }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.HeadNodeInitialize(factors, baseTimes, resultsRequired); var deal = (AverageForwardExplicitDealBase)Deal; fScale = (deal.Buy_Sell == BuySell.Buy ? +1 : -1) * deal.GetUnits(); fSamplingTimes = new double[deal.Sampling_Data.Count]; fSamplingTimesPlusTenor = new double[deal.Sampling_Data.Count]; int index = 0; Term tenorAsTerm = Period.ValueToTerm(deal.Tenor); // Loop over sampling dates and generate relevant sampling times. foreach (SamplingEntryAsset sample in deal.Sampling_Data) { double endDate = DateAdjuster.Add(sample.Date, tenorAsTerm, deal.GetHolidayCalendar()); double sampleTime = CalcUtils.DaysToYears(sample.Date - factors.BaseDate); // Store the start time and the end time. fSamplingTimes[index] = sampleTime; // Discount Factor and Forward Factor times are in Act365. fSamplingTimesPlusTenor[index] = CalcUtils.DaysToYears(endDate - factors.BaseDate); index++; } // Create a deep copy of the sampling data list and replace missing values with data from the rate fixings file var assetPrice = ((BaseAssetFxDealHelper)deal.GetDealHelper()).GetAssetPrice(factors); string assetCurrency = fPayoffType == PayoffType.Compo ? fPayoffCurrency : fCurrency; fSamplingData = deal.Sampling_Data.FillMissingDataFromFixings(factors.RateFixings, factors, assetPrice, assetCurrency, deal, "calculation of asset average"); // Add to valuation time grid fT.AddPayDate(deal.Maturity_Date, resultsRequired.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> /// 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); FixedCashflowDeal deal = (FixedCashflowDeal)fDeal; fAmount = deal.Amount; }
/// <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); FixedCashflowBaseDeal deal = (FixedCashflowBaseDeal)fDeal; // Add to valuation time grid fT.AddPayDate(deal.Payment_Date); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); CFFixedListDeal deal = (CFFixedListDeal)Deal; // Add to valuation time grid fT.AddPayDates <CFFixed>(deal.Cashflows); }
/// <inheritdoc /> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); fItems.PreCloneInitialize(factors, baseTimes, requiredResults); int fixedCount = fFixedCashflowList.Count(); int floatCount = fFloatCashflowList.Count(); fDates = new DateList(); // Get a list of all the relevant dates for the deal. for (int i = 0; i < fixedCount; i++) { var fixedDate = fFixedCashflowList[i].Payment_Date; fDates.Add(fixedDate); } for (int i = 0; i < floatCount; i++) { var payDate = fFloatCashflowList[i].Payment_Date; var startDate = fFloatCashflowList[i].Resets[0].Rate_Start_Date; if (!fDates.Contains(payDate)) { fDates.Add(payDate); } if (!fDates.Contains(startDate)) { fDates.Add(startDate); } } int count = fDates.Count; fFixedCouponWeight = new double[count]; fFixedCouponRate = new double[count]; // Calucate the static parts of the coefficients foreach (var cf in fFixedCashflowList) { int idx = fDates.IndexOf(cf.Payment_Date); fFixedCouponWeight[idx] += cf.Accrual_Year_Fraction * cf.Notional; fFixedCouponRate[idx] = cf.Rate; } fFloatingCouponWeight = new double[count]; foreach (var cf in fFloatCashflowList) { int idx = fDates.IndexOf(cf.Payment_Date); double rateYearFraction = cf.Resets[0].Rate_Year_Fraction; double yearFractionRatio = (rateYearFraction < CalcUtils.TINY) ? 1.0 : cf.Accrual_Year_Fraction / rateYearFraction; fFloatingCouponWeight[idx] += cf.Notional * yearFractionRatio; } }
/// <inheritdoc /> public override void HeadNodeInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.HeadNodeInitialize(factors, baseTimes, requiredResults); CFListBaseDeal <TCashflowList> deal = (CFListBaseDeal <TCashflowList>)fDeal; fSettlementOffsetHelper.InitialiseHolidayCalendars(factors.CalendarData); deal.Cashflows.SetCashflowRounding(Cashflow_Rounding); }
/// <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); CommodityForwardDealBase deal = (CommodityForwardDealBase)fDeal; // Add to valuation time grid fT.AddPayDate(deal.Maturity_Date, requiredResults.CashRequired()); }
/// <inheritdoc /> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.PreCloneInitialize(factors, baseTimes, resultsRequired); // Add to valuation time grid fT.AddPayDate(fPaymentDate, resultsRequired.CashRequired()); fCutoffDate = fSettlementOffsetHelper.GetCutoffDate(factors.BaseDate); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (IDIOptionDeal)Deal; fStrike = deal.StrikeForValuation(); fBaseDate = factors.BaseDate; }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (CFFloatingInterestListDeal)Deal; // Set up cashflow list fCashflows.SetUseConvexityCorrection(Convexity_Correction == YesNo.Yes); fCashflows.SetUseQuantoCorrection(Quanto_Correction == YesNo.Yes); fCashflows.SetFasterAveraging(Faster_Averaging_Valuation == YesNo.Yes); fCashflows.SetOISCashflowGroupSize(OIS_Cashflow_Group_Size); fCashflows.SetConvexityLowRateCutoff(Convexity_Low_Rate_Cutoff); fCashflows.SetOISRateRounding(OIS_Rate_Rounding); double baseDate = factors.BaseDate; fCharacteristics = fCashflows.Analyze(baseDate); if (fCharacteristics.IsOIS) { fCashflows.InitializeFastOISCalculation(baseDate); } if (fCharacteristics.IsVanillaSwap) { fCashflows.CalculateAmounts(baseDate); } // Add to valuation time grid bool payDatesRequired = ValueOnCashflowDates() && requiredResults.CashRequired(); fT.AddPayDates(fCashflows, payDatesRequired); double settlementDate = deal.Settlement_Date; if (settlementDate > 0.0) { fT.AddPayDate(settlementDate, payDatesRequired); } if (Use_Settlement_Offset == YesNo.Yes && settlementDate != 0.0) { fCutoffDate = 0.0; } if (deal.Investment_Horizon > 0.0) { fT.AddPayDate(deal.Investment_Horizon, payDatesRequired); } if (Use_Survival_Probability == YesNo.Yes) { fRecoveryList = new CFRecoveryList(); fRecoveryList.PopulateRecoveryCashflowList(baseDate, settlementDate, fCashflows); } }
/// <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); CFListBaseDeal <TCashflowList> deal = (CFListBaseDeal <TCashflowList>)fDeal; fBuySellSign = deal.Buy_Sell == BuySell.Buy ? +1 : -1; fCutoffDate = fSettlementOffsetHelper.GetCutoffDate(factors.BaseDate); }
/// <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); FixedInterestCashflowDeal deal = (FixedInterestCashflowDeal)fDeal; int sign = (deal.Buy_Sell == BuySell.Buy ? +1 : -1); double accrualDayCountFraction = CalcUtils.DayCountFraction(deal.Accrual_Start_Date, deal.Accrual_End_Date, deal.Accrual_Day_Count, deal.GetHolidayCalendar()); fAmount = sign * deal.Notional * accrualDayCountFraction * deal.Fixed_Rate; }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (CFEquityFloatingInterestListDeal)Deal; // Set up cashflow list fCharacteristics = deal.Cashflows.Analyze(factors.BaseDate); // Add to valuation time grid fT.AddPayDates(deal.Cashflows); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); var deal = (CalendarSpreadOption)Deal; fCallPutSign = deal.Option_Type == OptionType.Call ? 1 : -1; fScale = (deal.Buy_Sell == BuySell.Buy ? +1.0 : -1.0) * deal.Units * deal.Contract_Size; // Add to valuation time grid fT.AddPayDate(deal.Settlement_Date, requiredResults.CashRequired()); }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); // Set up cashflow list fCashflows.SetUseConvexityCorrection(Convexity_Correction == YesNo.Yes); fCashflows.SetUseQuantoCorrection(Quanto_Correction == YesNo.Yes); fCashflows.SetConvexityLowRateCutoff(Convexity_Low_Rate_Cutoff); // Add to valuation time grid fT.AddPayDates(fCashflows); }
/// <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); fItems.PreCloneInitialize(factors, baseTimes, ResultsRequired); CallableStructuredDeal deal = (CallableStructuredDeal)fDeal; // Create a list of sorted exercise items with exercise date >= baseDate and exercise date <= deal's end date. fExercises = CreateExerciseList(factors.BaseDate, deal.EndDate(), deal.Exercise_Dates, deal.Principal); AddDatesToValuationGrid(factors.BaseDate, ResultsRequired.CashRequired()); }
/// <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); CommitmentDeal deal = (CommitmentDeal)Deal; // Add to valuation time grid fT.Add(deal.Effective_Date - 1.0); fT.Add(deal.Effective_Date); for (int i = 0; i < deal.Amortisation.Count; ++i) { fT.AddPayDate(deal.Amortisation[i].Date); } }
/// <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); } }
/// <summary> /// Add required results. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults resultsRequired) { base.PreCloneInitialize(factors, baseTimes, resultsRequired); if (resultsRequired.Result <AddOnProfiles>() == null) { var addOnProfiles = new AddOnProfiles(resultsRequired.Result <PVProfiles>().VectorSize); resultsRequired.Add(addOnProfiles); } if (resultsRequired.Result <PositiveMtmProfiles>() == null) { var mtmPositiveProfiles = new PositiveMtmProfiles(resultsRequired.Result <PVProfiles>().VectorSize); resultsRequired.Add(mtmPositiveProfiles); } }
/// <summary> /// Prepare for valuation anything that is not dependent upon the scenario. /// </summary> public override void PreCloneInitialize(PriceFactorList factors, BaseTimeGrid baseTimes, RequiredResults requiredResults) { base.PreCloneInitialize(factors, baseTimes, requiredResults); CFFixedInterestListDeal deal = (CFFixedInterestListDeal)Deal; // Set up cashflow list deal.Cashflows.CalculateInterest(factors.BaseDate); // Add to valuation time grid bool payDatesRequired = ValueOnCashflowDates() && requiredResults.CashRequired(); fT.AddPayDates <CFFixedInterest>(deal.Cashflows, payDatesRequired); double baseDate = factors.BaseDate; double settlementDate = deal.Settlement_Date; if (settlementDate >= baseDate) { fT.AddPayDate(settlementDate, payDatesRequired); var accrualCalendar = deal.GetHolidayCalendar(); fAccruedInterest = deal.Cashflows.CalculateAccrual(settlementDate, false, accrualCalendar); fSettlementAmount = deal.Settlement_Amount; if (deal.Settlement_Amount_Is_Clean == YesNo.Yes) { fSettlementAmount += fAccruedInterest; } } // Settlement date takes precedence. if (Use_Settlement_Offset == YesNo.Yes && settlementDate != 0.0) { fCutoffDate = 0.0; } if (deal.Investment_Horizon > 0.0) { fT.AddPayDate(deal.Investment_Horizon, payDatesRequired); } if (Use_Survival_Probability == YesNo.Yes) { fRecoveryList = new CFRecoveryList(); fRecoveryList.PopulateRecoveryCashflowList(baseDate, settlementDate, deal.Cashflows); } }
/// <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 = (BondOptionDeal)Deal; var tExpiry = deal.GetTimeToExpiry(factors.BaseDate); var tMaturity = CalcUtils.DaysToYears(deal.Bond_Maturity_Date - factors.BaseDate); var dateGenerationResults = deal.GetDateGenerationResults(); fPayDates = dateGenerationResults.PayDates; fAccruals = dateGenerationResults.AccrualYearFractions; fPrincipals = dateGenerationResults.Principals; fFinalPrincipal = dateGenerationResults.FinalPrincipal; fStrike = deal.Strike_Price; fStrikeYield = deal.GetStrikeYield(ref fStrike, tExpiry, tMaturity, fPayDates, fAccruals); fT.AddPayDate(deal.Expiry_Date, requiredResults.CashRequired()); }
/// <summary> /// Calculate valuation profiles. /// </summary> public override void Value(ValuationResults valuationResults, PriceFactorList factors, BaseTimeGrid baseTimes) { base.Value(valuationResults, factors, baseTimes); var accruedResults = valuationResults.Results <AccruedInterest>(); if (accruedResults == null) { return; } using (var cache = Vector.Cache(factors.NumScenarios)) { Vector accruedInterest = cache.Get(); var deal = (CFEquityFloatingInterestListDeal)Deal; var tgi = new TimeGridIterator(fT); var equityParams = new EquityCashflowParams((EquityPrice)fEquity, (EquityPriceVol)fEquityVol, fEquityFXRate, fEquityPayoffFXRate, deal.GetEquityPayoffType(), fEquityQuantoCompo, null, null); while (tgi.Next()) { deal.Cashflows.CalculateAccrual(accruedInterest, equityParams, factors.BaseDate, tgi.Date, accruedResults.AccrueFromToday, deal.GetHolidayCalendar(), deal.Accrual_Day_Count, fForecastRate, fFxRate); accruedResults.SetValue(tgi.Date, fBuySellSign * accruedInterest); } } }
/// <summary> /// Calculate valuation profiles. /// </summary> public override void Value(ValuationResults valuationResults, PriceFactorList factors, BaseTimeGrid baseTimes) { PreValue(factors); TimeGridIterator tgi = new TimeGridIterator(fT); PVProfiles result = valuationResults.Profile; CommitmentDeal deal = (CommitmentDeal)Deal; VectorEngine.For(tgi, () => { if (tgi.Date < deal.Effective_Date) { result.AppendZeroVector(tgi.Date); } else { double amount = deal.Amortisation.GetPrincipal(deal.Amount, tgi.Date - 1.0); result.AppendVector(tgi.Date, fFxRate.Get(tgi.T) * amount); } }); result.Complete(fT); }