Skip to content
All library documents

Fixing Optionlet Stripping Inputs: Quote Units and Index Tenor

Article Quant Q&A · Author: LCC

Summary

This troubleshooting account describes a failed attempt to bootstrap an optionlet volatility surface from cap and floor volatility data with QuantLibXL. The failure appeared during optionlet volatility calculation, with a root search unable to bracket a solution and an unexpectedly high displayed at-the-money rate.

The resolution identifies two input mismatches: the market figures were percentages and needed conversion by dividing by 100, and the Ibor index supplied to the stripper needed a one-year tenor rather than the six-month tenor used. The example shows how quote scaling and index conventions can cause apparently numerical or rate-fixing problems during volatility-surface construction. It is a specific diagnostic report, not a general guide to bootstrapping, and it does not discuss calibration choices or broader validation of the resulting surface.

Key ideas

  • Confirm whether volatility quotes are expressed as percentages and convert them to the units expected by the library.
  • Match the Ibor index tenor to the convention required by the optionlet stripper.
  • A root-bracketing failure can stem from inconsistent input units or index settings.
  • Unexpected at-the-money rates can be a symptom of setup mismatches rather than a solver defect.

Tags

Full text
# QuantLibXL - Optionlet bootstrapping failure


# QuantLibXL - Optionlet bootstrapping failure












I am trying to bootstrap the Optionlet volatility surface from a Cap/Floor volatility surface using QuantLibXL. To be specific, the data is from ICAP:

```
    STK  ATM   0  0.25  0.5  [...]
1Y  0.31 77.95    81.9  71.8
18M 0.34 83.08    89.2  76.6
2Y  0.37 86.03    96.2  80.1
[...]
```

Now, I can set up without errors `qlCapFloorVolTermSurface`, and `qlOptionletStripper1`, but when I trigger the actual computation, e.g., with `qlOptionletStripper1CapFloorVolatilities`, I get the error

```
qlOptionletStripper1CapFloorVolatilities - could not bootstrap optionlet
type: Put
strike: 25.000000 %
atm: 1.311340 %
price: 0.125286
annuity: 0.501145
expiry: March 22nd, 2017
error: root not bracketed f[0,24] -> [-1.3213e-002, -1]
```

I understand that the root searching algorithm cannot find a solution in the specified range, but what can one do here in practice? Have I missed something?

Additional info:

- The optionlet stripper takes as argument an IborIndex, for which I am using an Euribor object with an `qlInterpolatedYieldCurve` on a composite yield curve called "(45) - Euro" in Bloomberg.

- Strangely, the ATM rate indicated in the output does not at all match what it should be, namely according to the optionletstripper1.cpp: atmOptionletRate_[i] = iborIndex_->fixing(optionletDates_[i]);

The fixing at March 22nd, 2017 retrieved with qlYieldTSZeroRate, is 0.60310%, not 1.311340%. Any ideas?

## Answer by LCC (score 2, accepted)

https://quant.stackexchange.com/a/10822

Answering my own question:

- All the indicated numbers as obtained from ICAP need to be divided by 100, as they are percentages

- The `OptionletStripper1` takes an IborIndex, which should have a tenor equal to 1Y. I had set it to 6M, and that seemed to cause problems

Ouch!

Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)

This summary was written by Stratmill's research agent from the original; it is not a copy of the source.