How to retrieve interest rate volatility cube

Hi, I am currently trying to understand the response of the example code in here:

1626170780476.png

1626170726046.png

Firstly, I would like to know if it is possible and how to retrieve the normal volatilities.

I would also like to understand what is the content of 'calibrationParameters', the data structure is not well defined and there are negative values.

Finally, this volatility data is Bid, Ask or Mid? Is there any way to indicate it in the header?

Thank you.


Best Answer

  • Michel B
    Answer ✓

    Hi @YERAY SOSA ALONSO

    Indeed, as the model is calibrated from market data, we would expect a perfect market vol repricing, from one shift to another one.

    Page 7 of the attached document will give you the SABR formulas calibrated against market log and normal vols. Generally speaking the SABR formulas return a different volatility depending on the chosen epsilon/shift, so even if the model parameters are adapted, different shifts will yield slightly different calibrated volatilities.

    Volatility_Cube_Construction.pdf

    The calibrated volatility differs significantly (up to 1bp) when the shift moves from 3% to say, 2%. In that case on EUR, it means we can't calibrate on the -2% (ATM relative) strike. So the calibration takes into account less market swaption smile points. In my view that can explain noticeable differences in calibrated volatility.

    When the shift is less important (say 3% to 3.1%) the impact is less important (from my tests, less than 0.1 bp).

    About your question on RDP data retrieval endpoints, i'm afraid i can't help. I believe that there is a Git repository with data retrieval samples. I think you can find several topics on this forum that address data retrieval questions

    Best Regards

    Michel


Answers

  • Hi @YERAY SOSA ALONSO

    1/ The response contains a section 'description' with:

    "inputVolatilityType": "NormalizedVolatility" => we use normal volatility as input vol for the SABR cube calibration

    and

    "outputVolatilityType": "NormalizedVolatility" =>volatility contained in 'ndimensionalArray' is normal.

    The 'calibration parameters' section contains SABR parameters for each SwaptionExpiry/SwapTenor: ATM vol, Beta, VolVol, Correl (which explains the negative values), and ATM swap rates.

    2/ The volatility is Mid because the market volatilities used as inputs for the calibration are Mid.

    About the calibration parameters data structure and price side, we will take into account your feedbacks to better describe the service response.

    Regards

    Michel


  • Hi @michelhugo.battistini ,

    Thank you for your quick response, it was clarifying, however, some new doubts came up.

    1/ If the volatilities are normal, what is actually "shiftPercent" and "strippingShiftPercent"? Is shifted SABR being used?

    2/ In the response, there is a section called "constituents" that appers to have what we need, i.e. both normal and lognormal volatilities, but the data appear as null.

    3/ Is it possible to retrieve lognormal volatilities? How?

    4/ Is there any sort of documentation to know which settings can be added to the payload of the request and their meaning?


    Kind regards

  • Hi @YERAY SOSA ALONSO

    1/ shiftPercent is a user-defined shift (in %) applied to swaption market strikes, in order to allow the calibration of SABR on negative strikes. strippingShiftPercent is the same but applied to caps strikes, when caps are used in the SABR calibration process.

    - If the request 'surfaceParameters' contains 'includeCapletsVolatility':true , then we first strip caplets volatilities, lift it at ATM swaptions vol level, and calibrate the SABR model. That's a proxy of swaption skews

    - If the request 'surfaceParameters' contains 'includeCapletsVolatility':false, then we directly calibrate the SABR cube on swaption skews. When swaption skews contributions are directly available we calibrate on skews by default.

    2/ For the moment the constituents data is not exposed because it's sensitive data that requires user permissioning. We will expose it based on user permissions, but that won't happen before Q4.

    This end point is primarily designed to return a calibrated SABR cube, not the market data the cube is calibrated from, even we will soon expose it in the response. The end point returns calculated data.

    If you are interested in market normal and lognormal vol i advise you to pull ICAP, Tullett or Fenics data from RDP data retrieval end points.

    3/ You have to ways to do that:

    - in 'surfaceLayout', you can set 'format':'List' in order to get lognormal vols

    - or in 'surfaceParameters' you can set 'outputVolatilityType':'LogNormalVolatility'

    4/ The available documentation is here: Documentation | Refinitiv Developers . But it probably requires some updates.

    You can also have a look at Swagger definition:

    API Playground (refinitiv.com)

    Best Regards

    Michel


  • Hi @michelhugo.battistini,

    Thanks again for your detailed response. I have an extra question regarding point 1:

    What I have understood about what you said about SABR calibration on negative strikes is that you are using the shifted SABR to allow for negative strikes:

    image


    So, to get the normal volatilities, I assume you are using the famous Hagan formula but adding
    s to the strike and the forward swap rate. However, I am wondering why this shift has influence on the output volatility data. I suppose that the resulting volatility data are normal volatilities that must be introduced in the Bachelier formula to price a swaption with a given tenor, expiry, and strike (without taking any shift into account in the Bachelier formula). Therefore, I didn't expect the volatility output data to change when the shift changes, but it does.

    Furthermore, I would like to ask you how to pull data from the RDP data retrieval endpoints that you mentioned in your response. Is that the same as the API playground? Is there any documentation about how to use that service? I have used the RDP Library in C# to retrieve data but I don't know if this is what you are referring to.

    Thank you

    Kind regards

  • Everything is clear now. Thanks!

    I have one last question. Are the strikes in the caplet surface also ATM relatives? Or it is only in the swaption cube?

  • Hi @YERAY SOSA ALONSO

    The strikes displayed in the caplets surface are absolute values (in %), because the stripping is performed on absolute strikes ('surface' cap volatility is quoted per absolute strike).

    Swaption cube strikes are ATM relatives (in basis points), for the same reason, as swaption vol skews are quoted relatively to the ATM forward swap rate.

    Michel