COT 보고서 발표일과 확인 시간
CFTC는 매주 금요일 오후 3시 30분(미 동부시간)에 COT 보고서를 발표합니다. 화요일 마감 기준 데이터와 3일 시차, 읽는 법을 확인할 수 있습니다.
Commitments of Traders 보고서인 COT 보고서는 미국 상품선물거래위원회(CFTC)가 매주 금요일 오후 3시 30분(미 동부시간)에 발표하며, 직전 화요일 거래 마감 시점의 포지션을 집계한다. 집계일과 발표일 사이에는 3일이 있다. 이 시차와 대형 트레이더만 포착하는 보고 기준이 이 무료 주간 파일이 실제로 알려줄 수 있는 내용을 규정한다.
COT 보고서는 매주 언제 발표되는가?
금요일 오후 3시 30분(미 동부시간)이며, 규제기관이 직접 발표한다. CFTC의 Commitments of Traders 페이지에서 파일을 무료로 확인할 수 있다. 표 형태로 열람하거나 텍스트 파일로 내려받을 수 있다.
달력에서 중요한 점은 발표 시각보다 다음 두 가지다.
- 데이터 기준일은 금요일이 아니라 화요일이다. 금요일 파일의 모든 수치는 화요일 거래 마감 시점의 포지션을 나타낸다.
- 연방 공휴일이 있으면 발표일이 바뀐다. 보고 주간에 공휴일이 포함되면 발표가 하루나 이틀 늦어질 수 있다. CFTC는 매주 실제 발표일이 기재된 일정을 게시한다. 평상시에는 금요일 발표 원칙이 적용되지만, 연방 공휴일이 있는 주에는 일정이 달라진다.
같은 화요일의 데이터는 둘 이상의 파일로 제공된다. 선물만 포함한 버전과 옵션·선물을 합산한 버전이 있다. 후자의 옵션 포지션은 거래소가 제공하는 델타 계수를 사용해 선물 등가 기준으로 환산된다. 같은 날 같은 시장에 대해 서로 다른 수치를 인용하는 두 사람은 대개 서로 다른 버전을 보고 있는 것이다.
COT 보고서를 읽을 때 왜 3일 전 데이터인가?
집계 시점과 발표 시점의 시차는 포지션 데이터에서 가장 중요한 요소다. 수요일, 목요일 또는 금요일 오전에 대형 트레이더들이 취한 포지션은 오후 3시 30분에 발표되는 파일에 반영되지 않는다. 이 정보 공백의 규모를 파악하기 위해 여기서는 COT가 다루는 시장을 추종하는 ETF를 측정한다. 대상은 주식, 미국 국채, 금속, 에너지다. 이 ETF는 선물계약 자체가 아니다. 다만 3일 동안 해당 시장이 얼마나 움직였는지를 보여주는 적절한 기준이다.
모든 수치 뒤에 숨겨진 정확한 SQL
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 DESC2년간의 보고 주간을 분석한 결과, 화요일 종가부터 금요일 오후 3시 30분 체결가까지의 중간값은 2.97%의 UNG에서 0.66%의 TLT까지였다. 측정 기간은 97주다. 절반의 주간 변동은 이 중간값보다 작았다. 화요일 스냅샷이 낡은 데이터가 되는 이유는 극단값에 있다. 10주 중 한 주는 UNG에서 8.68% 이상 움직였고, 해당 주간의 68%는 2%를 웃돌았다.
한 시장을 주별로 보면 이 시차가 얼마나 불균등한지 확인할 수 있다.
모든 수치 뒤에 숨겨진 정확한 SQL
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 week2026년 7월 31일까지의 연간 보고 주간 48주를 보면, 차트에 표시된 첫 주인 Aug 8, 2025 종료 주간의 시차는 1.45%였다. 마지막 주인 Jul 31, 2026 종료 주간은 0.86%였다. 어떤 주에는 파일이 거의 최신 데이터에 가깝다. 다른 주에는 이미 움직임이 끝난 시장을 설명한다. 파일에 표시된 내용만으로는 현재 어느 경우에 해당하는지 알 수 없다. 공매도 잔고도 더 긴 주기의 같은 문제를 가진다. 공매도 잔고가 발표되는 시점은 그 일정을 설명하고, 공매도 잔고 데이터가 2주 전 수치인 이유는 시차의 원인을 설명한다.
금요일 오후 3시 30분에는 어떤 일이 일어나는가?
이 파일은 미국 주식시장이 미 동부시간 오후 4시에 마감하기 30분 전에 발표된다. 다음은 금요일 정규 거래일의 거래량을 15분 단위로 나눈 모습이다.
모든 수치 뒤에 숨겨진 정확한 SQL
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.bucket미국 거래일의 거래량은 미소 모양의 패턴을 보인다. 첫 15분 동안 하루 전체 거래량의 6.98%가 거래된다. 정오 구간의 거래량은 2.72%까지 줄어든다. 연속 거래의 마지막 15분에는 13.17%가 거래된다. 보고서가 발표되는 15시 30분 구간의 거래량은 4.92%다. 보고서는 거래 주간 마지막 날의 장 마감 전 거래량이 늘어나는 구간에 발표된다. 이는 달력상의 사실일 뿐, 해당 파일에 어떤 거래가 반영되는지를 의미하지는 않는다.
Legacy, Disaggregated, TFF 중 어떤 것이 어떤 COT 보고서인가?
COT라는 이름을 사용하는 보고서는 4개다. 각각 같은 화요일의 미결제약정을 서로 다른 방식으로 분류한다.
- Legacy는 각 시장을 상업적 포지션, 비상업적 포지션, 비보고 포지션으로 나눈다. 가장 오래된 형식이며, 대부분의 사람이 “COT 보고서”라고 할 때 의미하는 보고서다.
- Supplemental은 13개 농산물 상품을 다루며, 인덱스 트레이더를 별도 범주로 구분한다.
- Disaggregated는 농산물과 석유부터 천연가스, 전력, 금속에 이르는 실물 상품시장을 다룬다. 생산자·상인·가공업자·사용자, 스왑 딜러, 운용자금, 기타 보고대상 트레이더의 4개 범주를 사용한다.
- Traders in Financial Futures인 TFF 보고서는 통화, 미국 국채, 주가지수, 변동성 등을 포함한 금융계약을 다룬다. 매도 측에는 딜러·중개기관이, 매수 측에는 자산운용사·기관, 레버리지드 펀드, 기타 보고대상 트레이더가 분류된다.
헤드라인에서 헤지펀드가 수년 만에 가장 큰 원유 순매도 포지션을 보유하고 있다고 말할 때, 기초 데이터는 대개 Disaggregated 보고서의 운용자금 포지션이다. 같은 문장이 S&P 500을 가리킨다면 TFF의 레버리지드 펀드 포지션을 의미한다. 이 명칭들은 서로 바꿔 사용할 수 없다.
COT 보고서에는 실제로 누가 집계되는가?
대형 트레이더만 집계된다. 청산회원, 선물중개회사, 외국 브로커는 CFTC 규정이 정한 보고 기준 이상으로 포지션을 보유한 모든 트레이더에 대해 매일 보고서를 제출한다. 시장은 해당 기준 이상으로 포지션을 보유한 트레이더가 20명 이상일 때만 COT에 포함된다. 보고대상 포지션은 대개 해당 시장 미결제약정의 70~90%를 차지한다. 나머지는 범주와 트레이더 수가 표시되지 않는 하나의 비보고 포지션 항목으로 집계된다.
범주는 전략이 아니라 신고된 업종을 나타낸다. 상업적 트레이더 또는 생산자·상인·가공업자·사용자는 CFTC Form 40에 기재된 사업활동을 선물 포지션으로 헤지하는 기업이다. 운용자금은 고객을 대신해 거래하는 자문사, 상품풀 운용자, 펀드 등 공동 운용되는 투기성 자본이다. 곡물 저장업체가 재고를 헤지하고 펀드가 가격 변동에 대비해 포지션을 취할 때, 두 주체는 동일한 계약을 서로 반대되는 범주에 보유할 수 있다. 보고서는 누가 포지션을 보유했는지만 보여준다. 그 이유는 설명하지 않는다.
COT 보고서를 잘못 해석하는 두 가지 방식
기록적인 순매수 포지션은 매매 시점을 알려주는 지표가 아니다. 순포지션은 한 범주 안에서 매수 포지션에서 매도 포지션을 뺀 계약 수로 산출되는 하나의 수치다. 기록적인 수치는 화요일 기준으로 해당 범주의 익스포저가 극단적인 수준에 있었다는 뜻이다. 그 익스포저가 언제 또는 실제로 해소될지는 알려주지 않는다. 군중 포지션 지표는 자산군을 막론하고 같은 한계를 가진다. put/call 비율과 FINRA 공매도 잔고 데이터도 이미 취해진 포지션을 보여줄 뿐이다.
계약 수만으로 상품 간 비교를 해서는 안 된다. COT 표는 계약 수를 집계하며, 계약은 특정 자산의 수량을 나타낸다. COMEX 금 선물 1계약은 트로이온스 100개를 의미한다. NYMEX 원유 선물 1계약은 1,000배럴을 의미한다. 계약 수로 시장 순위를 매기면 수십 년 전 거래소가 정한 단위 정의에 따라 순위를 매기는 셈이다. 주식시장에서도 같은 산술이 적용되며, 이때 단위는 주식 1주다.
모든 수치 뒤에 숨겨진 정확한 SQL
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 DESCSPY 1단위는 2026년 7월 평균 $744.99에 거래됐다. UNG 1단위의 평균 거래가격은 $10.52였다. 각각 1,000단위씩 거래해도 동일한 금액이 아니다. 7개 펀드 가운데 SPY는 거래된 단위의 31.75%와 거래대금의 50.07%를 차지했다. 반면 UNG는 거래 단위의 5.41%와 거래대금의 0.12%를 차지했다. 모든 단위의 가격이 같을 때만 단위 비중과 거래대금 비중이 일치한다. 하나의 시장 안에서 시간에 따른 포지션을 비교하거나, 순위를 매기기 전에 계약을 명목가치로 환산해야 한다.
COT 보고서 FAQ
COT 보고서는 몇 시에 발표되는가?
금요일 오후 3시 30분(미 동부시간)에 CFTC 웹사이트에서 발표된다. 포지션은 직전 화요일 거래 마감 시점 기준으로 집계되므로, 발표 시점에는 3일 전 데이터다. 보고 주간에 연방 공휴일이 있으면 발표가 하루나 이틀 늦어진다.
COT 보고서는 무료인가?
그렇다. CFTC는 이를 무료로 발표한다. 표 형태로 열람할 수 있고 파일로 내려받을 수도 있다. 상업용 포지션 데이터 상품은 동일한 공개 데이터에 차트와 과거 데이터를 추가해 재가공한다.
Legacy COT 보고서와 Disaggregated COT 보고서의 차이는 무엇인가?
Legacy는 시장을 상업적 포지션, 비상업적 포지션, 비보고 포지션으로 나눈다. Disaggregated는 실물 상품시장을 생산자·상인·가공업자·사용자, 스왑 딜러, 운용자금, 기타 보고대상 트레이더로 나눈다. 금융시장은 Traders in Financial Futures 보고서에서 이에 상응하는 방식으로 분류된다.
COT 보고서는 모든 트레이더의 포지션을 보여주는가?
아니다. CFTC 보고 기준 이상으로 포지션을 보유한 트레이더만 집계한다. 이 기준은 대개 시장 미결제약정의 70~90%를 포괄한다. 또한 해당 기준 이상으로 포지션을 보유한 트레이더가 20명 이상일 때만 시장이 발표 대상이 된다. 기준 미만의 모든 포지션은 익명의 하나의 비보고 포지션 항목으로 합산된다.
COT 보고서로 가격 변동을 예측할 수 있는가?
COT 보고서는 3일의 시차가 있는 포지션 집계 자료이지 전망 자료가 아니다. 화요일 기준 대형 트레이더의 포지션을 기록할 뿐이며, 극단적인 수치가 언제 해소될지는 알려주지 않는다.
이 페이지의 모든 수치는 분 단위 가격·거래량 이력에 대한 저장된 쿼리에서 산출되며, 각 패널 아래에서 SQL을 확인할 수 있다. COT 파일 자체는 이전과 마찬가지로 매주 금요일 오후 3시 30분에 무료로 제공된다. Strasmore 터미널에서 관심 시장에 동일한 패널을 실행해 보라.