Derivatives positioning / Methodology
Derivatives Positioning (CFTC COT): methodology
This page documents /positioning: where the data comes from, the exact
files and market codes, what each exhibit computes, the trader-class
definitions in the CFTC's own words, the build-time verification, and what
this data can and cannot say.
What this layer is, and is not
/positioning is the who-holds-it side of US derivatives markets: each
Tuesday's futures open interest broken down by class of large trader, from
the CFTC's Commitments of Traders (COT) reports, for a curated financial
core of 15 markets. It is a positioning record, not a flow record and not a
forecast. The CFTC describes the reports as providing "a breakdown of each
Tuesday's open interest for futures and options on futures markets in which
20 or more traders hold positions equal to or above the reporting levels
established by the CFTC" and publishes them "generally ... each Friday at
3:30 pm Eastern Time (US), using the data from the immediately preceding
Tuesday of that week" (CFTC, Commitments of Traders).
Three consequences:
- Tuesdays only. Anything built or unwound intraweek and closed by the next Tuesday never appears.
- Three-day lag. The newest reading is always the Tuesday before the most recent Friday 3:30pm ET release; holidays push the schedule.
- Positions, not flows. A week-over-week change in net position is the net of all trading in between, not gross activity.
Source files
Commodity Futures Trading Commission, historical compressed COT files
(https://www.cftc.gov/MarketReports/CommitmentsofTraders/HistoricalCompressed/index.htm),
all URLs verified live 2026-07-18, all fetched by
scripts/build_cftc_cot.py:
- Traders in Financial Futures (TFF), futures only:
fin_fut_txt_2006_2016.zip(one file, 2006-06-13 to 2016-12-27) plusfut_fin_txt_<YYYY>.zipyearly from 2010. The build reads the combined file for pre-2017 dates and the yearly files from 2017; the overlapping 2010-2016 yearly files are then re-read and asserted byte-equivalent in value to the combined file on every curated row (a free cross-publication check, passed on the 2026-07-18 pull). - Legacy report, futures only:
deacot<YYYY>.zipyearly from 1986.
Only current-year files are re-downloaded on refresh; past years are
immutable on the CFTC site and cached under data/raw/cftc_cot/. The
futures-and-options-combined variants of both reports exist but are not
used: the futures-only series is the longer, cleaner convention and avoids
delta-adjustment of options.
The 15 markets
Codes are the CFTC contract market codes exactly as they appear in the
files. Names in the files change over time (e.g. "CRUDE OIL, LIGHT SWEET"
became "WTI-PHYSICAL"); the code is the stable key, and every verbatim name
seen is preserved in cftc_cot_meta.source_names.
| Market | Code | Report | Exchange | History from |
|---|---|---|---|---|
| S&P 500 (consolidated) | 13874+ | TFF | CME | 2010-06-15 |
| Nasdaq-100 (consolidated) | 20974+ | TFF | CME | 2010-06-15 |
| 2-year Treasury note | 042601 | TFF | CBOT | 2006-06-13 |
| 10-year Treasury note | 043602 | TFF | CBOT | 2006-06-13 |
| Treasury bond (long bond) | 020601 | TFF | CBOT | 2006-06-13 |
| 3-month SOFR | 134741 | TFF | CME | 2018-07-24 |
| Euro FX | 099741 | TFF | CME | 2006-06-13 |
| Japanese yen | 097741 | TFF | CME | 2006-06-13 |
| British pound | 096742 | TFF | CME | 2006-06-13 |
| Swiss franc | 092741 | TFF | CME | 2006-06-13 |
| Canadian dollar | 090741 | TFF | CME | 2006-06-13 |
| Australian dollar | 232741 | TFF | CME | 2006-06-13 |
| Mexican peso | 095741 | TFF | CME | 2006-06-13 |
| Gold | 088691 | Legacy | COMEX | 1986-01-15 |
| WTI crude oil | 067651 | Legacy | NYMEX | 1986-01-15 |
Selection notes:
- The two equity indexes use the CFTC's consolidated series (code suffix
+), which combine full-size, E-mini and micro contracts converted to a common contract size. Consolidated reporting starts 2010-06-15; the E-mini alone reaches back to 2006 but misses the micro complex that now carries a large share of open interest, so the consolidated series is used. - 3-month SOFR is the successor of the 3-month eurodollar contract,
which the files carry as a separate market (
132741, ended 2023) and which is deliberately not spliced onto SOFR: they are different contracts and their positioning levels are not comparable. - The Treasury bond contract is the classic CBOT "long bond" (deliverable window at the long end; since 2011 the 25-years-plus segment is carried by the separate Ultra bond contract, not included here).
- Gold and WTI are physical commodities outside the TFF universe. They are carried from the legacy report, whose commercial/non-commercial classes run from 1986. The disaggregated report (2006+, four classes for physical markets) is a possible future upgrade; the legacy series was chosen for the four extra decades of history.
Trader classes, in the CFTC's words
The TFF report (Explanatory Notes, PDF) divides reportable traders in financial futures into four categories:
- Dealer/Intermediary: "what are typically described as the 'sell side' of the market ... These include large banks (U.S. and non-U.S.) and dealers in securities, swaps and other derivatives."
- Asset Manager/Institutional: "institutional investors, including pension funds, endowments, insurance companies, mutual funds and those portfolio/investment managers whose clients are predominantly institutional."
- Leveraged Funds: "typically hedge funds and various types of money managers, including registered commodity trading advisors (CTAs); registered commodity pool operators (CPOs) or unregistered funds identified by CFTC."
- Other Reportables: "Reportable traders that are not placed into one of the first three categories ... includes corporate treasuries, central banks, smaller banks, mortgage originators, credit unions."
The legacy report (Explanatory Notes) has two reportable classes: a trader is commercial when it reports on CFTC Form 40 that it is "engaged in business activities hedged by the use of the futures or option markets"; everyone else reportable is non-commercial. Classification caveats that apply to everything on the page:
- Classifications are self-reported (Form 40) and adjusted by Commission staff judgment; they are per-trader, not per-position, so a leveraged fund's hedges and its speculative positions land in the same bucket.
- TFF history before the report's 2010 launch was backfilled: "the CFTC does not maintain a history of large-trader classifications, so, recent classifications had to be used to classify the historical positions of each reportable trader"; this "'backcasting' approach diminishes the data's accuracy as it goes further back in time" (TFF Explanatory Notes).
- Small positions below the reporting thresholds appear only in the non-reportable remainder.
Computed columns and exhibits
The build produces one row per market, Tuesday, and trader class
(cftc_cot parquet): long, short, and spreading contracts as published
("All" positions, futures only), plus:
- net = long minus short. "Spreading" (equal offsetting long and short held by one trader, as computed by the CFTC) is excluded from net by construction: it adds to both sides equally.
- net_share = net / that Tuesday's total open interest of the market. This is the normalization used everywhere on the page; it makes 1986 gold and 2026 gold comparable and different-size markets comparable.
- The legacy schema publishes no commercial spreading column, so
spread_posis null for the commercial class.
Exhibits on /positioning:
- Net positioning charts: weekly
net_shareper class, per market. Values are rounded to 0.01 percentage points for the chart payload (sub-pixel at chart scale); tables and percentiles use full precision. Chart transforms (YoY %, index, log) are deliberately absent: net share is a signed ratio and those transforms are meaningless on it (the same rejection recorded for the FCI in the transforms wave). - Percentiles: percent rank of the latest
net_sharewithin that market-class's own weekly history, computed twice: over the full history and over the trailing 5 years ending at the latest report (inclusive of it). Percent rank = share of weeks withnet_shareat or below the latest. - Extremes table: the readings whose trailing-5-year percent rank is at or beyond 5/95. "Crowded long" and "crowded short" describe the rank, not a view.
Verification at build time
scripts/build_cftc_cot.py fails loudly (assert) on any of:
- Additivity, every row: the four TFF class longs plus spreading sum to total reportable longs, total reportables plus non-reportables equal open interest, and likewise on the short side; same identities for the legacy classes. Exact on all rows except the two consolidated equity markets, where the CFTC's per-cell rounding of contract-size conversion leaves deviations of at most a few contracts (tolerance 5; maximum observed 3).
- Published-percentage cross-check: the recomputed net share must agree
with the files' own
% of open interestcolumns (published at 0.1 granularity) within 0.2 percentage points, on every market-class-week (58,042 cells on the 2026-07-18 pull, zero blank). - Cross-publication check: the 2010-2016 yearly TFF files must carry exactly the values of the 2006-2016 combined file on every curated row.
- Anchors from the verified 2026-07-18 pull, e.g. gold's first legacy row (1986-01-15: non-commercial long 18,589, short 7,706, open interest 148,186) and the 10-year note's leveraged-funds record net short (2025-08-26: -2,534,616 contracts). An anchor drift means the CFTC restated history and stops the build for review.
- Freshness and shape: the latest report date is a Tuesday no more than 21 days old; no duplicate (market, date, class) keys; open interest positive; |net| never exceeds open interest.
Refresh cadence
COT publishes weekly (Friday 3:30pm ET for Tuesday data). refresh.sh has
no weekly tier, so the source is registered in the daily tier, which is
the documented convention when no matching tier exists: a re-run between
releases only re-downloads the current-year files and rebuilds to identical
output.
License and redistribution posture
The COT reports are US federal government work, public domain (17 U.S.C. 105). FinObservatory displays the data with attribution to the CFTC and, per its standing no-redistribution ruling, serves no bulk download files and no row-serving endpoints; the CFTC's own historical compressed files (linked above) are the canonical way to obtain the data.