}
// parameters bundle that we want to calibrate
final InflationZeroCouponCapFloorParameters parameters = new InflationZeroCouponCapFloorParameters(expiryTimes1, strikes, volatilities, PRICE_INDEX_EUR);
// Objective function that we use in the calibration
final SuccessiveRootFinderInflationZeroCouponCapFloorCalibrationObjective objective = new SuccessiveRootFinderInflationZeroCouponCapFloorCalibrationObjective(parameters, CUR);
// Calibration engine
final SuccessiveRootFinderInflationZeroCouponCapFloorCalibrationEngine<InflationProviderInterface> calibrationEngine = new SuccessiveRootFinderInflationZeroCouponCapFloorCalibrationEngine<>(
objective);
// Creation of the market prices we will use in the calibration.
//For this example we calculate the market prices using a matrix of volatility, but normally market prices should be linked to bloomberg tickers (for example or another data provider)
for (int loop1 = 0; loop1 < STRIKES.length; loop1++) {
for (int loop2 = 0; loop2 < availabelTenor.length; loop2++) {
marketPrices[loop1][loop2] = METHOD.presentValue(CAPS[loop1][loop2], BLACK_INFLATION).getAmount(CUR);
}
}
// we add each instruments to the calibration engine
// here we are calibration all strikes and maturities (it is possible to calibrate on only few instruments but there is no reason to do so)
for (int loop1 = 0; loop1 < STRIKES.length; loop1++) {
for (int loop2 = 0; loop2 < availabelTenor.length; loop2++) {
calibrationEngine.addInstrument(CAPS[loop1][loop2], marketPrices[loop1][loop2]);
}
}
// We do the calibration
calibrationEngine.calibrate(MARKET.getInflationProvider());
// We tests if we
final MultipleCurrencyAmount[][] pvCapYearOnYear = new MultipleCurrencyAmount[STRIKES.length][CAPS[0].length];
for (int loop1 = 0; loop1 < STRIKES.length; loop1++) {
for (int loop2 = 0; loop2 < availabelTenor.length; loop2++) {
final Interpolator2D interpolator = objective.getInflationCapZeroCouponProvider().getBlackParameters().getVolatilitySurface().getInterpolator();
final BlackSmileCapInflationZeroCouponParameters CalibratedBlackSmileCapInflationZeroCouponParameters = new BlackSmileCapInflationZeroCouponParameters(
objective.getInflationCapZeroCouponParameters(), interpolator);
final BlackSmileCapInflationZeroCouponProvider CalibratedBlackSmileCapInflationYearOnYearProvider = new BlackSmileCapInflationZeroCouponProvider(objective.getInflationCapZeroCouponProvider()
.getInflationProvider(),
CalibratedBlackSmileCapInflationZeroCouponParameters);
pvCapYearOnYear[loop1][loop2] = METHOD.presentValue(CAPS[loop1][loop2], CalibratedBlackSmileCapInflationYearOnYearProvider);
assertEquals("Inflaiton year on year calibration: cap/floor " + loop1, pvCapYearOnYear[loop1][loop2].getAmount(CUR), marketPrices[loop1][loop2], 1E-2);
}