/// <summary> /// Stores all relevant curve data. /// </summary> /// <param name="curveType">The curve type: Parent or Child</param> /// <param name="assetClass">The asset class: fx, rates etc.</param> /// <param name="properties">The properties for that curve. </param> public PricingStructureData(CurveType curveType, Constants.AssetClass assetClass, NamedValueSet properties) { CurveType = curveType; AssetClass = assetClass; PricingStructureRiskSetType = PricingStructureRiskSetType.Parent; try { var pricingStructureRiskSetType = properties.GetValue <string>("PricingStructureRiskSetType", false); if (pricingStructureRiskSetType != null) { var result = EnumHelper.Parse <PricingStructureRiskSetType>(pricingStructureRiskSetType); PricingStructureRiskSetType = result; } } catch (System.Exception) { var exception = new System.Exception("PricingStructureRiskSetType does not exist"); throw exception; } }
/// <summary> /// Creates the basic rate curve risk set, using the current curve as the base curve. /// This function takes a curves, creates a rate curve for each instrument and applying /// supplied basis point perturbation/spread to the underlying instrument in the spread curve /// </summary> /// <param name="basisPointPerturbation">The basis point perturbation.</param> /// <param name="pricingStructureRiskSetType">This determine which assets to perturb. </param> /// <returns>A list of perturbed rate curves</returns> private List <IPricingStructure> CreateCurveRiskSet(decimal basisPointPerturbation, PricingStructureRiskSetType pricingStructureRiskSetType) { var structures = new List <IPricingStructure>(); if (PriceableRateSpreadAssets == null) { return(structures); } //Add the spread asset perturbed curves. // //Set the parameters and properties. decimal perturbation = basisPointPerturbation / 10000.0m; NamedValueSet properties = GetPricingStructureId().Properties.Clone(); properties.Set("PerturbedAmount", basisPointPerturbation); string uniqueId = GetPricingStructureId().UniqueIdentifier; int index = 0; //Perturb the base curve quote set if (BaseCurve.PriceableRateAssets != null && pricingStructureRiskSetType != PricingStructureRiskSetType.Child) { var basequotes = GetMarketQuotes(BaseCurve.PriceableRateAssets); foreach (var instrument in BaseCurve.PriceableRateAssets) { var perturbations = new decimal[basequotes.Count]; basequotes.CopyTo(perturbations); //Clone the properties. NamedValueSet curveProperties = properties.Clone(); perturbations[index] = basequotes[index] + perturbation; curveProperties.Set("PerturbedAsset", instrument.Id); curveProperties.Set("BaseCurve", uniqueId); curveProperties.Set(CurveProp.UniqueIdentifier, uniqueId + "." + instrument.Id); curveProperties.Set(CurveProp.Tolerance, Tolerance); //Perturb the quotes PerturbedPriceableAssets(BaseCurve.PriceableRateAssets, perturbations); //Create the new curve. var baseCurve = new RateCurve(curveProperties, BaseCurve.PriceableRateAssets, Holder); IPricingStructure rateCurve = new RateBasisCurve(curveProperties, baseCurve, PriceableRateSpreadAssets, Holder); structures.Add(rateCurve); //Set the counter. perturbations[index] = 0; index++; } } //Perturb the spread curve quotes if (pricingStructureRiskSetType != PricingStructureRiskSetType.Parent) { var spreadquotes = GetMarketQuotes(PriceableRateSpreadAssets); index = 0; foreach (var instrument in PriceableRateSpreadAssets) { var perturbations = new decimal[spreadquotes.Count]; spreadquotes.CopyTo(perturbations); //Clone the properties. NamedValueSet curveProperties = properties.Clone(); perturbations[index] = spreadquotes[index] + perturbation; curveProperties.Set("PerturbedAsset", instrument.Id); curveProperties.Set("BaseCurve", uniqueId); curveProperties.Set(CurveProp.UniqueIdentifier, uniqueId + "." + instrument.Id); curveProperties.Set(CurveProp.Tolerance, Tolerance); //Perturb the quotes PerturbedPriceableAssets(new List <IPriceableRateAssetController>(PriceableRateSpreadAssets), perturbations); IPricingStructure rateCurve = new RateBasisCurve(curveProperties, BaseCurve, PriceableRateSpreadAssets, Holder); structures.Add(rateCurve); //Set the counter. perturbations[index] = 0; index++; } } return(structures); }
/// <summary> /// Stores all relevant curve data. /// </summary> /// <param name="curveType">The curve type: Parent or Child</param> /// <param name="assetClass">The asset class: fx, rates etc.</param> public PricingStructureData(CurveType curveType, Constants.AssetClass assetClass) { CurveType = curveType; AssetClass = assetClass; PricingStructureRiskSetType = PricingStructureRiskSetType.Parent; }