Example #1
0
        private RatesCurveGroup buildGroup(RatesCurveGroupDefinition groupDefn, RatesCurveCalibrator calibrator, MarketData marketData, ReferenceData refData)
        {
            // perform the calibration
            ImmutableRatesProvider calibratedProvider = calibrator.calibrate(groupDefn, marketData, refData);

            return(RatesCurveGroup.of(groupDefn.Name, calibratedProvider.DiscountCurves, calibratedProvider.IndexCurves));
        }
Example #2
0
        public virtual MarketDataBox <RatesCurveGroup> build(RatesCurveGroupId id, MarketDataConfig marketDataConfig, ScenarioMarketData marketData, ReferenceData refData)
        {
            // create the calibrator, using the configured RootFinderConfig if found
            RootFinderConfig     rfc        = marketDataConfig.find(typeof(RootFinderConfig)).orElse(RootFinderConfig.standard());
            RatesCurveCalibrator calibrator = RatesCurveCalibrator.of(rfc.AbsoluteTolerance, rfc.RelativeTolerance, rfc.MaximumSteps, calibrationMeasures);

            // calibrate
            CurveGroupName            groupName      = id.CurveGroupName;
            RatesCurveGroupDefinition configuredDefn = marketDataConfig.get(typeof(RatesCurveGroupDefinition), groupName);

            return(buildCurveGroup(configuredDefn, calibrator, marketData, refData, id.ObservableSource));
        }
Example #3
0
        // calibrates when there are multiple groups
        private MarketDataBox <RatesCurveGroup> buildMultipleCurveGroups(RatesCurveGroupDefinition configuredGroup, RatesCurveCalibrator calibrator, MarketDataBox <LocalDate> valuationDateBox, IList <MarketDataBox <RatesCurveInputs> > inputBoxes, IDictionary <ObservableId, LocalDateDoubleTimeSeries> fixings, ReferenceData refData)
        {
            int scenarioCount = RatesCurveGroupMarketDataFunction.scenarioCount(valuationDateBox, inputBoxes);

            ImmutableList.Builder <RatesCurveGroup> builder = ImmutableList.builder();

            for (int i = 0; i < scenarioCount; i++)
            {
                LocalDate valuationDate = valuationDateBox.getValue(i);
                RatesCurveGroupDefinition filteredGroup   = configuredGroup.filtered(valuationDate, refData);
                IList <RatesCurveInputs>  curveInputsList = inputsForScenario(inputBoxes, i);
                MarketData inputs = inputsByKey(valuationDate, curveInputsList, fixings);
                builder.add(buildGroup(filteredGroup, calibrator, inputs, refData));
            }
            ImmutableList <RatesCurveGroup> curveGroups = builder.build();

            return(MarketDataBox.ofScenarioValues(curveGroups));
        }
Example #4
0
        // calibrates when there is a single group
        private MarketDataBox <RatesCurveGroup> buildSingleCurveGroup(RatesCurveGroupDefinition configuredGroup, RatesCurveCalibrator calibrator, LocalDate valuationDate, IList <MarketDataBox <RatesCurveInputs> > inputBoxes, IDictionary <ObservableId, LocalDateDoubleTimeSeries> fixings, ReferenceData refData)
        {
            RatesCurveGroupDefinition filteredGroup = configuredGroup.filtered(valuationDate, refData);
//JAVA TO C# CONVERTER TODO TASK: Method reference arbitrary object instance method syntax is not converted by Java to C# Converter:
//JAVA TO C# CONVERTER TODO TASK: Most Java stream collectors are not converted by Java to C# Converter:
            IList <RatesCurveInputs> inputs = inputBoxes.Select(MarketDataBox::getSingleValue).collect(toImmutableList());
            MarketData      inputValues     = inputsByKey(valuationDate, inputs, fixings);
            RatesCurveGroup curveGroup      = buildGroup(filteredGroup, calibrator, inputValues, refData);

            return(MarketDataBox.ofSingleValue(curveGroup));
        }
Example #5
0
        //-------------------------------------------------------------------------
        /// <summary>
        /// Builds a curve group given the configuration for the group and a set of market data.
        /// </summary>
        /// <param name="configuredGroup">  the definition of the curve group </param>
        /// <param name="calibrator">  the calibrator </param>
        /// <param name="marketData">  the market data containing any values required to build the curve group </param>
        /// <param name="refData">  the reference data, used for resolving trades </param>
        /// <param name="obsSource">  the source of observable market data </param>
        /// <returns> a result containing the curve group or details of why it couldn't be built </returns>
        internal virtual MarketDataBox <RatesCurveGroup> buildCurveGroup(RatesCurveGroupDefinition configuredGroup, RatesCurveCalibrator calibrator, ScenarioMarketData marketData, ReferenceData refData, ObservableSource obsSource)
        {
            // find and combine all the input data
            CurveGroupName groupName = configuredGroup.Name;

//JAVA TO C# CONVERTER TODO TASK: Most Java stream collectors are not converted by Java to C# Converter:
            IList <MarketDataBox <RatesCurveInputs> > inputBoxes = configuredGroup.CurveDefinitions.Select(curveDefn => curveInputs(curveDefn, marketData, groupName, obsSource)).collect(toImmutableList());
            MarketDataBox <LocalDate> valuationDates             = marketData.ValuationDate;
            // If any of the inputs have values for multiple scenarios then we need to build a curve group for each scenario.
            // If all inputs contain a single value then we only need to build a single curve group.
            bool multipleValuationDates = valuationDates.ScenarioValue;
            bool multipleValues         = inputBoxes.Any(MarketDataBox.isScenarioValue);
            IDictionary <ObservableId, LocalDateDoubleTimeSeries> fixings = extractFixings(marketData);

            return(multipleValues || multipleValuationDates?buildMultipleCurveGroups(configuredGroup, calibrator, valuationDates, inputBoxes, fixings, refData) : buildSingleCurveGroup(configuredGroup, calibrator, valuationDates.SingleValue, inputBoxes, fixings, refData));
        }