Resample US equity options NBBO
Overview
This example shows how to use the Historical client to retrieve the regional and consolidated best bid and offer (BBO) for the US equities market from the OPRA dataset. From this, we'll filter out the NBBO and then downsample at a 1-minute interval. To do this we will use pandas, specifically the DataFrame.groupby
method.
Note that sometimes the BBO is referred to as a quote, and ask and offer are synonyms referring to the sell price.
MBP-1 schema
We'll use the MBP-1 schema in this example, which contains the price and size for both the bid and the ask.
For datasets such as OPRA that cover multiple execution venues (exchanges), the publisher_id
field indicates which venue the record is associated with.
There will be records for each individual venue to indicate the regional BBO, and then an additional record to represent the consolidated NBBO.
For the OPRA dataset, which is the SIP for US equity options, the consolidated publisher_id
is 30
(venue OPRA
).
Trades, which are included in the MBP-1 schema as records with action=T
, also use publisher_id
to indicate which venue they occurred on.
See also
Example
import databento as db
import pandas as pd
# First, create a historical client
client = db.Historical("$YOUR_API_KEY")
# Next, request MBP-1 for the SPIKE options chain (a volatility index)
df = client.timeseries.get_range(
dataset="OPRA.PILLAR",
start="2023-07-03",
schema="mbp-1",
stype_in="parent",
symbols="SPIKE.OPT",
limit=20_000,
).to_df()
# Only include NBBO records (`publisher_id == 30`)
df = df[df["publisher_id"] == db.Publisher.OPRA_PILLAR_OPRA.to_int()]
# Resample the data at a fixed one minute interval, per symbol
df_1m = df.groupby([pd.Grouper(freq="1T"), "symbol"]).first()
# Print the NBBO
print(df_1m[["bid_px_00", "ask_px_00"]])
Result
bid_px_00 ask_px_00
ts_recv symbol
2023-07-03 13:30:00+00:00 SPIKE 230719C00010000 5.25 5.40
SPIKE 230719C00010500 4.75 4.90
SPIKE 230719C00011000 4.25 4.40
SPIKE 230719C00011500 3.75 3.90
SPIKE 230719C00012000 3.25 3.40
... ... ...
2023-07-03 13:34:00+00:00 SPIKE 231018C00047500 0.16 0.70
SPIKE 231018C00050000 0.12 0.66
SPIKE 231018C00055000 0.06 0.59
SPIKE 231018P00014000 0.15 0.69
SPIKE 231115C00050000 0.20 0.75
[1657 rows x 2 columns]