Efficient Way to Get Historical ATM Implied Volatility

I'm trying to find an efficient way to download the Historical ATM Implied Volatility using python.

Currently, I use the following code to get the historical volatility for some options:

vol_df = rd.get_history(universe=option_ric, fields=["IMP_VOLT], 
interval="1D", start=start_date_2, end=end_date_2)

But I realized when I add too many instruments, the process starts becomes very slow.

So instead of getting the whole volatility surface and then trying to check which option is currently ATM, I was wondering if there is a faster or smarter way to do this. Using a "for" loop is also slow...


Appreciate any help.

Best Answer

  • nick.zincone
    nick.zincone admin
    Answer ✓

    Hi @qhumeid

    It may be possible to utilize the IPA (Instrument Pricing Analytics) APIs. The Volatility Surfaces interface does document an input property 'atmToleranceIntervalPercent' defined as:

    This parameter allows to specify the at-the-money interval width. When it's set to 1(the default value), call options with moneyness <99% and put options with moneyness>101% will be excluded.

    The challenge may be that you are looking for expired options, which are very hard to get.

    It might also be useful to look at the article: Instrument Pricing Analytics - Volatility and Surfaces to give you an idea of how to retrieve it in Python. It also might be helpful if you provide the coding you perform in Excel - with a typical example. This may help in mapping what you are doing there to something that may be equivalent in Python. Another option is to reach out to the Refinitiv Helpdesk. They will involve a content specialist who can direct which API/service might be best suited for your requirement.

Answers