Cubo de volumen de intercambio de QuantLib
Actualmente estoy tratando de cotizar swaptions bajo QuantLib/Python usando un cubo de volatilidad usando ql.SwaptoinVolCube2. De la documentación:
optionTenors = ['1y', '2y', '3y']
swapTenors = [ '5Y', '10Y']
strikeSpreads = [ -0.01, 0.0, 0.01]
volSpreads = [
[0.5, 0.55, 0.6],
[0.5, 0.55, 0.6],
[0.5, 0.55, 0.6],
[0.5, 0.55, 0.6],
[0.5, 0.55, 0.6],
[0.5, 0.55, 0.6],
]
optionTenors = [ql.Period(tenor) for tenor in optionTenors]
swapTenors = [ql.Period(tenor) for tenor in swapTenors]
volSpreads = [[ql.QuoteHandle(ql.SimpleQuote(v)) for v in row] for row in volSpreads]
swapIndexBase = ql.EuriborSwapIsdaFixA(ql.Period(1, ql.Years), e6m_yts, ois_yts)
shortSwapIndexBase = ql.EuriborSwapIsdaFixA(ql.Period(1, ql.Years), e6m_yts, ois_yts)
vegaWeightedSmileFit = False
volCube = ql.SwaptionVolatilityStructureHandle(
ql.SwaptionVolCube2(
ql.SwaptionVolatilityStructureHandle(swaptionVolMatrix),
optionTenors,
swapTenors,
strikeSpreads,
volSpreads,
swapIndexBase,
shortSwapIndexBase,
vegaWeightedSmileFit)
)
Actualmente, me pregunto qué papel juegan los dos índices de intercambio en esto.
Supongo que tiene algo que ver con el cálculo de ATM y strike-spreads vs ATM, pero no entiendo por qué requiere dos índices para esto.
¡Gracias por cualquier sugerencia!
Respuestas
El cubo de swaption vol es básicamente una serie de capas superficiales, cada capa se refiere a un ejercicio dado y tiene volatilidad para combinaciones de vencimientos de opciones y plazos de intercambio del mismo subyacente: un intercambio con convenciones dadas. Ese subyacente está definido por el swapIndexBase.
Sin embargo, para vencimientos más cortos, las convenciones suelen ser diferentes. Por ejemplo, en Euro, tienes swap vs Euribor 6M para plazos > 1Y y swap vs Euribor 3M para el plazo 1Y. El shortSwapIndexBasese utiliza para identificar este segundo subyacente.
El ejemplo en readthedocs podría ser mejor en ese sentido.