Strasmore Research
Deep Dives · Matt ConnorBy Matt Connor ·

COT-rapport lezen: uitleg van kolommen en net position

Leer hoe u het COT-rapport interpreteert. Wij leggen de kolommen in de legacy, disaggregated en TFF tabellen uit, inclusief de berekening van de net position en de twee limieten.

Leren lezen van het COT-rapport
Het leren lezen van het COT-rapport begint bij de structuur ervan: het Commitments of Traders-rapport is een wekelijks overzicht van open futures-posities, ingedeeld naar het type handelaar, gepubliceerd door de Commodity Futures Trading Commission. Elke cel bevat een aantal contracten; het is nooit een prijs en nooit een prognose. Deze pagina gaat ervan uit dat u bekend bent met het schema, dat wordt behandeld in wanneer het COT-rapport wordt gepubliceerd, en behandelt de kolommen, de berekening van de net position en de twee limieten die het benoemen waard zijn.

Wat het COT-rapport daadwerkelijk telt

Elk cijfer is een aantal contracten, samengesteld uit de positierapporten die clearingleden en beurzen indienen bij de CFTC. Een rekening wordt pas opgenomen boven een rapportagedrempel, die voor elke markt afzonderlijk is vastgesteld, en alles daaronder belandt in één restcategorie. Drie mechanismen veroorzaken het merendeel van de verwarring:

  • Long- en shortposities worden afzonderlijk gerapporteerd en beide zijn bruto. Een firma die vierduizend long- en drieduizend shortposities aanhoudt, verschijnt in beide kolommen, niet als een nettoresultaat van duizend.
  • Spreading vormt een eigen kolom voor de speculatieve categorieën: gelijke en compenserende long- en shortposities in dezelfde markt, die één keer worden geteld.
  • Open interest is het totaal aantal uitstaande contracten op die datum. De longposities in alle categorieën vormen samen dit totaal, evenals de shortposities.

Het legacy-rapport: commercieel, niet-commercieel, niet-rapporteerbaar

Dit is het oudste formaat en nog steeds het meest geciteerde. Het verdeelt rapporteerbare handelaren in twee klassen en voegt de rest samen in een derde categorie.

  • Commercieel: een rekening die aan de CFTC heeft gemeld dat zij de markt gebruikt om een onderliggende bedrijfsblootstelling te hedgen. Denk aan een graansilo, een raffinaderij of een bank die een swap-portefeuille hedget.
  • Niet-commercieel: een rapporteerbare rekening zonder dergelijke hedging-claim. Hieronder vallen grote speculanten en managed futures-programma's.
  • Niet-rapporteerbaar: iedereen die onder de drempelwaarde valt. Dit cijfer wordt afgeleid als residu van de open interest minus de rapporteerbare long- en short-totalen, in plaats van direct verzameld.

De classificatie wordt zelf aangegeven op een ingediend formulier. Een firma met zowel een hedging-desk als een speculatieve desk wordt ingedeeld op basis van haar voornaamste activiteit.

Het gedesaggregeerde rapport: vier categorieën in plaats van twee

Voor fysieke grondstoffen publiceert de CFTC ook een gedesaggregeerde versie, waarbij de oude commerciële categorie in tweeën wordt gesplitst en de oude niet-commerciële categorie eveneens in tweeën.

  • Producent, handelaar, verwerker, gebruiker: de deelnemers aan de fysieke markt die voorraden of productie afdekken met een hedge.
  • Swap dealer: een dealer wiens futures-positie swaps compenseert die met cliënten zijn afgesloten; aangezien deze cliënten hedgers of speculanten kunnen zijn, is deze regel een gemengde stroom via één tegenpartij.
  • Managed money: commodity trading advisors, pool-operators en hedge funds die voor cliënten handelen; dit is de categorie die het dichtst in de buurt komt van een trendvolgende lijn in het rapport.
  • Overige rapportageplichtigen: grote rekeningen die in geen van de bovenstaande categorieën passen.

Het TFF-rapport: categorieën voor financiële futures

Voor Treasuries, aandelenindices en valuta hanteert het Traders in Financial Futures-rapport een vierde vocabulaire:

  • Dealer/intermediary: de sell-side, banken en dealers die doorgaans de tegenpartij vormen voor de orderstroom van klanten in plaats van een eigen visie uit te dragen.
  • Asset manager/institutional: pensioenfondsen, verzekeraars, beleggingsfondsen en stichtingen.
  • Leveraged funds: hedge funds en CTA's; dit is de categorie waar de meeste mensen aan refereren wanneer zij stellen dat "de fondsen short zitten".
  • Other reportables: grote rapportageplichtige rekeningen die buiten de eerste drie categorieën vallen.

TFF is een andere indeling van dezelfde open interest en geen tweede opinie op de legacy-tabel; de categorieën komen daarom niet één-op-één overeen met commercial en non-commercial.

Hoe een netto positie uit het COT-rapport te berekenen

De netto positie zelf is eenvoudig: long minus short, binnen één categorie. Spreading valt per definitie buiten beide zijden, en over een volledig rapport tellen de netto posities van de categorieën op tot nul, aangezien tegenover elk longcontract een shortcontract staat.

De ruwe netto positie is waar metingen vaak fout gaan. Een netto positie van tweehonderdduizend contracten betekent iets anders bij een open interest van achthonderdduizend dan bij vier miljoen. De correctie is deling: de netto positie gedeeld door de open interest geeft het aandeel van die categorie weer, wat vergelijkbaar is over verschillende perioden en contracten.

CFTC-positionering staat hier niet in de panelen, dus onderstaande berekening is gebaseerd op data die u zelf kunt ophalen. Het blok telt maandelijks het aantal AAPL call- en putopties en drukt het verschil vervolgens twee keer uit: eenmaal als ruw getal en eenmaal als aandeel van het maandelijkse totaal; dit is de beweging achter hoe de put/call ratio wordt berekend.

QueryNet calls minus puts op AAPL, ruwe contracten en als aandeel in volume
De exacte SQL achter elk getal
SELECT
    toString(month_start)                       AS month,
    formatDateTime(month_start, '%b %Y')        AS month_label,
    round(call_volume / 1000, 0)                AS call_contracts_thousands,
    round(put_volume / 1000, 0)                 AS put_contracts_thousands,
    round((call_volume - put_volume) / 1000, 0) AS net_contracts_thousands,
    round(100 * (call_volume - put_volume) / total_volume, 1) AS net_share_pct
FROM
(
    SELECT
        toStartOfMonth(date)                        AS month_start,
        sumIf(volume, option_type IN ('call', 'C')) AS call_volume,
        sumIf(volume, option_type IN ('put', 'P'))  AS put_volume,
        sum(volume)                                 AS total_volume
    FROM global_markets.options_greeks
    WHERE underlying_symbol = 'AAPL'
      AND date >= '2024-01-01'
      AND date <  '2026-07-01'
      AND iv_converged = 1
      AND volume > 0
    GROUP BY month_start
)
ORDER BY month_start
Run this yourself

In Jan 2024 bedroeg de netto positie 3294 duizend contracten, of 18.9% van het totale volume van die maand. Tegen Jun 2026 bedroeg de netto positie 4671 duizend, oftewel 27.7%. Over alle 30 maanden stijgt en daalt de ruwe netto positie met de bedrijvigheid van de markt, terwijl het aandeel die activiteit wegfiltert, precies zoals een COT-netto positie dat doet ten opzichte van de open interest.

Waarom een percentiel eerlijker is dan een ruwe netto-stand

Zodra de netto-stand een aandeel is, wordt de tweede stap historisch. Een categorie met twaalf procent van de open interest is alleen hoog of laag in vergelijking met het eigen verleden van die markt. De standaardmethode is een percentiel over een meerjarige terugblik: het deel van de historische waarnemingen dat gelijk is aan of lager ligt dan de huidige stand.

Amerikaanse aandelen hebben hun eigen positioneringstape. FINRA short interest-data rapporteert tweemaal per maand het aantal geshorte aandelen, en 'days to cover' deelt dat aantal door het gemiddelde dagvolume; dit is dezelfde normalisatiestap die de netto-stand ten opzichte van de open interest uitvoert. Het onderstaande overzicht koppelt zes bekende namen aan hun meest recente stand en rangschikt elk daarvan binnen de eigen periode van vijf jaar.

QueryActuele days to cover, en de positie in de vijfjarige historie van het instrument
De exacte SQL achter elk getal
WITH history AS
(
    SELECT
        ticker,
        settlement_date,
        max(toFloat64(days_to_cover))  AS dtc,
        max(toFloat64(short_interest)) AS si
    FROM global_markets.stocks_short_interest
    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'KO', 'XOM', 'JNJ')
      AND settlement_date >= today() - 1825
      AND days_to_cover > 0
    GROUP BY ticker, settlement_date
),
latest AS
(
    SELECT
        ticker,
        argMax(dtc, settlement_date)   AS latest_dtc,
        argMax(si, settlement_date)    AS latest_si,
        toString(max(settlement_date)) AS snapshot_label
    FROM history
    GROUP BY ticker
)
SELECT
    l.ticker                                                 AS symbol,
    l.snapshot_label                                         AS snapshot_label,
    round(l.latest_si / 1e6, 1)                              AS short_interest_millions,
    round(l.latest_dtc, 2)                                   AS days_to_cover_ratio,
    round(100 * countIf(h.dtc <= l.latest_dtc) / count(), 0) AS percentile_5y_pct
FROM history AS h
INNER JOIN latest AS l ON h.ticker = l.ticker
GROUP BY l.ticker, l.snapshot_label, l.latest_si, l.latest_dtc
ORDER BY percentile_5y_pct DESC
Run this yourself

De hoogste van de zes, NVDA, bevindt zich op het 100e percentiel van het eigen vijfjaarsbereik met 2.47 'days to cover'. De laagste, XOM, bevindt zich op het 76e percentiel. De kolom met ruwe short-aandelen geeft 324.1 miljoen tegenover 42.7 miljoen aan, en die kolom volgt eerder de omvang van het bedrijf dan de positionering; daarom kan deze niet tussen namen onderling worden vergeleken. Dat geldt ook voor een COT netto-stand tussen contracten.

Het percentiel beweegt ook bij een gelijkblijvend ruw getal, en vice versa. Het volgen van één naam over drie jaar maakt dat zichtbaar.

QueryAAPL days to cover en de rangschikking binnen het driejarige venster
De exacte SQL achter elk getal
WITH history AS
(
    SELECT
        settlement_date               AS d,
        max(toFloat64(days_to_cover)) AS dtc
    FROM global_markets.stocks_short_interest
    WHERE ticker = 'AAPL'
      AND settlement_date >= '2023-07-01'
      AND settlement_date <  '2026-07-01'
      AND days_to_cover > 0
    GROUP BY settlement_date
)
SELECT
    toString(a.d)                                     AS settlement_date,
    formatDateTime(a.d, '%b %e, %Y')                  AS as_of_label,
    round(a.dtc, 2)                                   AS days_to_cover_ratio,
    round(100 * countIf(b.dtc <= a.dtc) / count(), 0) AS window_percentile_pct
FROM history AS a
CROSS JOIN history AS b
GROUP BY a.d, a.dtc
ORDER BY a.d
Run this yourself

Over de 72 tweemaandelijkse waarnemingen blijft de ratio binnen een nauwe bandbreedte, terwijl de percentiellijn het grootste deel van het bereik van nul tot honderd beslaat. De laatste waarneming, op Jun 30, 2026, bedroeg 1.73 'days to cover', oftewel het 17e percentiel van de periode.

De twee limieten, helder uiteengezet

De momentopname is van dinsdag en bereikt u op vrijdag

Posities zijn gebaseerd op de slotkoersen van dinsdag en het rapport wordt op vrijdagmiddag verzonden. Wat het beschrijft is bij aankomst dus drie handelsdagen oud; een categorie die op woensdag is gedraaid, toont hier nog het oude beeld. Het onderstaande overzicht meet de afstand die SPY heeft afgelegd vanaf elk slot op dinsdag tot het daaropvolgende slot op vrijdag.

QuerySPY-beweging van slot dinsdag tot slot vrijdag, de ouderdom van een COT-snapshot
De exacte SQL achter elk getal
WITH spy AS
(
    SELECT
        date,
        toFloat64(close) AS close_px
    FROM global_markets.stocks_daily_aggs
    WHERE ticker = 'SPY'
      AND date >= '2016-01-01'
      AND date <  '2026-07-01'
)
SELECT
    toString(toYear(tue.date)) AS year,
    count()                    AS session_pair_count,
    round(quantileDeterministic(0.5)(abs(fri.close_px / tue.close_px - 1) * 100,
          toUInt64(toUnixTimestamp(tue.date))), 2) AS median_gap_move_pct,
    round(quantileDeterministic(0.9)(abs(fri.close_px / tue.close_px - 1) * 100,
          toUInt64(toUnixTimestamp(tue.date))), 2) AS p90_gap_move_pct
FROM spy AS tue
INNER JOIN spy AS fri ON fri.date = tue.date + 3
WHERE toDayOfWeek(tue.date) = 2
GROUP BY year
ORDER BY year
Run this yourself

In 2016 bedroeg de mediane absolute beweging over 51 dinsdag-tot-vrijdagparen 0.88%, en het slechtste tiende deel van de gaps besloeg ten minste 2.2%. In 2026 bedroeg de mediaan 1.26%. Futures op aandelenindices volgen die koersontwikkeling nauwgezet, waardoor een COT-meting op vrijdag een markt beschrijft die al in beweging is geweest. Positioneringsdata beschrijven de afgelopen dinsdag, niet het heden.

"De commercials hebben altijd gelijk" is folklore

In veel fysieke markten is de categorie 'commercials' structureel short, aangezien producenten hun bezit afdekken met een hedge. Een netto-positie die in bijna elke week van een decennium negatief is, is een kenmerk van de classificatie, geen track record. Om van een COT-categorie een bewering te maken, is een vastgestelde horizon, een vastgestelde drempelwaarde, een steekproef inclusief de perioden waarin het faalde, en een eerlijke telling van hoeveel drempelwaarden er eerst zijn getest vereist. Dezelfde discipline geldt voor elke graadmeter voor marktpositionering, inclusief degene die wordt onderzocht in is een hoge put/call ratio bullish.

Zelf het ruwe CFTC-bestand lezen

U heeft geen betaalde divergentie-indicator nodig voor deze analyse. De CFTC publiceert het wekelijkse rapport op de eigen Commitments of Traders-pagina. Dit gebeurt in een korte en lange indeling, in varianten voor uitsluitend futures en voor futures-en-opties-gecombineerd, als door komma's gescheiden tekst naast historische archieven die teruggaan tot negentien tachtig-zes. Twee gewoontes houden een spreadsheet betrouwbaar: kies één variant en houd u daaraan, aangezien de cijfers voor uitsluitend futures en de gecombineerde variant voor dezelfde week verschillen, en bereken het percentiel op basis van het aandeel in plaats van de ruwe netto-positie.

Veelgestelde vragen

Wat betekenen 'commercial' en 'non-commercial' in het COT-rapport?

Commercial traders hebben aan de CFTC verklaard dat zij de markt gebruiken om een zakelijk risico af te dekken, zoals een producent die zijn productie afdekt of een bank die een swap-portefeuille hedget. Non-commercial traders zijn rapportageplichtige rekeningen zonder een dergelijke hedging-doelstelling; dit zijn grotendeels grote speculanten en managed futures-programma's. Het label wordt door de partijen zelf opgegeven.

Is het COT-rapport vertraagd?

Ja. De posities worden vastgelegd bij de slotkoers van dinsdag en op vrijdagmiddag gepubliceerd, waardoor de data drie handelsdagen oud is wanneer deze u bereikt.

Is er een COT-rapport voor aandelen?

Niet voor individuele aandelen. De dichtstbijzijnde equivalenten zijn de tweemaandelijkse short interest-meldingen en de maandelijkse FINRA-statistieken over margeschulden. Beide verschijnen met een vertraging en zijn beter bruikbaar als percentiel dan als ruw totaalcijfer.


Elk paneel hier wordt geleverd met de SQL-code die het heeft gegenereerd. Open een paneel, vervang de ticker, en dezelfde berekening wordt uitgevoerd voor elk gewenst aandeel op de Strasmore-terminal.