Skip to content

Instantly share code, notes, and snippets.

@databento-bot
databento-bot / get_atm_options_bbo.py
Last active December 4, 2025 15:27
Get BBO of ATM options for an underlying stock using Databento
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
get_atm_options_bbo.py
==============
Get BBO of ATM options for an underlying stock using Databento.
This example uses the "cbbo-1s" schema for 1-second granularity, but you can substitute
with "cmbp-1" or "cbbo-1m" for higher/lower granularity.
@databento-bot
databento-bot / opra_occ.py
Last active December 4, 2025 09:59
Minimal example of requesting equity options on Databento with OCC symbology
import databento as db
client = db.Historical("YOUR_API_KEY")
# Requesting a specific strike
data = client.timeseries.get_range(
dataset="OPRA.PILLAR",
schema="cmbp-1",
stype_in="raw_symbol",
symbols=["SPY 241115P00525000"],
@databento-bot
databento-bot / eth_high_low.py
Last active November 8, 2025 05:56
Get daily high/low values and times they occurred for ES futures outside regular US cash session hours
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
eth_high_low.py
==============
Calculates daily high/low occurrences for ES futures outside regular US cash session hours
using Databento API.
Fetches second-by-second OHLCV data for ES continuous futures from Databento,
filters to exclude regular US cash session (9:30 AM - 4:00 PM ET), then computes
@databento-bot
databento-bot / cme_fx_link.py
Last active October 22, 2025 05:30
Retrieve CME FX Link order book data with Databento
@databento-bot
databento-bot / filter_csv.py
Last active August 18, 2025 01:11
Filter for specific symbol on Databento CSV data - Using pandas vs. polars vs. bash
# Side-by-side comparison of pandas vs. polars syntax for reading CSV and filtering by symbol
import pandas as pd
import polars as pl
CSVFILE = "glbx-mdp3-20250716-20250815.ohlcv-1m.csv.zst"
# Using pandas
df = pd.read_csv(CSVFILE)
@databento-bot
databento-bot / databento.csv
Last active July 15, 2025 00:25
OPRA US options data: Comparison of Databento CMBP-1 vs. other vendor quotes
We can make this file beautiful and searchable if this error is corrected: It looks like row 7 should actually have 18 columns, instead of 15 in line 6.
ts_recv,ts_event,rtype,publisher_id,instrument_id,action,side,price,size,flags,ts_in_delta,bid_px_00,ask_px_00,bid_sz_00,ask_sz_00,bid_pb_00,ask_pb_00,symbol
2023-03-28 09:30:00.067424405-04:00,2023-03-28 09:30:00.067217664-04:00,177,30,654313225,A,N,326.77,1,194,0,321.77,326.77,1,1,0,0,SPY 241220P00720000
2023-03-28 09:30:00.182559853-04:00,2023-03-28 09:30:00.182352128-04:00,177,30,654313225,A,N,,0,194,0,,,0,0,0,0,SPY 241220P00720000
2023-03-28 09:30:00.463387013-04:00,2023-03-28 09:30:00.463180032-04:00,177,30,654313225,A,N,329.22,1,194,0,319.22,329.22,1,1,0,0,SPY 241220P00720000
2023-03-28 09:30:00.536456272-04:00,2023-03-28 09:30:00.536249088-04:00,177,30,654313225,A,N,328.28,1,194,0,319.22,328.28,1,1,0,0,SPY 241220P00720000
2023-03-28 09:30:00.537369130-04:00,2023-03-28 09:30:00.537161984-04:00,177,30,654313225,A,N,318.28,1,194,0,318.28,328.28,1,1,0,0,SPY 241220P00720000
2023-03-28 09:30:00.661258449-04:00,2023-03-28 09:30:00.661050624-04:00,177,30,654313225,A,N,328.28,1,194,0,318.28,328.28,2,
@databento-bot
databento-bot / interpolate_ohlcv.py
Last active July 6, 2025 07:23
Interpolate OHLCV-1s on Databento to ensure exactly one row per second
"""
Databento follows the standard convention of only printing OHLCV records when
trades actually occur within the interval. If no trade occurs within the interval,
no record is printed.
This approach is adopted by most data vendors for two key reasons:
1. Multiple interpolation strategies exist and the optimal choice depends on the
specific use case. Client-side interpolation keeps the strategy transparent.
2. This reduces storage and bandwidth requirements, especially for markets with
many illiquid instruments like options.
@databento-bot
databento-bot / resample_ohlcv.py
Created July 6, 2025 06:26
Resample 1-minute OHLCV bars to 5-minute OHLCV bars on Databento
import pandas as pd
import databento as db
client = db.Historical()
data = client.timeseries.get_range(
dataset="XNAS.ITCH",
schema="ohlcv-1m",
symbols="AAPL",
@databento-bot
databento-bot / ng_summary.py
Created July 6, 2025 04:40
Get trade counts on all listed NG outrights
import databento as db
import pandas as pd
client = db.Historical()
def print_ng_summary_by_date(date_str: str):
date = pd.to_datetime(date_str)
weekday = date.weekday()
ts_event rtype publisher_id instrument_id action side price size channel_id order_id flags ts_in_delta sequence symbol
ts_recv
2025-04-25 13:30:00.002415517+00:00 2025-04-25 13:30:00.000435143+00:00 160 1 42003627 F A 5510.25 2 8 6863196218407 0 14070 333790855 MESM5
2025-04-25 13:30:00.002415517+00:00 2025-04-25 13:30:00.000435143+00:00 160 1 42003627 F A 5510.25 1 8 6863196218557 0 14070 333790855 MESM5
2025-04-25 13:30:00.002415517+00:00 2025-04-25 13:30:00.000435143+00:00 160 1 42003627 F A 5510.50 1 8 6863196218273 0 14070 333790855 MESM5
2025-04-25 13:30:00.002495446+00:00 2025-04-25 13:30:00.000756343+00:00 160 1 42003627 F A 5510.50 1 8 6863196218273 0 12976 333790857 MESM5
2025-04-25 13:30