public PriceFactorList Factors; // temporary expedient /// <summary> /// Constructor. /// </summary> public CDOTopDownValuationParameters(DealCDO deal, PriceFactorList factors) : base(deal, factors) { EL = factors.GetInterface <IExpectedLoss>(deal.Reference_Index); RL = factors.GetInterface <IRealizedLoss>(deal.Reference_Index); Factors = factors; }
/// <summary> /// Constructor. /// </summary> public CreditValuationParameters(DealCreditBase deal, CreditBaseValuation valuation, PriceFactorList factors, VectorScopedCache.Scope cache) { DF = DiscountRate.Get(factors, InterestRateUtils.GetRateId(deal.Discount_Rate, deal.Currency)); X = factors.GetInterface <IFxRate>(deal.Currency); SP = factors.GetInterface <ISurvivalProb>(string.IsNullOrEmpty(deal.Survival_Probability) ? deal.Name : deal.Survival_Probability); RR = null; CR = null; DefaultTime = null; Weights = null; NamesDefaultedBeforeBaseDate = null; if (valuation.Respect_Default == YesNo.Yes) { List <string> names = new List <string>(); if (deal.ProtectionReferenceType() == DealCreditBase.ReferenceType.Single_Name) { names.Add(deal.Name); Weights = new double[] { 1.0 }; } else { IndexCDSPool indexCds = factors.Get <IndexCDSPool>(deal.Name); Weights = new double[indexCds.Names.Count]; for (int i = 0; i < indexCds.Names.Count; ++i) { names.Add(indexCds.Names[i].Name); Weights[i] = indexCds.Names[i].Weight; } } if (valuation.RequiresRecoveryOnDefault()) { RR = new RecoveryRate[names.Count]; for (int i = 0; i < names.Count; ++i) { RR[i] = factors.Get <RecoveryRate>(string.IsNullOrEmpty(deal.Recovery_Rate) ? names[i] : deal.Recovery_Rate); } } CR = new CreditRating[names.Count]; NamesDefaultedBeforeBaseDate = new bool[names.Count]; DefaultTime = new Vector[names.Count]; for (int i = 0; i < names.Count; ++i) { DefaultTime[i] = cache.Get(); CR[i] = factors.Get <CreditRating>(names[i]); NamesDefaultedBeforeBaseDate[i] = CreditRating.DefaultedBeforeBaseDate(CR[i], factors.BaseDate); CR[i].DefaultTime(DefaultTime[i]); } } }
/// <summary> /// Prepare for valuation anything that is dependent upon the scenario. /// </summary> /// <param name="factors">Price factors.</param> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); IInflationCashflowListDeal deal = (IInflationCashflowListDeal)Deal; fIsDefaultNever = !NeedCreditRating(); fCreditRating = NeedCreditRating() ? factors.Get <CreditRating>(deal.Issuer) : null; fRecoveryRate = NeedRecoveryRate() ? factors.Get <RecoveryRate>(GetRecoveryRateID()) : null; fSurvivalProb = NeedSurvivalProb() ? factors.GetInterface <ISurvivalProb>(GetSurvivalProbID()) : null; fInflationRate = !string.IsNullOrEmpty(deal.Index) ? factors.GetInterface <IInflationRate>(deal.Index) : null; fRepoRate = !string.IsNullOrEmpty(deal.Repo_Rate) ? factors.GetInterface <IInterestRate>(deal.Repo_Rate) : fDiscountRate; fIndexVolatility = deal is InflationOptionCashflowListDeal?factors.GetInterface <IPriceIndexVolatility>(GetPriceIndexVolatility()) : null; }
/// <inheritdoc /> public void PreValue(PriceFactorList factors) { var deal = (SwaptionDeal)Deal; var discountId = InterestRateUtils.GetRateId(deal.Discount_Rate, deal.Currency); var forecastId = InterestRateUtils.GetRateId(deal.Forecast_Rate, discountId); fModelParameters = factors.Get <HullWhite1FactorModelParameters>(fModelParametersId); fFxRate = factors.GetInterface <IFxRate>(deal.Currency); fDiscountRate = DiscountRate.Get(factors, discountId); fForecastRate = factors.GetInterface <IInterestRate>(forecastId); fQuadrature = new Lazy <GaussHermiteNormalQuadrature>(() => new GaussHermiteNormalQuadrature(30)); }
/// <summary> /// Prepare for valuation. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); SetModelParameters(fItems); PreValueDeals(fItems, factors); CallableStructuredDeal deal = (CallableStructuredDeal)Deal; // Set volatility price factors if they have been registered by model or underlying deals InterestVol.TryGet <IInterestRateVol>(factors, deal.Forecast_Rate_Cap_Volatility, fForecastCurrency, out fInterestRateVol); InterestVol.TryGet <IInterestYieldVol>(factors, deal.Forecast_Rate_Swaption_Volatility, fForecastCurrency, out fInterestYieldVol); bool needRating = Respect_Default == YesNo.Yes && !string.IsNullOrEmpty(deal.Issuer); bool needSurvival = Use_Survival_Probability == YesNo.Yes && !string.IsNullOrEmpty(deal.Issuer); if (needRating) { fCreditRating = factors.Get <CreditRating>(deal.Issuer); fRecoveryRate = factors.Get <RecoveryRate>(InterestRateUtils.GetRateId(deal.Recovery_Rate, deal.Issuer)); } if (needSurvival) { fSurvivalProb = factors.GetInterface <ISurvivalProb>(string.IsNullOrEmpty(deal.Survival_Probability) ? deal.Issuer : deal.Survival_Probability); } }
/// <summary> /// Prepare for valuation anything that is dependent upon the scenario. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); BondFutureOption deal = (BondFutureOption)Deal; fInterestYieldVol = InterestVolBase.GetYieldVol(factors, deal.Yield_Volatility, fCurrency); var bfb = (BondFuturesBasis)fFuturesBasis; GenerateCTD(factors.BaseDate, bfb.CTD_Issue_Date, bfb.CTD_Maturity_Date, bfb.CTD_Coupon_Interval, bfb.CTD_First_Coupon_Date, bfb.CTD_Penultimate_Coupon_Date, bfb.CTD_Day_Count, Deal.GetHolidayCalendar(), bfb.CTD_Coupon_Rate, bfb.CTD_Conversion_Factor); if (NeedRating(Respect_Default, deal.Issuer)) { fCreditRating = factors.Get <CreditRating>(deal.Issuer); fRecoveryRate = factors.Get <RecoveryRate>(InterestRateUtils.GetRateId(deal.Recovery_Rate, deal.Issuer)); } else { fCreditRating = null; fRecoveryRate = null; } if (NeedSurvivalProbability(Use_Survival_Probability, deal.Issuer)) { fSurvivalProb = factors.GetInterface <ISurvivalProb>(InterestRateUtils.GetRateId(deal.Survival_Probability, deal.Issuer)); } else { fSurvivalProb = null; } }
/// <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 dependent upon the scenario. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); CommodityFuture deal = (CommodityFuture)Deal; fCommodityPrice = factors.GetInterface <ICommodityPrice>(deal.Commodity); }
/// <summary> /// Prepare for valuation anything that is dependent upon the scenario. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); CFFixedInterestListDeal deal = (CFFixedInterestListDeal)fDeal; // Get factor for translation from rate currency to settlement currency for cashflows with FX reset date if (!string.IsNullOrEmpty(deal.Rate_Currency) && deal.Rate_Currency != fCurrency) { fRateFxRate = factors.GetInterface <IFxRate>(deal.Rate_Currency); } }
/// <summary> /// Get price factors. /// </summary> private void PreValue(PriceFactorList factors) { var deal = (CalendarSpreadOption)Deal; // Get forward price samples. fForwardSample = factors.Get <ForwardPriceSample>(deal.Sampling_Type); // Get ReferencePrice price factors. fReferencePrice1 = factors.GetInterface <IReferencePrice>(deal.Reference_Type); fReferencePrice2 = factors.GetInterface <IReferencePrice>(deal.Reference_Type); // Get ReferenceVol price factors. // Default to Reference Type if Reference Vol Type is not set. if (string.IsNullOrEmpty(deal.Reference_Vol_Type)) { fReferenceVol1 = factors.Get <ReferenceVol>(deal.Reference_Type); fReferenceVol2 = factors.Get <ReferenceVol>(deal.Reference_Type); } else { fReferenceVol1 = factors.Get <ReferenceVol>(deal.Reference_Vol_Type); fReferenceVol2 = factors.Get <ReferenceVol>(deal.Reference_Vol_Type); } // Get correlation price factor based on the ID of the forward price. fCorrelations = factors.Get <ForwardPriceCorrelations>(fReferencePrice1.GetForwardPrice()); // Get FX rate price factors. fFxRate = factors.GetInterface <IFxRate>(deal.Currency); fFxPayoffRate = factors.GetInterface <IFxRate>(deal.DealCurrency()); fPriceFactorFxRate = factors.GetInterface <IFxRate>(fReferencePrice1.DomesticCurrency()); // Get discount rate price factor. fDiscountRate = factors.GetInterface <IInterestRate>(InterestRateUtils.GetRateId(deal.Discount_Rate, deal.Currency)); }
/// <summary> /// Prepare for valuation anything that is dependent upon the scenario. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); CallableBondForward deal = (CallableBondForward)Deal; fInterestYieldVol = InterestVolBase.GetYieldVol(factors, deal.Yield_Volatility, fCurrency); fNeedsCreditRating = NeedCreditRating(); fCreditRating = NeedCreditRating() ? factors.Get <CreditRating>(deal.Issuer) : null; fRecoveryRate = NeedRecovery() ? factors.Get <RecoveryRate>(string.IsNullOrEmpty(deal.Recovery_Rate) ? deal.Issuer : deal.Recovery_Rate) : null; fSurvivalProb = NeedSurvivalProb() ? factors.GetInterface <ISurvivalProb>(string.IsNullOrEmpty(deal.Survival_Probability) ? deal.Issuer : deal.Survival_Probability) : null; }
/// <summary> /// Prepare for valuation anything that is dependent upon the scenario. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); var deal = (BondLendingBase)fDeal; if (string.IsNullOrEmpty(deal.Issuer)) { return; } fSurvivalProb = factors.GetInterface <ISurvivalProb>(string.IsNullOrEmpty(deal.Survival_Probability) ? deal.Issuer : deal.Survival_Probability); }
/// <summary> /// Prepare for valuation. /// </summary> public override void PreValue(PriceFactorList factors) { var deal = (CFFloatingInterestListDeal)Deal; base.PreValue(factors); bool quanto = fForecastIsForeign && fCharacteristics.HasQuanto && Quanto_Correction == YesNo.Yes; bool convexity = !fCharacteristics.IsStandardLibor && Convexity_Correction == YesNo.Yes; // volatility surfaces for forecast rate if (fCharacteristics.HasCms) { fForecastYieldVol = InterestVolBase.GetYieldVol(factors, deal.Forecast_Rate_Swaption_Volatility, fForecastCurrency); } if (fCharacteristics.HasLibor && (fCharacteristics.HasOptionlet || convexity || quanto)) { fForecastRateVol = InterestVolBase.GetRateVol(factors, deal.Forecast_Rate_Cap_Volatility, fForecastCurrency); } // volatility surfaces for discount rate if (convexity) { // Discount rate volatility and correlation for convexity correction if (fCharacteristics.HasCms) { fDiscountYieldVol = InterestVolBase.GetYieldVol(factors, deal.Discount_Rate_Swaption_Volatility, fCurrency); } if (fCharacteristics.HasLibor) { fDiscountRateVol = InterestVolBase.GetRateVol(factors, deal.Discount_Rate_Cap_Volatility, fCurrency); } } if (fForecastIsForeign) { // Get factor for translation from forecast rate currency to settlement currency for cashflows with FX reset date if (fCharacteristics.HasFXReset) { fForecastFxRate = factors.GetInterface <IFxRate>(fForecastCurrency); } if (quanto) { fForecastFxVol = FXVolHelper.Get(factors, fForecastCurrency, fCurrency); fForecastFxCorrel = CorrelationHelper.Get(factors, typeof(InterestRate), fForecastCurrency, null, typeof(FxRate), fForecastCurrency, fCurrency); fForecastDiscountCorrel = CorrelationHelper.Get(factors, typeof(InterestRate), fForecastCurrency, null, typeof(InterestRate), fCurrency, null); } } }
/// <summary> /// Prepare for valuation anything that is dependent upon the scenario. /// </summary> /// <param name="factors">Price factors.</param> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); BondOptionDeal deal = (BondOptionDeal)Deal; bool needRating = Respect_Default == YesNo.Yes && !string.IsNullOrEmpty(deal.Issuer); bool needSurvival = Use_Survival_Probability == YesNo.Yes && !string.IsNullOrEmpty(deal.Issuer); bool needRecovery = needRating; fCreditRating = needRating ? factors.Get <CreditRating>(deal.Issuer) : null; fRecoveryRate = needRecovery ? factors.Get <RecoveryRate>(string.IsNullOrEmpty(deal.Recovery_Rate) ? deal.Issuer : deal.Recovery_Rate) : null; fSurvivalProb = needSurvival ? factors.GetInterface <ISurvivalProb>(string.IsNullOrEmpty(deal.Survival_Probability) ? deal.Issuer : deal.Survival_Probability) : null; }
/// <summary> /// Prepare for valuation. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); var deal = (CFEquityFloatingInterestListDeal)Deal; deal.GetDealHelper().PreValueAsset(out fEquity, out fEquityVol, ref fEquityQuantoCompo, factors); // Get FX rate price factors fEquityCurrency = deal.Equity_Currency; fEquityPayoffCurrency = string.IsNullOrEmpty(deal.Equity_Payoff_Currency) ? fEquityCurrency : deal.Equity_Payoff_Currency; fEquityFXRate = factors.GetInterface <IFxRate>(fEquityCurrency); fEquityPayoffFXRate = fEquityPayoffCurrency != fEquityCurrency?factors.GetInterface <IFxRate>(fEquityPayoffCurrency) : fEquityFXRate; bool quanto = fForecastIsForeign && Quanto_Correction == YesNo.Yes; if (fCharacteristics.fHasLibor) { // volatility surfaces for forecast rate if ((!fCharacteristics.fIsStandardLibor && Convexity_Correction == YesNo.Yes) || quanto) { fForecastRateVol = InterestVolBase.GetRateVol(factors, deal.Forecast_Rate_Cap_Volatility, fForecastCurrency); } // volatility surfaces for discount rate if (!fCharacteristics.fIsStandardLibor && Convexity_Correction == YesNo.Yes) { fDiscountRateVol = InterestVolBase.GetRateVol(factors, deal.Discount_Rate_Cap_Volatility, fCurrency); } } if (quanto) { fForecastFXVol = FXVolHelper.Get(factors, fForecastCurrency, fCurrency); fForecastFXCorrel = CorrelationHelper.Get(factors, typeof(InterestRate), fForecastCurrency, null, typeof(FxRate), fForecastCurrency, fCurrency); fForecastDiscountCorrel = CorrelationHelper.Get(factors, typeof(InterestRate), fForecastCurrency, null, typeof(InterestRate), fCurrency, null); } }
/// <summary> /// Prepare for valuation anything that is dependent upon the scenario. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); CFListBaseDeal <TCashflowList> deal = (CFListBaseDeal <TCashflowList>)fDeal; if (string.IsNullOrEmpty(fDeal.GetIssuer())) { return; } if (UseSurvivalProbability()) { fSurvivalProb = factors.GetInterface <ISurvivalProb>(string.IsNullOrEmpty(deal.GetSurvivalProbability()) ? deal.GetIssuer() : deal.GetSurvivalProbability()); } if (RespectDefault()) { fRecoveryRate = factors.Get <RecoveryRate>(InterestRateUtils.GetRateId(deal.GetRecoveryRate(), deal.GetIssuer())); fCreditRating = factors.Get <CreditRating>(deal.GetIssuer()); } }
/// <summary> /// Calculate a valuation profile for a range of scenarios. /// </summary> public override void Value(ValuationResults valuationResults, PriceFactorList factors, BaseTimeGrid baseTimes) { IAssetPrice price = GetAssetPrice(factors); PVProfiles result = valuationResults.Profile; double scale = fDeal.Units * (fDeal.Buy_Sell == BuySell.Buy ? +1 : -1); var tgi = new TimeGridIterator(fT); VectorEngine.For(tgi, () => result.AppendVector(tgi.Date, scale * price.Get(tgi.T))); result.Complete(fT); CashAccumulators cashAccumulators = valuationResults.Cash; double endDate = Deal.EndDate(); if (!cashAccumulators.Ignore && endDate <= fT.fHorizon) { double tEnd = CalcUtils.DaysToYears(endDate - factors.BaseDate); IFxRate fxRate = factors.GetInterface <IFxRate>(fDeal.Currency); cashAccumulators.Accumulate(fxRate, endDate, scale * price.Get(tEnd) / fxRate.Get(tEnd)); } }
/// <summary> /// Fetch the survival probability price factor, or null if not applicable. /// </summary> protected override ISurvivalProb GetSurvivalProbability(PriceFactorList factors) { var deal = (DealCreditLinkedNote)Deal; return(factors.GetInterface <ISurvivalProb>(string.IsNullOrEmpty(deal.Survival_Probability) ? deal.Name : deal.Survival_Probability)); }
/// <summary> /// Try to get the notional of the deal at the given date. /// </summary> protected override bool DoTryGetNotional(PriceFactorList priceFactors, out double notional) { notional = Amount * priceFactors.GetInterface <IFxRate>(Currency).BaseCurrencySpotPrice(); return(true); }
protected CDOValuationParameters(DealCDO deal, PriceFactorList factors) { DF = DiscountRate.Get(factors, InterestRateUtils.GetRateId(deal.Discount_Rate, deal.Currency)); X = factors.GetInterface <IFxRate>(deal.Currency); }