A Databento US Equities Standard subscription is required to run this example.
Examples and tutorials
Options
Equity options: Introduction
Options on futures: Introduction
All options with a given underlying
Join options with underlying prices
US equity options volume by venue
Resample US equity options NBBO
Estimate implied volatility
Get symbols for 0DTE options
Calculate daily statistics for equity options
Historical data
Request a large number of symbols
Programmatic batch downloads
Best bid, best offer, and midprice
Custom OHLCV bars from trades
Join schemas on instrument ID
Plot a candlestick chart
Calculate VWAP and RSI
End-of-day pricing and portfolio valuation
Benchmark portfolio performance
Market halts, volatility interrupts, and price bands
Resample OHLCV from 1-minute to 5-minute
Algorithmic trading
A high-frequency liquidity-taking strategy
Build prediction models with machine learning
Execution slippage and markouts
Matching engine latencies
Using messaging rates as a proxy for implied volatility
Mean reversion and portfolio optimization
Pairs trading based on cointegration
Build a real-time stock screener
Core concepts
Venues and datasets
CME Globex MDP 3.0
Cboe BYX Depth
Cboe BYZ Depth
Cboe EDGA Depth
Cboe EDGX Depth
Databento US Equities Basic
Databento US Equities Mini
Databento US Equities Summary
Eurex Exchange
European Energy Exchange
ICE Endex iMpact
ICE Europe Commodities iMpact
ICE Europe Financials iMpact
ICE Futures US iMpact
IEX TOPS
MEMX Memoir
MIAX Depth of Market
Nasdaq Basic with NLS Plus
Nasdaq TotalView-ITCH
NYSE American Integrated
NYSE Arca Integrated
NYSE Texas Integrated
NYSE National Trades and BBO
NYSE Integrated
OPRA Pillar
Corporate actions
Adjustment factors
Security master
API Reference
Resources
Release notes
C++
0.42.0 - 2025-08-19
0.41.0 - 2025-08-12
0.40.0 - 2025-07-29
0.39.1 - 2025-07-22
0.39.0 - 2025-07-15
0.38.2 - 2025-07-01
0.38.1 - 2025-06-25
0.38.0 - 2025-06-10
0.37.1 - 2025-06-03
0.37.0 - 2025-06-03
0.36.0 - 2025-05-27
0.35.1 - 2025-05-20
0.35.0 - 2025-05-13
0.34.2 - 2025-05-06
0.34.1 - 2025-04-29
0.34.0 - 2025-04-22
0.33.0 - 2025-04-15
0.32.1 - 2025-04-07
0.32.0 - 2025-04-02
0.31.0 - 2025-03-18
0.30.0 - 2025-02-11
0.29.0 - 2025-02-04
0.28.0 - 2025-01-21
0.27.0 - 2025-01-07
0.26.0 - 2024-12-17
0.25.0 - 2024-11-12
0.24.0 - 2024-10-22
0.23.0 - 2024-09-25
0.22.0 - 2024-08-27
0.21.0 - 2024-07-30
0.20.1 - 2024-07-16
0.20.0 - 2024-07-09
0.19.1 - 2024-06-25
0.19.0 - 2024-06-04
0.18.1 - 2024-05-22
0.18.0 - 2024-05-14
0.17.1 - 2024-04-08
0.17.0 - 2024-04-01
0.16.0 - 2024-03-01
0.15.0 - 2024-01-16
0.14.1 - 2023-12-18
0.14.0 - 2023-11-23
0.13.1 - 2023-10-23
0.13.0 - 2023-09-21
0.12.0 - 2023-08-24
0.11.0 - 2023-08-10
0.10.0 - 2023-07-20
0.9.1 - 2023-07-11
0.9.0 - 2023-06-13
0.8.0 - 2023-05-16
0.7.0 - 2023-04-28
0.6.1 - 2023-03-28
0.6.0 - 2023-03-24
0.5.0 - 2023-03-13
0.4.0 - 2023-03-02
0.3.0 - 2023-01-06
0.2.0 - 2022-12-01
0.1.0 - 2022-11-07
Python
0.63.0 - 2025-09-02
0.62.0 - 2025-08-19
0.61.0 - 2025-08-12
0.60.0 - 2025-08-05
0.59.0 - 2025-07-15
0.58.0 - 2025-07-08
0.57.1 - 2025-06-17
0.57.0 - 2025-06-10
0.56.0 - 2025-06-03
0.55.1 - 2025-06-02
0.55.0 - 2025-05-29
0.54.0 - 2025-05-13
0.53.0 - 2025-04-29
0.52.0 - 2025-04-15
0.51.0 - 2025-04-08
0.50.0 - 2025-03-18
0.49.0 - 2025-03-04
0.48.0 - 2025-01-21
0.47.0 - 2024-12-17
0.46.0 - 2024-12-10
0.45.0 - 2024-11-12
0.44.1 - 2024-10-29
0.44.0 - 2024-10-22
0.43.1 - 2024-10-15
0.43.0 - 2024-10-09
0.42.0 - 2024-09-23
0.41.0 - 2024-09-03
0.40.0 - 2024-08-27
0.39.3 - 2024-08-20
0.39.2 - 2024-08-13
0.39.1 - 2024-08-13
0.39.0 - 2024-07-30
0.38.0 - 2024-07-23
0.37.0 - 2024-07-09
0.36.3 - 2024-07-02
0.36.2 - 2024-06-25
0.36.1 - 2024-06-18
0.36.0 - 2024-06-11
0.35.0 - 2024-06-04
0.34.1 - 2024-05-21
0.34.0 - 2024-05-14
0.33.0 - 2024-04-16
0.32.0 - 2024-04-04
0.31.1 - 2024-03-20
0.31.0 - 2024-03-05
0.30.0 - 2024-02-22
0.29.0 - 2024-02-13
0.28.0 - 2024-02-01
0.27.0 - 2024-01-23
0.26.0 - 2024-01-16
0.25.0 - 2024-01-09
0.24.1 - 2023-12-15
0.24.0 - 2023-11-23
0.23.1 - 2023-11-10
0.23.0 - 2023-10-26
0.22.1 - 2023-10-24
0.22.0 - 2023-10-23
0.21.0 - 2023-10-11
0.20.0 - 2023-09-21
0.19.1 - 2023-09-08
0.19.0 - 2023-08-25
0.18.1 - 2023-08-16
0.18.0 - 2023-08-14
0.17.0 - 2023-08-10
0.16.1 - 2023-08-03
0.16.0 - 2023-07-25
0.15.2 - 2023-07-19
0.15.1 - 2023-07-06
0.15.0 - 2023-07-05
0.14.1 - 2023-06-16
0.14.0 - 2023-06-14
0.13.0 - 2023-06-02
0.12.0 - 2023-05-01
0.11.0 - 2023-04-13
0.10.0 - 2023-04-07
0.9.0 - 2023-03-10
0.8.1 - 2023-03-05
0.8.0 - 2023-03-03
0.7.0 - 2023-01-10
0.6.0 - 2022-12-02
0.5.0 - 2022-11-07
0.4.0 - 2022-09-14
0.3.0 - 2022-08-30
HTTP API
0.35.0 - TBD
0.34.1 - 2025-06-17
0.34.0 - 2025-06-09
0.33.0 - 2024-12-10
0.32.0 - 2024-11-26
0.31.0 - 2024-11-12
0.30.0 - 2024-09-24
0.29.0 - 2024-09-03
0.28.0 - 2024-06-25
0.27.0 - 2024-06-04
0.26.0 - 2024-05-14
0.25.0 - 2024-03-26
0.24.0 - 2024-03-06
0.23.0 - 2024-02-15
0.22.0 - 2024-02-06
0.21.0 - 2024-01-30
0.20.0 - 2024-01-18
0.19.0 - 2023-10-17
0.18.0 - 2023-10-11
0.17.0 - 2023-10-04
0.16.0 - 2023-09-26
0.15.0 - 2023-09-19
0.14.0 - 2023-08-29
0.13.0 - 2023-08-23
0.12.0 - 2023-08-10
0.11.0 - 2023-07-25
0.10.0 - 2023-07-06
0.9.0 - 2023-06-01
0.8.0 - 2023-05-01
0.7.0 - 2023-04-07
0.6.0 - 2023-03-10
0.5.0 - 2023-03-03
0.4.0 - 2022-12-02
0.3.0 - 2022-08-30
0.2.0 - 2021-12-10
0.1.0 - 2021-08-30
Raw API
0.6.4 - TBD
0.6.3 - 2025-09-07
0.6.2 - 2025-08-02
0.6.1 - 2025-06-29
0.6.0 - 2025-05-24
0.5.6 - 2025-04-06
0.5.5 - 2024-12-01
0.5.4 - 2024-10-02
0.5.3 - 2024-10-02
0.5.1 - 2024-07-24
2024-07-20
2024-06-25
0.5.0 - 2024-05-25
0.4.6 - 2024-04-13
0.4.5 - 2024-03-25
0.4.4 - 2024-03-23
0.4.3 - 2024-02-13
0.4.2 - 2024-01-06
0.4.0 - 2023-11-08
0.3.0 - 2023-10-20
0.2.0 - 2023-07-23
0.1.0 - 2023-05-01
Rust
0.33.1 - TBD
0.33.0 - 2025-08-19
0.32.0 - 2025-08-12
0.31.0 - 2025-07-30
0.30.0 - 2025-07-22
0.29.0 - 2025-07-15
0.28.0 - 2025-07-01
0.27.1 - 2025-06-25
0.27.0 - 2025-06-10
0.26.2 - 2025-06-03
0.26.1 - 2025-05-30
0.26.0 - 2025-05-28
0.25.0 - 2025-05-13
0.24.0 - 2025-04-22
0.23.0 - 2025-04-15
0.22.0 - 2025-04-01
0.21.0 - 2025-03-18
0.20.0 - 2025-02-12
0.19.0 - 2025-01-21
0.18.0 - 2025-01-08
0.17.0 - 2024-12-17
0.16.0 - 2024-11-12
0.15.0 - 2024-10-22
0.14.1 - 2024-10-08
0.14.0 - 2024-10-01
0.13.0 - 2024-09-25
0.12.1 - 2024-08-27
0.12.0 - 2024-07-30
0.11.4 - 2024-07-16
0.11.3 - 2024-07-09
0.11.2 - 2024-06-25
0.11.1 - 2024-06-11
0.11.0 - 2024-06-04
0.10.0 - 2024-05-22
0.9.1 - 2024-05-15
0.9.0 - 2024-05-14
0.8.0 - 2024-04-01
0.7.1 - 2024-03-05
0.7.0 - 2024-03-01
0.6.0 - 2024-01-16
0.5.0 - 2023-11-23
0.4.2 - 2023-10-23
0.4.1 - 2023-10-06
0.4.0 - 2023-09-21
0.3.0 - 2023-09-13
0.2.1 - 2023-08-25
0.2.0 - 2023-08-10
0.1.0 - 2023-08-02
Data
2025-08-26
2025-08-05
2025-07-25
2025-07-06
2025-07-01
2025-06-27
2025-06-17
2025-06-10
2025-05-20
2025-05-07
2025-04-05
2025-04-01
2025-03-13
2025-02-26
2025-02-01
2025-01-15
2024-12-14
2024-12-03
2024-12-02
2024-10-22
2024-10-24
2024-07-05
2024-06-25
2024-06-18
2024-05-07
2024-01-18
2023-11-17
2023-10-04
2023-08-29
2023-07-23
2023-05-01
2023-04-28
2023-03-07
Collapse all
Examples and tutorials
Algorithmic trading
Build a real-time stock screener
In this example, we will build a real-time scanner for approximately 9,000 tickers in the U.S. equity markets.
We'll use the OHLCV schema from the Databento US Equities Summary (EQUS.SUMMARY
) dataset.
This dataset provides end-of-day summary statistics for all RegNMS symbols via the Nasdaq NLS+ feed.
These statistics include consolidated OHLCV data across all U.S. equity venues.
We'll also use the MBP-1 schema from the Databento US Equities Mini (EQUS.MINI
) dataset.
This is a derived top-of-book dataset that provides aggregated BBO and trade information from a variety of proprietary market data feeds.
Info
import databento as db
import pandas as pd
class PriceMovementScanner:
"""Scanner for detecting large price movements in all US equities."""
def __init__(
self,
pct_threshold: float = 0.03, # Default threshold for alert
) -> None:
"""Initialize scanner with a configurable threshold."""
self.pct_threshold = pct_threshold
self.start = pd.Timestamp.now(tz="US/Eastern").normalize()
self.premarket_start = self.start.replace(hour=4) # Start of today's pre-market session
self.symbol_directory: dict[int, str] = {}
self.last_day_lookup: dict[str, float] = self.get_last_day_lookup()
self.is_signal_lit: dict[str, bool] = {symbol: False for symbol in self.last_day_lookup}
def get_last_day_lookup(self) -> dict[str, float]:
"""Get yesterday's closing prices for all symbols."""
client = db.Historical()
# Get OHLCV-1d data from the previous session
data = client.timeseries.get_range(
dataset="EQUS.SUMMARY",
schema="ohlcv-1d",
symbols="ALL_SYMBOLS",
start=(self.start - pd.offsets.BusinessDay(1)).date(),
)
# Request symbology: This is required for ALL_SYMBOLS requests
# which don't automatically map instrument ID to raw ticker symbol
symbology_json = data.request_symbology(client)
data.insert_symbology_json(symbology_json)
df = data.to_df()
return df.set_index("symbol")["close"].to_dict()
def scan(self, event: db.DBNRecord) -> None:
"""
Scan for large price movements in market data events.
"""
if isinstance(event, db.SymbolMappingMsg):
self.symbol_directory[event.instrument_id] = event.stype_out_symbol
return
if not isinstance(event, db.MBP1Msg):
return
symbol = self.symbol_directory[event.instrument_id]
# Skip if alert already triggered for the symbol
if self.is_signal_lit[symbol]:
return
bid = event.levels[0].pretty_bid_px
ask = event.levels[0].pretty_ask_px
# Skip if one side of the book is empty
if pd.isna(bid) or pd.isna(ask):
return
# Calculate change since the previous close
mid = (bid + ask) / 2
previous_close = self.last_day_lookup.get(symbol)
# New listing, no data from previous session
if previous_close is None:
return
pct_change = (mid - previous_close) / previous_close
# Trigger alert if the threshold is exceeded and no previous alert
if abs(pct_change) > self.pct_threshold:
ts = event.pretty_ts_event.tz_convert("US/Eastern")
print(
f"[{ts.isoformat()}] {symbol} moved by {pct_change:.2%} "
f"(current: {mid:.4f}, previous: {previous_close:.4f})",
)
self.is_signal_lit[symbol] = True
if __name__ == "__main__":
# Instantiate scanner class
scanner = PriceMovementScanner()
# Create a live client
live = db.Live(key="$YOUR_API_KEY")
# Subscribe MBP-1 schema for ALL_SYMBOLS
# Start subscription at pre-market open
live.subscribe(
dataset="EQUS.MINI",
schema="mbp-1",
symbols="ALL_SYMBOLS",
start=scanner.premarket_start,
)
# Add callback and start
live.add_callback(scanner.scan)
live.start()
# Run indefinitely
live.block_for_close()
[2025-05-06T04:00:00.023079908-04:00] CORN moved by 4.19% (current: 19.1400, previous: 18.3700)
[2025-05-06T04:00:00.046518714-04:00] CPER moved by 4.04% (current: 30.4200, previous: 29.2400)
[2025-05-06T04:00:00.047119403-04:00] FETH moved by -8.56% (current: 16.6050, previous: 18.1600)
[2025-05-06T04:00:00.069275113-04:00] XXRP moved by -3.80% (current: 29.3300, previous: 30.4900)
[2025-05-06T04:00:00.118536539-04:00] ETHT moved by 24.40% (current: 5.7100, previous: 4.5900)
...
[2025-05-06T09:33:43.338614253-04:00] XMVM moved by 19.04% (current: 62.5450, previous: 52.5400)
[2025-05-06T09:33:46.814411294-04:00] BELFB moved by -5.09% (current: 65.4500, previous: 68.9600)
[2025-05-06T09:33:53.530064671-04:00] CATO moved by -3.25% (current: 2.2350, previous: 2.3100)
[2025-05-06T09:33:53.711869173-04:00] WRB moved by -11.42% (current: 64.2150, previous: 72.4900)
[2025-05-06T09:33:55.223052174-04:00] QUS moved by -3.72% (current: 149.8250, previous: 155.6100)