/// <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. /// </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. /// </summary> public override void PreValue(PriceFactorList factors) { base.PreValue(factors); CFGeneralInterestSpreadListDeal deal = (CFGeneralInterestSpreadListDeal)Deal; // Get spread flow characteristics SpreadCashflowListCharacteristics spreadCashflowCharacteristics = fCashflows.ValuationPriceFactorDependencies(factors.BaseDate, fCurrency, fForecastCurrency, fForecast2Currency); // vols for first forecast rate if (spreadCashflowCharacteristics.NeedForecast1YieldVol) { fForecast1YieldVol = InterestVolBase.GetYieldVol(factors, deal.Forecast_Rate1_Swaption_Volatility, fForecastCurrency); } if (spreadCashflowCharacteristics.NeedForecast1RateVol) { fForecast1RateVol = InterestVolBase.GetRateVol(factors, deal.Forecast_Rate1_Cap_Volatility, fForecastCurrency); } // vols for second forecast rate if (spreadCashflowCharacteristics.NeedForecast2YieldVol) { fForecast2YieldVol = InterestVolBase.GetYieldVol(factors, deal.Forecast_Rate2_Swaption_Volatility, fForecast2Currency); } if (spreadCashflowCharacteristics.NeedForecast2RateVol) { fForecast2RateVol = InterestVolBase.GetRateVol(factors, deal.Forecast_Rate2_Cap_Volatility, fForecast2Currency); } // vols for discount rate if (spreadCashflowCharacteristics.NeedDiscountYieldVol) { fDiscountYieldVol = InterestVolBase.GetYieldVol(factors, deal.Discount_Rate_Swaption_Volatility, fCurrency); } if (spreadCashflowCharacteristics.NeedDiscountRateVol) { fDiscountRateVol = InterestVolBase.GetRateVol(factors, deal.Discount_Rate_Cap_Volatility, fCurrency); } bool convexity = spreadCashflowCharacteristics.NeedDiscountYieldVol || spreadCashflowCharacteristics.NeedDiscountRateVol; if (fForecastCurrency != fCurrency) { if (Quanto_Correction == YesNo.Yes) { // fx vol, fx/ir correl and forecast/discount correl fFx1Vol = FXVolHelper.Get(factors, fForecastCurrency, fCurrency); fForecast1Fx1Correl = CorrelationHelper.Get(factors, typeof(InterestRate), fForecastCurrency, null, typeof(FxRate), fForecastCurrency, fCurrency); } if (convexity) { fForecast1DiscountCorrel = CorrelationHelper.Get(factors, typeof(InterestRate), fCurrency, null, typeof(InterestRate), fForecastCurrency, null); } } if (fForecast2Currency != fCurrency) { if (Quanto_Correction == YesNo.Yes) { // fx vol, fx/ir correl and forecast/discount correl fFx2Vol = FXVolHelper.Get(factors, fForecast2Currency, fCurrency); fForecast2Fx2Correl = CorrelationHelper.Get(factors, typeof(InterestRate), fForecast2Currency, null, typeof(FxRate), fForecast2Currency, fCurrency); } if (convexity) { fForecast2DiscountCorrel = CorrelationHelper.Get(factors, typeof(InterestRate), fCurrency, null, typeof(InterestRate), fForecast2Currency, null); } } if (spreadCashflowCharacteristics.NeedForecast1Forecast2Correlation) { if (fForecastCurrency == fForecast2Currency) { // correl between forecast rates in same currency fForecast1Forecast2Correls = factors.Get <CMSRateCorrelations>(fForecastCurrency); } else { fForecast1Forecast2Correl = CorrelationHelper.Get(factors, typeof(InterestRate), fForecastCurrency, null, typeof(InterestRate), fForecast2Currency, null); } } }