hindcast

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

preview

hindcast> 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

Preview of the shape of an answer — endpoints open to the waitlist first.

What's covered

Join the waitlist — this page's dataset is already selected.

Need this one?votes for Positioning & Flows
Optional — helps us build in the right order. All skippable.

Role

Company

Datasets you need

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.

Join the waitlist. Vote the roadmap. First in, first served.

← Back to the data catalog