Datasets
CFTC COT & positioning data API for agents
The Commitments of Traders report is one of the few public windows into who holds what in futures markets, and it is published in a format that has accumulated decades of history. Categories changed when the disaggregated report arrived, legacy and new formats coexist, and the report describes a Tuesday position but is released the following Friday afternoon.
That release lag is where most positioning research quietly cheats. Attach Tuesday's data to Tuesday and a strategy appears to know the market's hand three days before anyone did. Hindcast normalizes COT into one weekly schema and stamps every record with its actual release timestamp, so a point-in-time query cannot see the report before it existed.
Categories are mapped across the legacy and disaggregated formats where a defensible mapping exists, and left separate where it does not — a silent merge would be more convenient and less true.
hindcast — session
previewhindcast> net non-commercial positioning for a contract, as known on a past Friday
→ tool: cot_positioning { contract:"...", as_of:"2024-03-15" }
✓ the report released that afternoon, describing the prior Tuesday
source: CFTC Commitments of Traders, release timestamp retained
What's covered
- Legacy and disaggregated COT formats normalized to one weekly schema
- Report date and release timestamp stored separately on every record
- Long, short and spreading positions by trader category
- Open interest alongside positioning for ratio-based measures
- Contract identity mapped through the entity graph across venues
- Format changes preserved rather than back-filled into a single history
Join the waitlist — this page's dataset is already selected.
Questions
Why does the release timestamp matter so much here?
Because the gap between the position date and the publication date is days, not minutes. A backtest that ignores it earns returns from information that had not been released yet — one of the easiest and most common ways to build a strategy that cannot be traded.
Are legacy and disaggregated categories combined?
Only where the mapping is defensible, and it is always labeled. Where the definitions genuinely differ the series stay separate, because a seamless-looking history across a definition change is a trap.
Related
Join the waitlist. Vote the roadmap. First in, first served.