question

Upvotes
Accepted
3 1 1 2

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.

refinitiv-dataplatform-eikonvolatilityvolatility-surface
icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Hi @qhumeid

Can you provide some additional details such as a list of Option RICs and the dates so we can confirm the behavior?

I'm using historical Option RICS, for example: "EFOM8000X1^L21", which is the 80 strike put expired December 21. Getting data for a single option over a year is fine, but since I want the ATM IV, I would have to get the data over a large range of strikes, say 30-90, which takes some time to get. So I was wondering if getting the IV for many options but only for a single date would be doable. On Excel it is very easy, but I'd rather be working with python.

Hi @qhumeid,

Thank you for your participation in the forum. Is the reply below satisfactory in resolving your query?

If so please can you click the 'Accept' text next to the appropriate reply? This will guide all community members who have a similar question.


Thanks,

AHS

1 Answer

· Write an Answer
Upvotes
Accepted
17.2k 82 39 63

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.

icon clock
10 |1500

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.

Hi, thanks for your reply, I'll have a look at the links.


On Excel, I basically have a column with historical prices which I map to the historical option RIC. For each option RIC, I then get the IV on price date.


=TR(OPTION_RIC,"TR.IMPLIEDVOLATILITY","Frq=D SDate=#1 EDate=#2",,Y7,Y7)

Write an Answer

Hint: Notify or tag a user in this post by typing @username.

Up to 2 attachments (including images) can be used with a maximum of 512.0 KiB each and 1.0 MiB total.