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