Cube de volume d'échange QuantLib
J'essaie actuellement de fixer le prix des swaptions sous QuantLib/Python en utilisant un cube de volatilité utilisant ql.SwaptoinVolCube2. De la documentation :
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)
)
Actuellement, je me demande quel rôle jouent les deux indices de swap là-dedans ?
Je suppose que cela a quelque chose à voir avec le calcul de l'ATM et des spreads de grève par rapport à l'ATM, mais je ne comprends pas pourquoi il faut deux indices pour cela.
Merci pour tout pointeur !
Réponses
Le cube de vol de swaption est essentiellement une série de couches de surface, chaque couche se réfère à une grève donnée et a des vols pour des combinaisons d'expirations d'options et de durées de swap du même sous-jacent : un swap avec des conventions données. Ce sous-jacent est défini par le swapIndexBase.
Cependant, pour les échéances plus courtes, les conventions sont souvent différentes. Par exemple, en Euro, vous avez swap contre Euribor 6M pour les durées > 1Y et swap contre Euribor 3M pour la durée 1Y. Le shortSwapIndexBasesert à identifier ce second sous-jacent.
L'exemple sur readthedocs pourrait être meilleur à cet égard.