question

Upvotes
Accepted
1 0 0 1

How to load in live options quote data in Python using Workspace API?

I currently have Workspace open and I am looking at the derivatives tab of the SPX. It has exactly what I am looking for: different strike prices with different maturity dates and bid, ask, volume, and open interest data on those derivatives.

I am trying to load that exact data into my own Python program in real time using the api provided through Workspace. I already have a working api key and I can make basic calls about the latest prices of underlying assets and other information. What I have not been able to find is how to load live options data specifically. I have found the data item browser information for the SPX, but I do not see the relevant field for options quote data anywhere.

It's also important that I load this data using a streaming endpoint for maximum speed. I have seen example streaming code in the codebook for python, but I do not know which data fields to use to stream this live options data.

Thanks for taking the time to help me out, I really appreciate it.

workspaceworkspace-data-api#technology
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.

1 Answer

· Write an Answer
Upvotes
Accepted
5.8k 18 2 7

Hi @nathan03 ,


To see the all streaming fields for an instruments you can use the example here and miss the fields parameter and it will return all fields coming to the stream. See below:

stream = rd.open_pricing_stream(
    universe=['1SPXFZ3'],
    on_data=display_data
)

screenshot-2023-11-23-at-101612.png

Hope this will help.


Best regards,

Haykaz


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.

Thanks for the response @aramyan.h


When I try this, the response I get is a table that looks like the following:


|  | Instrument|
| 0| 1SPXFZ3   |


Here is my full code for reference:


import refinitiv.data as rd
import datetime
from IPython.display import display, clear_output

rd.open_session()

def display_data(data, instrument, stream):
    clear_output(wait=True)
    current_time = datetime.datetime.now().time()
    print(current_time, "- Data received for", instrument)
    display(data)
stream = rd.open_pricing_stream(
    universe=['1SPXFZ3'],
    on_data=display_data
)
stream.get_snapshot()

Any idea what the difference between our outputs could be here?


Thanks a lot

Hi @nathan03 ,


So do understand right that you are getting an empty dataframe? Can we just try the same thing without the callback:

stream = rd.open_pricing_stream(
    universe=['1SPXFZ3'],
)

and on a separate cell:

stream.get_snapshot()

This should return a snapshot output from the opened stream. Please note that the columns will be different from snapshot to snapshot as you get all the fields coming to the stream.


Best regards,

Haykaz

by the way, try also with an option RIC, e.g SPXWk242312000.U, maybe you don't have access to the futures feed.


Best regards,

Haykaz

Thanks for getting back to me again @aramyan.h​. I have realized that the problem I am running into is that I can use the api correctly through the "import eikon" module, but the "import refinitiv.data" module is only returning empty data series for me, even if I run the exact code from the __Examples__ code bank. I just created another question about that problem. One I get that sorted though I will return here.


Thanks again


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.