Quantitative Finance Stack Exchange is a question and answer site for finance professionals and academics. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

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?

share|improve this question
up vote 2 down vote accepted

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


share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.