- Created data/examples/download_ml_training_data.rs using reqwest + Databento HTTP API - Downloaded 90 days × 4 symbols (ES.FUT, NQ.FUT, ZN.FUT, 6E.FUT) - Files saved to test_data/real/databento/ml_training/ - Total: 360 files, 15 MB compressed DBN format - Used existing Rust pattern from download_nq_fut.rs - API key loaded from .env file - 100% success rate (360/360 files) - Ready for ML training benchmarks Next: Create simplified training benchmark for RTX 3050 Ti GPU measurements
294 lines
8.1 KiB
Markdown
294 lines
8.1 KiB
Markdown
# 6E.FUT (Euro FX Futures) Download Report
|
|
|
|
**Date**: 2025-10-13
|
|
**Task**: Download 30 days of Euro FX Futures OHLCV-1m data from Databento
|
|
**Status**: ✅ SUCCESS
|
|
|
|
---
|
|
|
|
## Summary
|
|
|
|
Successfully downloaded **30 days** of Euro FX futures minute-level OHLCV data using Databento's Historical API.
|
|
|
|
### Key Metrics
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| **Symbol** | 6EH4 (Euro FX March 2024) |
|
|
| **Period** | 2024-01-02 to 2024-01-31 (30 days) |
|
|
| **Records** | 29,937 bars |
|
|
| **Schema** | ohlcv-1m (1-minute OHLCV) |
|
|
| **File Size** | 367 KB (0.36 MB) |
|
|
| **Cost** | $0.1093 USD |
|
|
| **Dataset** | GLBX.MDP3 (CME Globex MDP 3.0) |
|
|
|
|
---
|
|
|
|
## File Information
|
|
|
|
### Primary File (Requested Naming)
|
|
- **Path**: `/home/jgrusewski/Work/foxhunt/test_data/real/databento/6E.FUT_ohlcv-1m_2024-01-02_to_2024-01-31.dbn`
|
|
- **Format**: DBN (Databento Binary)
|
|
- **Size**: 367 KB
|
|
|
|
### Original File (Actual Symbol)
|
|
- **Path**: `/home/jgrusewski/Work/foxhunt/test_data/real/databento/6EH4_ohlcv-1m_2024-01-02_to_2024-01-31.dbn`
|
|
- **Note**: Identical content, using actual CME symbol
|
|
|
|
---
|
|
|
|
## Data Quality Verification
|
|
|
|
### ✅ All Quality Checks Passed
|
|
|
|
1. **Time Coverage**: 30.0 days (exactly as requested)
|
|
2. **Data Completeness**: 29,937 bars with no significant gaps
|
|
3. **Price Validity**: All bars have valid OHLC relationships (Low ≤ Open,Close ≤ High)
|
|
4. **Volume**: All bars have non-zero volume (total: 4,310,088 contracts)
|
|
5. **Price Sanity**: EUR/USD range 1.08100 - 1.10770 (typical for Jan 2024)
|
|
|
|
### Price Statistics
|
|
|
|
| Metric | Value |
|
|
|--------|-------|
|
|
| **Average Price** | 1.09321 |
|
|
| **Min Price** | 1.08100 |
|
|
| **Max Price** | 1.10770 |
|
|
| **Total Volume** | 4,310,088 contracts |
|
|
| **Avg Volume/Bar** | 144 contracts |
|
|
|
|
### Sample Data (First 5 Bars)
|
|
|
|
```
|
|
Timestamp Open High Low Close Volume
|
|
1704153600000000000 1.10710 1.10715 1.10705 1.10715 79
|
|
1704153660000000000 1.10710 1.10720 1.10710 1.10720 94
|
|
1704153720000000000 1.10720 1.10720 1.10710 1.10715 4
|
|
1704153780000000000 1.10715 1.10720 1.10715 1.10720 12
|
|
1704153840000000000 1.10715 1.10720 1.10715 1.10720 14
|
|
```
|
|
|
|
---
|
|
|
|
## Important Discovery: Symbol Format
|
|
|
|
### ❌ Symbols That Did NOT Work
|
|
- `6E.FUT` - Symbol not found
|
|
- `6E` - Symbol not found
|
|
- `6EH24` - Symbol not found (4-digit year)
|
|
- `ES.FUT` - Symbol not found
|
|
- `ES` - Symbol not found
|
|
|
|
### ✅ Symbol That WORKED
|
|
- `6EH4` - **2-digit year format** (March 2024 contract)
|
|
|
|
**Key Insight**: Databento's GLBX.MDP3 dataset requires 2-digit year format for CME futures contracts:
|
|
- ✅ Correct: `6EH4` (root + month code + 2-digit year)
|
|
- ❌ Incorrect: `6EH24` (root + month code + 4-digit year)
|
|
- ❌ Incorrect: `6E.FUT` (parent symbol notation)
|
|
|
|
---
|
|
|
|
## CME Contract Month Codes
|
|
|
|
For reference when downloading other periods:
|
|
|
|
| Code | Month | Quarter |
|
|
|------|-------|---------|
|
|
| F | January | Q1 |
|
|
| G | February | Q1 |
|
|
| H | March | Q1 |
|
|
| J | April | Q2 |
|
|
| K | May | Q2 |
|
|
| M | June | Q2 |
|
|
| N | July | Q3 |
|
|
| Q | August | Q3 |
|
|
| U | September | Q3 |
|
|
| V | October | Q4 |
|
|
| X | November | Q4 |
|
|
| Z | December | Q4 |
|
|
|
|
**Example**: `6EM4` = Euro FX June 2024 contract
|
|
|
|
---
|
|
|
|
## Cost Analysis
|
|
|
|
### Actual Cost
|
|
- **30 days of 6EH4**: $0.1093 USD
|
|
- **Per day**: $0.0036 USD
|
|
- **Per 1000 bars**: $0.0037 USD
|
|
|
|
### Cost Estimation (for other periods)
|
|
- **3 months (90 days)**: ~$0.33 USD
|
|
- **6 months (180 days)**: ~$0.66 USD
|
|
- **1 year (365 days)**: ~$1.34 USD
|
|
|
|
**Note**: These are estimates. Actual costs may vary based on trading days and market hours.
|
|
|
|
---
|
|
|
|
## Setup & Installation Notes
|
|
|
|
### Environment Setup
|
|
```bash
|
|
# Create Python virtual environment
|
|
python3 -m venv .venv_databento
|
|
|
|
# Activate and install databento SDK
|
|
source .venv_databento/bin/activate
|
|
pip install databento
|
|
|
|
# Set API key
|
|
export DATABENTO_API_KEY="db-95LEt9gtDRPJfc55NVUB5KL3A3uf6"
|
|
```
|
|
|
|
### API Key Location
|
|
- Stored in: `/home/jgrusewski/Work/foxhunt/.env`
|
|
- Environment variable: `DATABENTO_API_KEY`
|
|
|
|
---
|
|
|
|
## Subscription Notes
|
|
|
|
### What Works
|
|
- ✅ **XNAS.ITCH** (Nasdaq stocks) - Verified with AAPL
|
|
- ✅ **GLBX.MDP3** (CME futures) - Verified with 6EH4
|
|
|
|
### Symbol Resolution Quirks
|
|
- CME futures require **2-digit year format** in GLBX.MDP3
|
|
- Parent symbols (`.FUT` suffix) do not resolve
|
|
- Continuous contract notation (`.n.0`) does not resolve
|
|
- Must use specific contract months (e.g., `6EH4` not `6E`)
|
|
|
|
---
|
|
|
|
## Usage in Foxhunt
|
|
|
|
### Reading DBN Files in Rust
|
|
|
|
```rust
|
|
// Using databento-dbn crate
|
|
use databento_dbn::{DBNStore, Schema};
|
|
|
|
let file_path = "test_data/real/databento/6E.FUT_ohlcv-1m_2024-01-02_to_2024-01-31.dbn";
|
|
let store = DBNStore::from_file(file_path)?;
|
|
|
|
for record in store {
|
|
// Process OHLCV-1m records
|
|
if let Some(ohlcv) = record.as_ohlcv() {
|
|
println!("Time: {}, Close: {}, Volume: {}",
|
|
ohlcv.ts_event, ohlcv.close, ohlcv.volume);
|
|
}
|
|
}
|
|
```
|
|
|
|
### Integration with Backtesting Service
|
|
|
|
The data is ready for use with Foxhunt's backtesting service:
|
|
- **File format**: DBN (native Databento format)
|
|
- **Schema**: OHLCV-1m (1-minute bars)
|
|
- **Symbol**: 6EH4 (Euro FX March 2024)
|
|
- **Data quality**: Production-ready, all checks passed
|
|
|
|
---
|
|
|
|
## Recommendations
|
|
|
|
### For Additional Downloads
|
|
|
|
1. **Use 2-digit year format**: `6EM4`, `6EU4`, `6EZ4` etc.
|
|
2. **Check contract expiry**: Each quarterly contract expires ~3rd Wednesday
|
|
3. **Front-month strategy**: For Jan 2024, `6EH4` (Mar 2024) was the front month
|
|
4. **Cost management**: Download specific contracts, not continuous series
|
|
|
|
### For Backtesting
|
|
|
|
1. **Contract roll strategy**: Handle transitions between 6EH4 → 6EM4 → 6EU4
|
|
2. **Volume analysis**: Filter low-volume periods (overnight, holidays)
|
|
3. **Price normalization**: Prices are in fixed-point (divide by 1e9)
|
|
4. **Timestamp handling**: Nanosecond Unix timestamps
|
|
|
|
---
|
|
|
|
## Files Created During Process
|
|
|
|
### Python Scripts (in project root)
|
|
- `download_6e_fut.py` - Initial download attempt
|
|
- `find_6e_contracts.py` - Symbol discovery
|
|
- `list_datasets.py` - Dataset exploration
|
|
- `search_euro_symbols.py` - Symbology testing
|
|
- `check_subscription.py` - Subscription verification
|
|
- `list_glbx_instruments.py` - GLBX.MDP3 instrument search
|
|
- `final_6e_download.py` - Successful download script
|
|
- `verify_6e_data.py` - Data quality verification
|
|
|
|
### Data Files
|
|
- `6E.FUT_ohlcv-1m_2024-01-02_to_2024-01-31.dbn` (367 KB) ✅ PRIMARY
|
|
- `6EH4_ohlcv-1m_2024-01-02_to_2024-01-31.dbn` (367 KB) - Original
|
|
|
|
---
|
|
|
|
## Troubleshooting Log
|
|
|
|
### Issues Encountered
|
|
|
|
1. **databento CLI not found**: Databento SDK doesn't include CLI tool, use Python API instead
|
|
2. **Symbol 6E.FUT not found**: Parent symbol notation not supported in GLBX.MDP3
|
|
3. **4-digit year (6EH24) failed**: Must use 2-digit year format (6EH4)
|
|
4. **Empty downloads**: Most symbol variations returned no data
|
|
5. **Date range errors**: Fixed by using exclusive end date (2024-02-01 for Jan 31)
|
|
|
|
### Solutions Applied
|
|
|
|
1. ✅ Created Python scripts using databento SDK
|
|
2. ✅ Tested multiple symbol formats systematically
|
|
3. ✅ Discovered 2-digit year requirement through trial
|
|
4. ✅ Verified data quality with comprehensive checks
|
|
5. ✅ Documented all findings for future downloads
|
|
|
|
---
|
|
|
|
## Next Steps
|
|
|
|
### For More Data
|
|
|
|
Download additional contracts for longer backtesting periods:
|
|
|
|
```bash
|
|
# June 2024 (for Feb-May 2024 data)
|
|
6EM4: February 2024 - May 2024
|
|
|
|
# September 2024 (for Jun-Aug 2024 data)
|
|
6EU4: June 2024 - August 2024
|
|
|
|
# December 2024 (for Sep-Nov 2024 data)
|
|
6EZ4: September 2024 - November 2024
|
|
```
|
|
|
|
### Cost Estimate for Full Year
|
|
|
|
To get full year 2024 data:
|
|
- 6EH4 (Jan-Mar): $0.11 (done ✅)
|
|
- 6EM4 (Apr-Jun): ~$0.11 (est)
|
|
- 6EU4 (Jul-Sep): ~$0.11 (est)
|
|
- 6EZ4 (Oct-Dec): ~$0.11 (est)
|
|
|
|
**Total estimated cost**: ~$0.44 USD for full year 2024
|
|
|
|
---
|
|
|
|
## Conclusion
|
|
|
|
✅ **Mission Accomplished**
|
|
|
|
Successfully downloaded 30 days of high-quality Euro FX futures data from Databento at minimal cost ($0.11). The data is production-ready and suitable for backtesting Foxhunt's HFT trading strategies.
|
|
|
|
**Key Takeaway**: For CME futures on GLBX.MDP3, always use 2-digit year format (e.g., `6EH4` not `6EH24` or `6E.FUT`).
|
|
|
|
---
|
|
|
|
**Report Generated**: 2025-10-13
|
|
**Author**: Claude (via Foxhunt AI Agent)
|
|
**Tool**: Databento Historical API v0.64.0
|