11 KiB
Databento Symbology Reference
Comprehensive guide to Databento's symbology system including continuous contracts, symbol types, and resolution strategies.
Symbol Types (stypes)
Databento supports multiple symbology naming conventions. Use mcp__databento__symbology_resolve to convert between types.
raw_symbol
Native exchange symbols as provided by the venue.
Examples:
ESH5- ES March 2025 contractNQM5- NQ June 2025 contractAAPL- Apple Inc. stockSPY- SPDR S&P 500 ETF
When to use:
- Working with specific contract months
- Exact symbol from exchange documentation
- Historical analysis of specific expirations
Limitations:
- Requires knowing exact contract codes
- Different venues use different conventions
- Doesn't handle roll automatically
instrument_id
Databento's internal numeric identifier for each instrument.
Examples:
123456789- Unique ID for ESH5987654321- Unique ID for NQM5
When to use:
- After symbol resolution
- Internally within Databento system
- When guaranteed uniqueness is required
Benefits:
- Globally unique across all venues
- Never changes for a given instrument
- Most efficient for API requests
Limitations:
- Not human-readable
- Requires resolution step to obtain
continuous
Continuous contract notation with automatic rolling for futures.
Format: {ROOT}.{STRATEGY}.{OFFSET}
Examples:
ES.c.0- ES front month, calendar rollNQ.n.0- NQ front month, open interest rollES.v.1- ES second month, volume rollGC.c.0- Gold front month, calendar roll
When to use:
- Backtesting across multiple expirations
- Avoiding roll gaps in analysis
- Long-term continuous price series
Benefits:
- Automatic roll handling
- Consistent symbology across time
- Ideal for backtesting
parent
Parent contract symbols for options or complex instruments.
Examples:
ES- Parent for all ES contractsNQ- Parent for all NQ contracts
When to use:
- Options underlying symbols
- Querying all contracts in a family
- Getting contract family metadata
Continuous Contract Deep Dive
Continuous contracts are the most powerful feature for futures analysis. They automatically handle contract rolls using different strategies.
Roll Strategies
Calendar Roll (.c.X)
Rolls on fixed calendar dates regardless of market activity.
Notation: ES.c.0, NQ.c.1
Roll Timing:
- ES: Rolls 8 days before contract expiration
- NQ: Rolls 8 days before contract expiration
When to use:
- Standard backtesting
- Most predictable roll schedule
- When roll timing is less critical
Pros:
- Predictable roll dates
- Consistent across instruments
- Simple to understand
Cons:
- May roll during low liquidity
- Doesn't consider market dynamics
Open Interest Roll (.n.X)
Rolls when open interest moves to the next contract.
Notation: ES.n.0, NQ.n.1
Roll Timing:
- Switches when next contract's OI > current contract's OI
When to use:
- Avoiding early rolls
- Following market participants
- When market dynamics matter
Pros:
- Follows market behavior
- Natural transition point
- Avoids artificial timing
Cons:
- Less predictable timing
- Can be delayed during low volume
- Different instruments roll at different times
Volume Roll (.v.X)
Rolls when trading volume moves to the next contract.
Notation: ES.v.0, NQ.v.1
Roll Timing:
- Switches when next contract's volume > current contract's volume
When to use:
- Following most liquid contract
- High-frequency analysis
- When execution quality matters
Pros:
- Always in most liquid contract
- Best for execution
- Real-time liquidity tracking
Cons:
- Most variable timing
- Can switch back and forth
- Requires careful validation
Offset Parameter (.X)
The offset determines which contract month in the series.
| Offset | Description | Example Usage |
|---|---|---|
.0 |
Front month | Primary trading contract |
.1 |
Second month | Spread analysis vs front |
.2 |
Third month | Deferred spread analysis |
.3+ |
Further months | Calendar spread strategies |
Common Patterns:
ES.c.0- Standard ES continuous (front month)ES.c.0,ES.c.1- ES calendar spread (front vs back)ES.c.0,NQ.c.0- ES/NQ pair analysis
ES/NQ Specific Symbology
ES (E-mini S&P 500)
Contract Months: H (Mar), M (Jun), U (Sep), Z (Dec)
Raw Symbol Format: ES{MONTH}{YEAR}
ESH5= March 2025ESM5= June 2025ESU5= September 2025ESZ5= December 2025
Continuous Contracts:
ES.c.0- Front month (most common)ES.n.0- OI-based front monthES.v.0- Volume-based front month
Tick Size: 0.25 points ($12.50 per tick) Contract Multiplier: $50 per point Trading Hours: Nearly 24 hours (Sunday 6pm - Friday 5pm ET)
NQ (E-mini Nasdaq-100)
Contract Months: H (Mar), M (Jun), U (Sep), Z (Dec)
Raw Symbol Format: NQ{MONTH}{YEAR}
NQH5= March 2025NQM5= June 2025NQU5= September 2025NQZ5= December 2025
Continuous Contracts:
NQ.c.0- Front month (most common)NQ.n.0- OI-based front monthNQ.v.0- Volume-based front month
Tick Size: 0.25 points ($5.00 per tick) Contract Multiplier: $20 per point Trading Hours: Nearly 24 hours (Sunday 6pm - Friday 5pm ET)
Month Codes Reference
| Code | Month | Typical Expiration |
|---|---|---|
| F | January | 3rd Friday |
| G | February | 3rd Friday |
| H | March | 3rd Friday |
| J | April | 3rd Friday |
| K | May | 3rd Friday |
| M | June | 3rd Friday |
| N | July | 3rd Friday |
| Q | August | 3rd Friday |
| U | September | 3rd Friday |
| V | October | 3rd Friday |
| X | November | 3rd Friday |
| Z | December | 3rd Friday |
Note: ES/NQ only trade quarterly contracts (H, M, U, Z).
Symbol Resolution
Use mcp__databento__symbology_resolve to convert between symbol types.
Common Resolution Patterns
Continuous to Instrument ID:
Input: ES.c.0
stype_in: continuous
stype_out: instrument_id
Result: Maps to current front month's instrument_id
Raw Symbol to Instrument ID:
Input: ESH5
stype_in: raw_symbol
stype_out: instrument_id
Result: Specific instrument_id for ESH5
Continuous to Raw Symbol:
Input: ES.c.0
stype_in: continuous
stype_out: raw_symbol
Result: Current front month symbol (e.g., ESH5)
Time-Based Resolution
Symbol resolution is date-dependent. The same continuous contract resolves to different instruments across time.
Example:
ES.c.0on 2024-01-15 → ESH4 (March 2024)ES.c.0on 2024-04-15 → ESM4 (June 2024)ES.c.0on 2024-07-15 → ESU4 (September 2024)
Important: Always specify start_date and end_date when resolving symbols for historical analysis.
Resolution Parameters
mcp__databento__symbology_resolve
- dataset: "GLBX.MDP3"
- symbols: ["ES.c.0", "NQ.c.0"]
- stype_in: "continuous"
- stype_out: "instrument_id"
- start_date: "2024-01-01"
- end_date: "2024-12-31"
Returns mapping of continuous symbols to instrument IDs for each day in the range.
Expiration Handling
Roll Dates
ES/NQ contracts expire on the 3rd Friday of the contract month at 9:30 AM ET.
Calendar Roll (.c.0) Schedule:
- Rolls 8 days before expiration
- Always rolls on the same relative day
- Predictable for backtesting
Example for ESH5 (March 2025):
- Expiration: Friday, March 21, 2025
- Calendar roll: March 13, 2025 (8 days before)
Roll Detection
To detect when a continuous contract rolled, compare instrument_id or raw_symbol across consecutive timestamps.
Example:
2024-03-12: ES.c.0 → ESH4
2024-03-13: ES.c.0 → ESM4 (rolled!)
Handling Roll Gaps
Price discontinuities often occur at roll:
Gap Detection:
if abs(close_before_roll - open_after_roll) > threshold:
# Roll gap detected
Adjustment Strategies:
- Ratio Adjustment: Multiply historical prices by ratio
- Difference Adjustment: Add/subtract difference
- No Adjustment: Keep raw prices (most common for futures)
For ES/NQ futures, no adjustment is standard since contracts are similar.
Symbol Validation
Valid Symbol Patterns
Continuous:
- Must match:
{ROOT}.{c|n|v}.{0-9+} - Examples:
ES.c.0,NQ.n.1,GC.v.0
Raw Symbols (Futures):
- Must match:
{ROOT}{MONTH_CODE}{YEAR} - Examples:
ESH5,NQZ4,GCM6
Equity Symbols:
- 1-5 uppercase letters
- Examples:
AAPL,MSFT,SPY,GOOGL
Symbol Existence Validation
Before using a symbol, validate it exists in the dataset:
- Use
mcp__databento__symbology_resolveto resolve - Use
mcp__databento__reference_search_securitiesfor metadata - Check definition schema for instrument details
Common Symbol Pitfalls
1. Wrong stype_in for Continuous Contracts
Wrong:
symbols: "ES.c.0"
stype_in: "raw_symbol" # WRONG!
Correct:
symbols: "ES.c.0"
stype_in: "continuous" # CORRECT
2. Forgetting Date Range for Resolution
Wrong:
symbology_resolve(symbols=["ES.c.0"], start_date="2024-01-01")
# Missing end_date - only resolves for one day
Correct:
symbology_resolve(symbols=["ES.c.0"], start_date="2024-01-01", end_date="2024-12-31")
# Resolves for entire year
3. Using Expired Contracts
Wrong:
# ESH4 expired in March 2024
symbols: "ESH4"
start_date: "2024-06-01" # After expiration!
Correct:
# Use continuous contract
symbols: "ES.c.0"
start_date: "2024-06-01" # Automatically maps to ESM4
4. Mixing Symbol Types
Wrong:
symbols: "ES.c.0,ESH5,123456" # Mixed types!
Correct:
# Resolve separately or use same type
symbols: "ES.c.0,NQ.c.0" # All continuous
Symbol Best Practices
- Use continuous contracts for backtesting - Avoids manual roll management
- Prefer calendar rolls (.c.X) unless specific reason - Most predictable
- Always validate symbols exist - Use symbology_resolve before fetching data
- Specify date ranges for resolution - Symbol meanings change over time
- Use instrument_id after resolution - Most efficient for API calls
- Document roll strategy - Know which roll type (.c/.n/.v) you're using
- Test around roll dates - Verify behavior during contract transitions
- Cache symbol mappings - Don't re-resolve repeatedly
Quick Reference: Common Symbols
ES/NQ Continuous (Most Common)
ES.c.0 # ES front month, calendar roll
NQ.c.0 # NQ front month, calendar roll
ES.c.1 # ES second month
NQ.c.1 # NQ second month
ES/NQ Specific Contracts (2025)
ESH5 # ES March 2025
ESM5 # ES June 2025
ESU5 # ES September 2025
ESZ5 # ES December 2025
NQH5 # NQ March 2025
NQM5 # NQ June 2025
NQU5 # NQ September 2025
NQZ5 # NQ December 2025
Equity Market Breadth (Supporting ES/NQ Analysis)
SPY # SPDR S&P 500 ETF
QQQ # Invesco QQQ (Nasdaq-100 ETF)
VIX # CBOE Volatility Index
TICK # NYSE TICK
VOLD # NYSE Volume Delta
For equity symbols, use dataset XNAS.ITCH (Nasdaq) or other appropriate equity dataset.