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); }
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) } }); }
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); }