示例#1
0
        /// <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);
        }
示例#2
0
        /// <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);
        }
示例#3
0
        /// <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);
        }
示例#4
0
 /// <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));
 }