コード例 #1
0
        public static AssetMeasureType Parse(string measureTypeAsString)
        {
            // ensures value is valid enum string
            AssetMeasureEnum assetMeasureEnum = AssetMeasureEnum.Undefined;

            if (measureTypeAsString != null)
            {
                assetMeasureEnum = AssetMeasureScheme.ParseEnumString(measureTypeAsString);
            }
            AssetMeasureType assetMeasureType = Create(assetMeasureEnum);

            return(assetMeasureType);
        }
コード例 #2
0
 public static BasicQuotation Create(decimal value, AssetMeasureEnum assetMeasureEnum, PriceQuoteUnitsEnum priceQuoteUnitsEnum)
 {
     return(new BasicQuotation
     {
         valueSpecified = true,
         value = value,
         measureType = new AssetMeasureType {
             Value = AssetMeasureScheme.GetEnumString(assetMeasureEnum)
         },
         quoteUnits = new PriceQuoteUnits {
             Value = PriceQuoteUnitsScheme.GetEnumString(priceQuoteUnitsEnum)
         }
     });
 }
コード例 #3
0
        private static PricingStructureValuation ApplyStress(CachedStressRule stressRule, PricingStructureValuation psvInput)
        {
            string marketQuote = AssetMeasureScheme.GetEnumString(AssetMeasureEnum.MarketQuote);
            string decimalRate = PriceQuoteUnitsScheme.GetEnumString(PriceQuoteUnitsEnum.DecimalRate);
            var    psv         = BinarySerializerHelper.Clone(psvInput);
            // extract the market quotes from the cloned base curve
            QuotedAssetSet curveDefinition;

            if (psv is YieldCurveValuation yieldCurveValuation)
            {
                curveDefinition = yieldCurveValuation.inputs;
            }
            else
            {
                if (psv is FxCurveValuation curveValuation)
                {
                    curveDefinition = new QuotedAssetSet
                    {
                        instrumentSet = curveValuation.spotRate.instrumentSet,
                        assetQuote    = curveValuation.spotRate.assetQuote
                    };
                }
                else
                {
                    throw new NotSupportedException("Unsupported PricingStructureValuation type: " +
                                                    psv.GetType().Name);
                }
            }
            // stress the market quotes
            foreach (BasicAssetValuation asset in curveDefinition.assetQuote)
            {
                var stressDefQuotes = new List <BasicQuotation>();
                foreach (BasicQuotation quote in asset.quote)
                {
                    if (quote.measureType.Value.Equals(marketQuote) &&
                        quote.quoteUnits.Value.Equals(decimalRate))
                    {
                        var exprProps = new NamedValueSet(new NamedValue("MarketQuote", quote.value));
                        quote.valueSpecified = true;
                        quote.value          = Convert.ToDecimal(stressRule.UpdateExpr.Evaluate(exprProps));
                    }
                    quote.informationSource      = null;
                    quote.timeSpecified          = false;
                    quote.valuationDateSpecified = false;
                    stressDefQuotes.Add(quote);
                }
                asset.quote = stressDefQuotes.ToArray();
            }
            // replace the market quotes in the cloned base curve with the stressed values
            if (psv is YieldCurveValuation valuation)
            {
                valuation.inputs = curveDefinition;
                valuation.discountFactorCurve = null;
                valuation.zeroCurve           = null;
            }
            else
            {
                ((FxCurveValuation)psv).spotRate
                    = new FxRateSet
                    {
                    instrumentSet = curveDefinition.instrumentSet,
                    assetQuote    = curveDefinition.assetQuote
                    };
            }
            return(psv);
        }