/// <summary> /// Calculates the specified metric for the fast bootstrapper. /// </summary> /// <param name="interpolatedSpace">The intepolated Space.</param> /// <returns></returns> public override decimal CalculateImpliedQuote(IInterpolatedSpace interpolatedSpace) { if (AnalyticsModel == null) { AnalyticsModel = new CommoditySpreadAssetAnalytic(); // DependencyCreator.Resolve<IModelAnalytic<ISimpleAssetParameters, RateMetrics>>(_modelIdentifier); } //3. Get the Rate var endDF = GetIndex(interpolatedSpace, RiskMaturityDate, BaseDate); var analyticModelParameters = new CommodityAssetParameters { CommodityForward = endDF }; Values = new[] { endDF }; if (Spread != null) { analyticModelParameters.Spread = MarketQuoteHelper.NormaliseGeneralPriceUnits(SpreadQuotationType, Spread, "MarketQuote").value; } AnalyticResults = new CommoditySpreadAssetResults(); //4. Set the anaytic input parameters and Calculate the respective metrics // AnalyticResults = AnalyticsModel.Calculate <ICommoditySpreadAssetResults, CommoditySpreadAssetResults>(analyticModelParameters, new[] { CommoditySpreadMetrics.ImpliedQuote }); return(AnalyticResults.ImpliedQuote); }
/// <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 CommoditySpreadAssetAnalytic(); //DependencyCreator.Resolve<IModelAnalytic<ISimpleAssetParameters, SpreadMetrics>>(_modelIdentifier); var metrics = MetricsHelper.GetMetricsToEvaluate(Metrics, AnalyticsModel.Metrics); // Determine if DFAM has been requested - if so thats all we evaluate - every other metric is ignored var bEvalDiscountFactorAtMaturity = false; if (metrics.Contains(CommoditySpreadMetrics.IndexAtMaturity)) { bEvalDiscountFactorAtMaturity = true; metrics.RemoveAll( metricItem => metricItem != CommoditySpreadMetrics.IndexAtMaturity); } var analyticModelParameters = new CommodityAssetParameters(); AnalyticResults = new CommoditySpreadAssetResults(); var metricsToEvaluate = metrics.ToArray(); var marketEnvironment = modelData.MarketEnvironment; ICommodityCurve curve = null; //1. instantiate curve if (marketEnvironment.GetType() == typeof(SimpleMarketEnvironment)) { curve = (ICommodityCurve)((ISimpleMarketEnvironment)marketEnvironment).GetPricingStructure(); CurveName = curve.GetPricingStructureId().UniqueIdentifier; } if (marketEnvironment.GetType() == typeof(SimpleCommodityMarketEnvironment)) { curve = ((ISimpleCommodityMarketEnvironment)marketEnvironment).GetCommodityCurve(); CurveName = curve.GetPricingStructureId().UniqueIdentifier; } if (marketEnvironment.GetType() == typeof(MarketEnvironment)) { curve = (ICommodityCurve)modelData.MarketEnvironment.GetPricingStructure(CurveName); } var endDF = GetIndex(curve, RiskMaturityDate, modelData.ValuationDate); Values = new[] { endDF }; //3. Get the end discount factor analyticModelParameters.CommodityForward = endDF; if (Spread != null) { analyticModelParameters.Spread = MarketQuoteHelper.NormaliseGeneralPriceUnits(SpreadQuotationType, Spread, "Price").value; } if (bEvalDiscountFactorAtMaturity) { //4. Set the anaytic input parameters and Calculate the respective metrics AnalyticResults = AnalyticsModel.Calculate <ICommoditySpreadAssetResults, CommoditySpreadAssetResults>(analyticModelParameters, metricsToEvaluate); ValueAtMaturity = AnalyticResults.IndexAtMaturity; } else { //4. Set the anaytic input parameters and Calculate the respective metrics AnalyticResults = AnalyticsModel.Calculate <ICommoditySpreadAssetResults, CommoditySpreadAssetResults>(analyticModelParameters, metricsToEvaluate); } return(GetValue(AnalyticResults)); }
/// <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 CommodityAssetAnalytic(); //DependencyCreator.Resolve<IModelAnalytic<ICommodityAssetParameters, CommodityMetrics>>(_modelIdentifier); var metrics = MetricsHelper.GetMetricsToEvaluate(Metrics, AnalyticsModel.Metrics); // Determine if DFAM has been requested - if so thats all we evaluate - every other metric is ignored var bEvalForwardAtMaturity = false; if (metrics.Contains(CommodityMetrics.IndexAtMaturity)) { bEvalForwardAtMaturity = true; metrics.RemoveAll( metricItem => metricItem != CommodityMetrics.IndexAtMaturity); } ICommodityAssetParameters analyticModelParameters = new CommodityAssetParameters(); AnalyticResults = new CommodityAssetResults(); var metricsToEvaluate = metrics.ToArray(); var marketEnvironment = modelData.MarketEnvironment; //1. instantiate curve ICommodityCurve commodityCurve = null; //1. instantiate curve if (marketEnvironment.GetType() == typeof(SimpleMarketEnvironment)) { commodityCurve = (ICommodityCurve)((ISimpleMarketEnvironment)marketEnvironment).GetPricingStructure(); CommodityCurveName = commodityCurve.GetPricingStructureId().UniqueIdentifier; } if (marketEnvironment.GetType() == typeof(SimpleCommodityMarketEnvironment)) { commodityCurve = ((ISimpleCommodityMarketEnvironment)marketEnvironment).GetCommodityCurve(); CommodityCurveName = commodityCurve.GetPricingStructureId().UniqueIdentifier; } if (marketEnvironment.GetType() == typeof(SwapLegEnvironment)) { commodityCurve = ((ISwapLegEnvironment)marketEnvironment).GetCommodityCurve(); CommodityCurveName = commodityCurve.GetPricingStructureId().UniqueIdentifier; } if (marketEnvironment.GetType() == typeof(MarketEnvironment)) { commodityCurve = (ICommodityCurve)modelData.MarketEnvironment.GetPricingStructure(CommodityCurveName); } //3. Get the Rate if (CommodityValue != null) { analyticModelParameters.CommodityForward = CommodityValue.value; } if (bEvalForwardAtMaturity) { //4. Set the anaytic input parameters and Calculate the respective metrics AnalyticResults = AnalyticsModel.Calculate <ICommodityAssetResults, CommodityAssetResults>(analyticModelParameters, metricsToEvaluate); //_forwardAtMaturity = ForwardAtMaturity; } else { analyticModelParameters.NotionalAmount = NotionalAmount; IDayCounter dc = Actual365.Instance; analyticModelParameters.YearFraction = (decimal)dc.YearFraction(modelData.ValuationDate, RiskMaturityDate); //3. Get the end discount factor - Need to fix this. analyticModelParameters.CommodityCurveForward = GetIndexAtMaturity(commodityCurve, GetRiskMaturityDate(), modelData.ValuationDate); //4. Set the anaytic input parameters and Calculate the respective metrics AnalyticResults = AnalyticsModel.Calculate <ICommodityAssetResults, CommodityAssetResults>(analyticModelParameters, metricsToEvaluate); } return(GetValue(AnalyticResults)); }