When COT Report Dey Come Out Every Week
CFTC dey release COT report every Friday by 3:30 pm ET, based on Tuesday close. See the schedule, three-day lag, and how to read trader positions.
The Commitments of Traders report, wey dem dey call COT report, na U.S. Commodity Futures Trading Commission dey release am every Friday by 3:30 p.m. Eastern time. E dey count positions as of business close for the Tuesday before am. Three days dey between when dem measure the positions and when dem publish the report. That gap, plus reporting threshold wey only cover the biggest traders, na im define wetin this free weekly file fit honestly tell you.
When dem dey release COT report every week?
Dem publish am every Friday by 3:30 p.m. Eastern, and the regulator itself dey release am. CFTC's Commitments of Traders page dey post the files free of charge, both as tables wey person fit view and as downloadable text.
Two things for the calendar matter pass the exact time:
- Data date na Tuesday, no be Friday. Every figure for Friday file show where positions dey as at Tuesday close of business.
- Federal holidays fit shift the release. If holiday enter the reporting week, publication fit delay by one or two days. CFTC dey post release schedule wey show the actual date for each week. The Friday rule dey work for normal week, but federal holiday weeks fit change am.
That same Tuesday data dey show for more than one file: one version na futures-only, while the other combine options and futures. For the combined version, exchanges dey use delta factors to convert option positions to futures-equivalent basis. If two people quote different numbers for the same market on the same day, many times dem dey read different versions.
Why COT report dey three days old when you read am?
The gap between snapshot and release na the most important thing to know about positioning data. Anything wey the biggest traders do on Wednesday, Thursday, or Friday morning no dey inside the file wey dem publish for 3:30. To measure this blind spot, the panels here dey track exchange-traded funds wey follow the markets COT cover: stocks, Treasuries, metals, and energy. The funds no be the futures contracts. But dem dey give fair measure of how far these markets fit move within three days.
The exact SQL behind every number
WITH raw AS (
SELECT ticker,
toTimeZone(window_start, 'America/New_York') AS et,
close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'TLT', 'GLD', 'SLV', 'USO', 'UNG')
AND window_start >= toDateTime('2024-08-01 00:00:00')
AND window_start < toDateTime('2026-08-01 00:00:00')
),
bars AS (
SELECT ticker,
toDate(et) AS session_date,
toDayOfWeek(et) AS day_of_week,
toHour(et) * 60 + toMinute(et) AS minute_of_day,
close
FROM raw
WHERE toDayOfWeek(et) IN (2, 5)
AND (toHour(et) * 60 + toMinute(et)) BETWEEN 570 AND 959
),
tuesday_snapshot AS (
SELECT ticker,
toMonday(session_date) AS week_start,
argMax(close, minute_of_day) AS tuesday_close
FROM bars
WHERE day_of_week = 2
GROUP BY ticker, week_start
),
friday_release AS (
SELECT ticker,
toMonday(session_date) AS week_start,
argMax(close, minute_of_day) AS friday_1530
FROM bars
WHERE day_of_week = 5
AND minute_of_day BETWEEN 900 AND 930
GROUP BY ticker, week_start
)
SELECT t.ticker AS ticker,
count() AS weeks_counted,
round(quantileDeterministic(0.5)(abs(toFloat64(f.friday_1530) / toFloat64(t.tuesday_close) - 1) * 100,
cityHash64(toString(t.week_start))), 2) AS median_abs_move_pct,
round(quantileDeterministic(0.9)(abs(toFloat64(f.friday_1530) / toFloat64(t.tuesday_close) - 1) * 100,
cityHash64(toString(t.week_start))), 2) AS p90_abs_move_pct,
round(100 * countIf(abs(toFloat64(f.friday_1530) / toFloat64(t.tuesday_close) - 1) * 100 >= 2) / count(), 1) AS pct_weeks_over_2pct
FROM tuesday_snapshot AS t
INNER JOIN friday_release AS f
ON t.ticker = f.ticker AND t.week_start = f.week_start
GROUP BY t.ticker
ORDER BY median_abs_move_pct DESCAcross report weeks for two years, the median distance from Tuesday close to Friday 3:30 p.m. print range from 2.97% for UNG down to 0.66% for TLT, measured across 97 weeks. Half of the weeks come below those medians. Na the tail dey make Tuesday snapshot stale: one week out of every ten move 8.68% or more for UNG, and 68% of the weeks pass two percent.
One market, week after week, dey show how uneven this gap fit be.
The exact SQL behind every number
WITH raw AS (
SELECT toTimeZone(window_start, 'America/New_York') AS et,
close
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2025-08-01 00:00:00')
AND window_start < toDateTime('2026-08-01 00:00:00')
),
bars AS (
SELECT toDate(et) AS session_date,
toDayOfWeek(et) AS day_of_week,
toHour(et) * 60 + toMinute(et) AS minute_of_day,
close
FROM raw
WHERE toDayOfWeek(et) IN (2, 5)
AND (toHour(et) * 60 + toMinute(et)) BETWEEN 570 AND 959
),
tuesday_snapshot AS (
SELECT toMonday(session_date) AS week_start,
argMax(close, minute_of_day) AS tuesday_close
FROM bars
WHERE day_of_week = 2
GROUP BY week_start
),
friday_release AS (
SELECT toMonday(session_date) AS week_start,
max(session_date) AS friday_date,
argMax(close, minute_of_day) AS friday_1530
FROM bars
WHERE day_of_week = 5
AND minute_of_day BETWEEN 900 AND 930
GROUP BY week_start
)
SELECT f.friday_date AS week,
formatDateTime(f.friday_date, '%b %e, %Y') AS friday_label,
round((toFloat64(f.friday_1530) / toFloat64(t.tuesday_close) - 1) * 100, 2) AS change_pct,
round(abs(toFloat64(f.friday_1530) / toFloat64(t.tuesday_close) - 1) * 100, 2) AS abs_change_pct
FROM tuesday_snapshot AS t
INNER JOIN friday_release AS f ON t.week_start = f.week_start
ORDER BY weekAcross the 48 report weeks for the year wey end July 31, 2026, the first week for the chart, wey end Aug 8, 2025, get 1.45% gap, while the last one, wey end Jul 31, 2026, get 0.86%. Some weeks, the file nearly current. Other weeks, e dey describe market wey don already move on. Nothing for the file tell you which kind week you dey look. Short interest get the same problem, but for longer timeline: when dem release short interest dey follow that calendar, and why short interest dey two weeks old explain the delay.
Wetin dey happen for 3:30 p.m. on Friday?
The file dey land thirty minutes before U.S. stock market close by 4:00 p.m. Eastern. Na so full Friday session dey spread trading across the clock, for fifteen-minute buckets.
The exact SQL behind every number
WITH raw AS (
SELECT toTimeZone(window_start, 'America/New_York') AS et,
volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker = 'SPY'
AND window_start >= toDateTime('2025-08-01 00:00:00')
AND window_start < toDateTime('2026-08-01 00:00:00')
),
bars AS (
SELECT toDate(et) AS session_date,
toHour(et) * 60 + toMinute(et) AS minute_of_day,
intDiv((toHour(et) * 60 + toMinute(et)) - 570, 15) AS bucket,
volume AS shares
FROM raw
WHERE toDayOfWeek(et) = 5
AND (toHour(et) * 60 + toMinute(et)) BETWEEN 570 AND 959
),
full_sessions AS (
SELECT session_date
FROM bars
GROUP BY session_date
HAVING sumIf(shares, minute_of_day >= 930) >= 0.05 * sum(shares)
)
SELECT formatDateTime(toDateTime(toDate('2026-01-02')) + (570 + b.bucket * 15) * 60, '%H:%i') AS et_time,
round(100 * sum(b.shares) / sum(sum(b.shares)) OVER (), 2) AS share_of_session_pct,
round(sum(b.shares) / uniqExact(b.session_date) / 1000000, 2) AS avg_volume_millions
FROM bars AS b
INNER JOIN full_sessions AS s ON b.session_date = s.session_date
GROUP BY b.bucket
ORDER BY b.bucketVolume for U.S. session dey form like smile. The first fifteen minutes take 6.98% of the shares wey trade that day. The 12:00 bucket thin reach 2.72%. The last fifteen minutes of continuous trading take 13.17%. The 15:30 bucket, wey na where the report enter, carry 4.92%. The release come out inside the closing ramp on the last day of the trading week. Na calendar matter be that, no be claim about the trades wey dey for the file.
Legacy, disaggregated, or TFF: which COT report be which?
Four reports carry the COT name, and dem dey divide the same Tuesday open interest in different ways.
- Legacy dey split each market into commercial, non-commercial, and nonreportable positions. Na the oldest format, and na the one most people mean when dem talk about “the COT report”.
- Supplemental cover 13 agricultural commodities and e dey show index traders as their own category.
- Disaggregated cover physical commodity markets, from agriculture and petroleum reach natural gas, electricity, and metals. E dey use four categories: producer/merchant/processor/user, swap dealers, managed money, and other reportables.
- Traders in Financial Futures, wey be the TFF report, cover financial contracts including currencies, Treasury securities, stock indices, and volatility. Its categories na dealer/intermediary for the sell side, then asset manager/institutional, leveraged funds, and other reportables for the buy side.
When headline talk say hedge funds hold their biggest short position in crude oil for years, the series behind am normally na managed money for the disaggregated report. The same sentence about the S&P 500 mean leveraged funds for the TFF. The labels no be interchangeable.
Wetin really dey count for COT report?
Na big traders, and nobody else. Clearing members, futures commission merchants, and foreign brokers dey file daily reports for every trader wey position reach or pass the reporting level wey CFTC regulation set. Market go only show for COT when at least 20 traders hold positions for those levels. Reportable positions normally cover 70 to 90 percent of open interest for a market. The remaining positions enter one nonreportable line. E no get category or trader count attached.
The categories na declared occupations, no be strategies. Commercial, or producer/merchant/processor/user, na firm wey futures position dey hedge its business activity, as e state for the firm’s CFTC Form 40. Managed money na pooled speculative capital: advisors, pool operators, and funds wey dey trade for clients. Grain elevator wey dey hedge inventory and fund wey dey position for price move fit hold identical contracts for opposite columns. The report dey show who hold position. E no ever show why.
Two ways people dey misread COT report
Record net long no be timing tool. Net position na one number wey come from two figures: longs minus shorts, measured in contracts inside one category. Record reading mean say that category exposure reach extreme level as at Tuesday. E no tell you when, or whether, that exposure go unwind. Crowd-position gauges get this same limit across asset classes: put/call ratio and FINRA short interest data both describe position wey people don already take.
Raw contract counts no fit compare different products. COT table dey count contracts, and contract na quantity of something. One COMEX gold contract cover 100 troy ounces. One NYMEX crude contract cover 1,000 barrels. When you rank markets by contract count, you dey rank dem according to unit definitions wey exchanges set decades ago. The same calculation apply to equities, where share na the unit.
The exact SQL behind every number
WITH raw AS (
SELECT ticker,
toTimeZone(window_start, 'America/New_York') AS et,
close,
volume
FROM global_markets.delayed_stocks_minute_aggs
WHERE ticker IN ('SPY', 'QQQ', 'TLT', 'GLD', 'SLV', 'USO', 'UNG')
AND window_start >= toDateTime('2026-07-01 00:00:00')
AND window_start < toDateTime('2026-08-01 00:00:00')
),
rth AS (
SELECT ticker,
volume AS shares,
toFloat64(close) * volume AS dollars
FROM raw
WHERE (toHour(et) * 60 + toMinute(et)) BETWEEN 570 AND 959
)
SELECT ticker,
round(sum(dollars) / sum(shares), 2) AS unit_size_usd,
round(100 * sum(shares) / sum(sum(shares)) OVER (), 2) AS share_of_units_pct,
round(100 * sum(dollars) / sum(sum(dollars)) OVER (), 2) AS share_of_dollars_pct
FROM rth
GROUP BY ticker
ORDER BY unit_size_usd DESCOne unit of SPY change hands for average price of $744.99 for July 2026, compared with $10.52 for one unit of UNG. One thousand units of each one no be the same amount of money. Across the seven funds, SPY take 31.75% of the units traded and 50.07% of the dollars, while UNG take 5.41% of the units and 0.12% of the dollars. Share of the units go equal share of the dollars only when every unit get the same price. Compare positioning inside one market over time, or convert contracts to notional value before you rank anything.
COT report FAQ
COT report dey release for what time?
Na 3:30 p.m. Eastern time every Friday, for CFTC website. Dem dey measure positions as of business close for the Tuesday before, so the file don old three days by the time dem publish am. If federal holiday fall inside the reporting week, release fit delay one or two days.
COT report free?
Yes. CFTC dey publish am free of charge, as tables wey person fit view and files wey person fit download. Commercial positioning products dey package the same public data again with charts and historical records.
Wetin be the difference between legacy and disaggregated COT reports?
Legacy report dey divide market into commercial, non-commercial and nonreportable positions. Disaggregated report dey divide physical commodity markets into producer/merchant/processor/user, swap dealers, managed money and other reportables. Financial markets get similar treatment for Traders in Financial Futures report.
COT report dey show every trader position?
No. E dey count traders wey reach or pass CFTC reporting levels. This one usually cover 70 to 90 percent of market open interest. Dem only publish market when 20 or more traders dey those levels. Dem gather everybody wey dey below the threshold into one anonymous nonreportable line.
COT report fit predict price movement?
Na position census wey get three-day lag, e no be forecast. E record where large traders stand on Tuesday. Even extreme reading no get fixed date for when e must end.
Every number for this page na stored query wey use minute-level price and volume history, and the SQL dey open under each panel. The COT file remain as e always be: free, every Friday at 3:30. Run the same panels for the markets wey you dey follow on the Strasmore terminal.