示例#1
0
        /// <summary>
        /// Gets the quoted asset set.
        /// </summary>
        /// <param name="logger">The logger.</param>
        /// <param name="cache">The cache.</param>
        ///  <param name="nameSpace">The client namespace</param>
        /// <param name="fixingCalendar">The fixingCalendar.</param>
        /// <param name="rollCalendar">The rollCalendar.</param>
        /// <returns></returns>
        public override void Build(ILogger logger, ICoreCache cache, string nameSpace, IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar)
        {
            var curveId = (VolatilitySurfaceIdentifier)PricingStructureIdentifier;

            //TODO This for backwards compatability. AnalyticalResults is the current interface.
            BootstrapResults      = new VolCurveBootstrapResults();
            PriceableOptionAssets = PriceableAssetFactory.CreatePriceableRateOptionAssets(logger, cache, nameSpace, GetVolatilityMatrix().baseDate.Value, GetVolatilityMatrix().inputs, fixingCalendar, rollCalendar);
            //GetVolatilityMatrix().dataPoints = null;
            MultiDimensionalPricingData dataPoints = GetVolatilityMatrix().dataPoints;
            DateTime baseDate               = GetVolatilityMatrix().baseDate.Value;
            var      interpolationMethod    = InterpolationMethod;
            var      extrapolationPermitted = ExtrapolationPermittedInput ?? ExtrapolationPermitted;

            BootstrapResults.Results = CapFloorBootstrapper.Bootstrap(PriceableOptionAssets, curveId.Properties, DiscountCurve, ForecastCurve, baseDate, extrapolationPermitted, interpolationMethod, Tolerance);
            IsBootstrapSuccessful    = true;
            InitialiseVolatilities(curveId.BaseDate, BootstrapResults.Results);
            //The points use tenor strings for expiry.
            var termTenors = new List <String>();

            foreach (var daysDifference in VolatilityOffsets)
            {
                termTenors.Add(daysDifference + "D");
            }
            dataPoints.point = ProcessRawSurface(termTenors, Strike, VolatilityValues, curveId.StrikeQuoteUnits, curveId.UnderlyingAssetReference);
            SetInterpolator(dataPoints, curveId.Algorithm, curveId.PricingStructureType);
        }
示例#2
0
        public CapVolatilityCurve(ILogger logger, ICoreCache cache, string nameSpace, NamedValueSet properties, QuotedAssetSet instrumentData,
                                  IRateCurve discountCurve, IRateCurve forecastCurve, IBusinessCalendar fixingCalendar, IBusinessCalendar rollCalendar)
            : this(logger, cache, nameSpace, new VolatilitySurfaceIdentifier(properties), fixingCalendar, rollCalendar)
        {
            DiscountCurve = discountCurve;
            ForecastCurve = forecastCurve;
            var curveId  = GetCurveId();
            var volCurve = SetConfigurationData();

            //TODO This for backwards compatability. AnalyticalResults is the current interface.
            Handle           = properties.GetString(CurveProp.EngineHandle, null);
            BootstrapResults = new VolCurveBootstrapResults();
            //Set the underlying asset information.
            var instrument = properties.GetString(CurveProp.Instrument, true);

            Asset = new AnyAssetReference {
                href = instrument
            };
            UnderlyingAssetDetails = CreateUnderlyingAssetWithProperties();
            var extrapolationPermitted = ExtrapolationPermittedInput ?? ExtrapolationPermitted;

            PriceableOptionAssets    = PriceableAssetFactory.CreatePriceableRateOptionAssets(logger, cache, nameSpace, curveId.BaseDate, instrumentData, fixingCalendar, rollCalendar);
            BootstrapResults.Results = CapFloorBootstrapper.Bootstrap(PriceableOptionAssets, properties, DiscountCurve, ForecastCurve, curveId.BaseDate, extrapolationPermitted,
                                                                      InterpolationMethod, Tolerance);
            IsBootstrapSuccessful = true;
            InitialiseVolatilities(curveId.BaseDate, BootstrapResults.Results);
            QuoteUnits       = EnumHelper.Parse <QuoteUnitsEnum>(properties.GetValue(CurveProp.QuoteUnits, QuoteUnitsEnum.LogNormalVolatility.ToString()));
            MeasureType      = EnumHelper.Parse <MeasureTypesEnum>(properties.GetValue(CurveProp.MeasureType, MeasureTypesEnum.Volatility.ToString()));
            StrikeQuoteUnits = EnumHelper.Parse <StrikeQuoteUnitsEnum>(properties.GetValue(CurveProp.StrikeQuoteUnits, StrikeQuoteUnitsEnum.ATMFlatMoneyness.ToString()));
            //If there is a strike specified for the curve, use it!
            IsATMBootstrap = true;
            Strike         = curveId.Strike;
            if (Strike != null)
            {
                ValidateStrike((decimal)Strike);
                IsFixedStrikeBootstrap = true;
                IsATMBootstrap         = false;
            }
            if (StrikeQuoteUnits == StrikeQuoteUnitsEnum.ATMFlatMoneyness || StrikeQuoteUnits == StrikeQuoteUnitsEnum.ATMMoneyness)
            {
                IsFixedStrikeBootstrap = false;
            }
            //The points use tenor strings for expiry.
            var termTenors = new List <String>();

            foreach (var daysDifference in VolatilityOffsets)
            {
                termTenors.Add(daysDifference + "D");
            }
            volCurve.point = ProcessRawSurface(termTenors, Strike, VolatilityValues, curveId.StrikeQuoteUnits, curveId.UnderlyingAssetReference);
            // Interpolate the curve based on the respective curve interpolation
            SetInterpolator(volCurve, curveId.Algorithm, curveId.PricingStructureType);
            CreatePricingStructure(curveId, volCurve, instrumentData);
        }