private void checkCalibrationNormal(
DoubleArray moneyness,
DoubleArray normalVol,
DoubleArray startParameters,
BitSet fixed,
double shift,
double tolerance) {
Pair<LeastSquareResultsWithTransform, DoubleArray> rComputed = SABR_CALIBRATION
.calibrateLsShiftedFromNormalVolatilities(BDA, CALIBRATION_TIME, ACT_365F, EXPIRY_PERIOD, FORWARD,
moneyness, ValueType.SIMPLE_MONEYNESS, normalVol, startParameters, fixed, shift);
SabrFormulaData sabrComputed = SabrFormulaData.of(rComputed.getFirst().getModelParameters().toArrayUnsafe());
for (int i = 0; i < moneyness.size(); i++) {
double ivComputed = SABR_FORMULA.volatility(
FORWARD + shift,
FORWARD + moneyness.get(i) + shift,
TIME_EXPIRY,
sabrComputed.getAlpha(),
sabrComputed.getBeta(),
sabrComputed.getRho(),
sabrComputed.getNu());
double priceComputed = BlackFormulaRepository.price(FORWARD + shift, FORWARD + moneyness.get(i) + shift,
TIME_EXPIRY, ivComputed, true);
double priceNormal = NormalFormulaRepository.price(FORWARD, FORWARD + moneyness.get(i),
TIME_EXPIRY, normalVol.get(i), PutCall.CALL);
assertEquals(priceComputed, priceNormal, tolerance);
}
}