/// <summary> /// Calculates the specified model data. /// </summary> /// <param name="modelData">The model data.</param> /// <returns></returns> public override BasicAssetValuation Calculate(IAssetControllerData modelData) { ModelData = modelData; AnalyticsModel = new LeaseAssetAnalytic(); var metrics = MetricsHelper.GetMetricsToEvaluate(Metrics, AnalyticsModel.Metrics); // Determine if DFAM has been requested - if so that's all we evaluate - every other metric is ignored var metricsToEvaluate = metrics.ToArray(); var analyticModelParameters = new LeaseAssetParameters(); CalculationResults = new LeaseAssetAnalytic(); var marketEnvironment = modelData.MarketEnvironment; //IRateCurve rate forecast curve = null; IRateCurve leaseCurve = null; //0. Set the valuation date and recalculate the settlement date. This could mean regenerating all the coupon dates as well //Alternatively the lease can be recreated with a different base date = valuation date. //1. instantiate curve if (marketEnvironment.GetType() == typeof(SimpleMarketEnvironment)) { leaseCurve = (IRateCurve)((ISimpleMarketEnvironment)marketEnvironment).GetPricingStructure(); LeaseDiscountCurveName = leaseCurve.GetPricingStructureId().UniqueIdentifier; } if (marketEnvironment.GetType() == typeof(SimpleRateMarketEnvironment)) { leaseCurve = ((ISimpleRateMarketEnvironment)marketEnvironment).GetRateCurve(); LeaseDiscountCurveName = leaseCurve.GetPricingStructureId().UniqueIdentifier; } if (marketEnvironment.GetType() == typeof(SwapLegEnvironment)) { leaseCurve = ((ISwapLegEnvironment)marketEnvironment).GetDiscountRateCurve(); LeaseDiscountCurveName = leaseCurve.GetPricingStructureId().UniqueIdentifier; } if (marketEnvironment.GetType() == typeof(MarketEnvironment)) { leaseCurve = (IRateCurve)modelData.MarketEnvironment.GetPricingStructure(LeaseDiscountCurveName); } //2. Set the rate and the Multiplier analyticModelParameters.Multiplier = Multiplier; //analyticModelParameters.Quote = QuoteValue; analyticModelParameters.GrossAmount = StartAmount; analyticModelParameters.StepUp = LeaseRate; //3. Get the discount factors analyticModelParameters.PaymentDiscountFactors = GetDiscountFactors(leaseCurve, AdjustedPeriodDates, modelData.ValuationDate); //4. Get the Weightings analyticModelParameters.Weightings = Weightings; //5. Set the analytic input parameters and Calculate the respective metrics AnalyticModelParameters = analyticModelParameters; CalculationResults = AnalyticsModel.Calculate <ILeaseAssetResults, LeaseAssetResults>(analyticModelParameters, metricsToEvaluate); //ExpectedCashflows = //CashflowPVs = return(GetValue(CalculationResults)); }
///// <summary> ///// Gets the priceable coupons. ///// </summary> ///// <value>The priceable coupons.</value> //public List<InstrumentControllerBase> Payments //{ // get // { // List<InstrumentControllerBase> result = null; // if (Payments != null && Payments.Count > 0) // { // result = new List<InstrumentControllerBase>(Payments); // } // return result; // } //} ///// <summary> ///// Gets the stream payment dates. ///// </summary> ///// <value>The stream payment dates.</value> //public IList<DateTime> StreamPaymentDates //{ // get // { // var datesList = Coupons.Select(coupon => coupon.PaymentDate).ToList(); // datesList.Sort(); // return datesList; // } //} #endregion #region Constructors /// <summary> /// /// </summary> public PriceableLease() { Multiplier = 1.0m; AnalyticsModel = new LeaseAssetAnalytic(); }