/// <summary> /// Gets the equity factor. /// </summary> /// <param name="equityCurve">The equity curve.</param> /// <param name="targetDate">The target date.</param> /// <param name="valuationDate">The valuation date.</param> /// <returns></returns> public decimal GetEquityFactor(IEquityCurve equityCurve, DateTime valuationDate, DateTime targetDate) { IPoint point = new DateTimePoint1D(valuationDate, targetDate); var discountFactor = (decimal)equityCurve.Value(point); return(discountFactor); }
/// <summary> /// Calculates the specified model data. /// </summary> /// <param name="modelData">The model data.</param> /// <returns></returns> public override BasicAssetValuation Calculate(IAssetControllerData modelData) { ModelData = modelData; if (AnalyticsModel == null) { AnalyticsModel = new EquityAssetAnalytic(); //DependencyCreator.Resolve<IModelAnalytic<ISimpleAssetParameters, RateMetrics>>(_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 bEvalIndexAtMaturity = false; if (metrics.Contains(EquityMetrics.IndexAtMaturity)) { bEvalIndexAtMaturity = true; // Remove all metrics except DFAM // metrics.RemoveAll(metricItem => metricItem != EquityMetrics.IndexAtMaturity); } var metricsToEvaluate = metrics.ToArray(); IEquityAssetParameters analyticModelParameters = new EquityAssetParameters(); CalculationResults = new EquityAssetResults(); var marketEnvironment = modelData.MarketEnvironment; IEquityCurve equitycurve = null; //1. instantiate curve if (marketEnvironment.GetType() == typeof(SimpleMarketEnvironment)) { equitycurve = (IEquityCurve)((ISimpleMarketEnvironment)marketEnvironment).GetPricingStructure(); } if (marketEnvironment.GetType() == typeof(MarketEnvironment)) { equitycurve = (IEquityCurve)modelData.MarketEnvironment.GetPricingStructure(EquityCurveName); } if (equitycurve != null) { //1. Get the current equity value from the curve. var equityValue = GetEquityFactor(equitycurve, modelData.ValuationDate, SettlementDate); //2. Set the market rate analyticModelParameters.Multiplier = Multiplier; analyticModelParameters.Quote = QuoteValue; analyticModelParameters.EquityPrice = equityValue; analyticModelParameters.NotionalAmount = Notional; //3. Set the anaytic input parameters and Calculate the respective metrics AnalyticModelParameters = analyticModelParameters; CalculationResults = AnalyticsModel.Calculate <IEquityAssetResults, EquityAssetResults>(analyticModelParameters, metricsToEvaluate); if (bEvalIndexAtMaturity) { //4. Set the anaytic input parameters and Calculate the respective metrics // IndexAtMaturity = CalculationResults.IndexAtMaturity; } return(GetValue(CalculationResults)); } return(null); }
/// <summary> /// Evaluates the implied quote. /// </summary> /// <param name="priceableAssets">The priceable assets.</param> /// <param name="equityCurve"></param> public NamedValueSet EvaluateImpliedQuote(IPriceableEquityAssetController[] priceableAssets, IEquityCurve equityCurve) { var result = new NamedValueSet(); foreach (IPriceableEquityAssetController priceableAsset in priceableAssets) { result.Set(priceableAsset.Id, priceableAsset.CalculateImpliedQuote(equityCurve)); } return(result); }
/// <summary> /// Evaluates the implied quote. /// </summary> /// <param name="fxCurve">The rate curve.</param> /// <param name="priceableAssets">The priceable assets.</param> public NamedValueSet EvaluateImpliedQuote(IEquityCurve fxCurve, IPriceableEquityAssetController[] priceableAssets) { return(EvaluateImpliedQuote(priceableAssets, fxCurve)); }