예제 #1
0
 /// <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;
     }
 }
예제 #2
0
        /// <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);
        }
예제 #3
0
 /// <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;
 }