{"slug":"how-to-read-the-cot-report","qid":"positioning_percentile","label":"Latest days to cover, and where it sits in five years of the same name's history","post_title":"How to Read the COT Report: Columns Explained","post_url":"/blog/how-to-read-the-cot-report#q-positioning_percentile","columns":["symbol","snapshot_label","short_interest_millions","days_to_cover_ratio","percentile_5y_pct"],"rows":[{"symbol":"NVDA","snapshot_label":"2026-07-31","short_interest_millions":292.7,"days_to_cover_ratio":2.3,"percentile_5y_pct":99},{"symbol":"JNJ","snapshot_label":"2026-07-31","short_interest_millions":25.4,"days_to_cover_ratio":2.99,"percentile_5y_pct":90},{"symbol":"XOM","snapshot_label":"2026-07-31","short_interest_millions":42.3,"days_to_cover_ratio":2.94,"percentile_5y_pct":76},{"symbol":"AAPL","snapshot_label":"2026-07-31","short_interest_millions":141.6,"days_to_cover_ratio":2.42,"percentile_5y_pct":73},{"symbol":"KO","snapshot_label":"2026-07-31","short_interest_millions":44.8,"days_to_cover_ratio":2.39,"percentile_5y_pct":69},{"symbol":"MSFT","snapshot_label":"2026-07-31","short_interest_millions":81.3,"days_to_cover_ratio":2.03,"percentile_5y_pct":51}],"shape":"table","sql":"WITH history AS\n(\n    SELECT\n        ticker,\n        settlement_date,\n        max(toFloat64(days_to_cover))  AS dtc,\n        max(toFloat64(short_interest)) AS si\n    FROM global_markets.stocks_short_interest\n    WHERE ticker IN ('AAPL', 'MSFT', 'NVDA', 'KO', 'XOM', 'JNJ')\n      AND settlement_date >= today() - 1825\n      AND days_to_cover > 0\n    GROUP BY ticker, settlement_date\n),\nlatest AS\n(\n    SELECT\n        ticker,\n        argMax(dtc, settlement_date)   AS latest_dtc,\n        argMax(si, settlement_date)    AS latest_si,\n        toString(max(settlement_date)) AS snapshot_label\n    FROM history\n    GROUP BY ticker\n)\nSELECT\n    l.ticker                                                 AS symbol,\n    l.snapshot_label                                         AS snapshot_label,\n    round(l.latest_si / 1e6, 1)                              AS short_interest_millions,\n    round(l.latest_dtc, 2)                                   AS days_to_cover_ratio,\n    round(100 * countIf(h.dtc <= l.latest_dtc) / count(), 0) AS percentile_5y_pct\nFROM history AS h\nINNER JOIN latest AS l ON h.ticker = l.ticker\nGROUP BY l.ticker, l.snapshot_label, l.latest_si, l.latest_dtc\nORDER BY percentile_5y_pct DESC","computed_at":"2026-08-22T04:13:51.421783+00:00","elapsed":1.372591717}