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
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?
- The optionlet stripper takes as argument an IborIndex, for which I am using an Euribor object with an
qlInterpolatedYieldCurveon 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?