Estoy tratando de bootstrap la superficie de volatilidad Optionlet de una superficie de volatilidad Cap / Floor utilizando QuantLibXL. Para ser específicos, los datos son de 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
[...]
Ahora, puedo configurar sin errores qlCapFloorVolTermSurface
y qlOptionletStripper1
pero cuando lanzo el cómputo real, por ejemplo, con qlOptionletStripper1CapFloorVolatilities
Me aparece el 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]
Entiendo que el algoritmo de búsqueda de raíces no puede encontrar una solución en el rango especificado, pero ¿qué se puede hacer aquí ¿en la práctica? ¿Me he perdido algo?
Información adicional:
- El optionlet stripper toma como argumento un IborIndex, para lo cual estoy utilizando un objeto Euribor con un
qlInterpolatedYieldCurve
en una curva de rendimiento compuesta llamada "(45) - Euro" en Bloomberg. -
Extrañamente, la tasa de ATM indicada en la salida no coincide en absoluto con lo que debería ser, es decir, según el optionletstripper1.cpp:
atmOptionletRate_[i] = iborIndex_->fijación(optionletDates_[i]);
La fijación a 22 de marzo de 2017 recuperada con qlYieldTSZeroRate, es 0,60310%, no 1,311340%. ¿Alguna idea?