{"slug":"when-is-the-cot-report-released","qid":"snapshot_gap","label":"How far seven markets travel between Tuesday's close and Friday 3:30 pm ET, Aug 2024 to Jul 2026","post_title":"When Is the COT Report Released?","post_url":"/blog/when-is-the-cot-report-released#q-snapshot_gap","columns":["ticker","weeks_counted","median_abs_move_pct","p90_abs_move_pct","pct_weeks_over_2pct"],"rows":[{"ticker":"UNG","weeks_counted":97,"median_abs_move_pct":2.97,"p90_abs_move_pct":8.68,"pct_weeks_over_2pct":68},{"ticker":"USO","weeks_counted":97,"median_abs_move_pct":2.63,"p90_abs_move_pct":6.71,"pct_weeks_over_2pct":63.9},{"ticker":"SLV","weeks_counted":97,"median_abs_move_pct":2.55,"p90_abs_move_pct":8.5,"pct_weeks_over_2pct":56.7},{"ticker":"QQQ","weeks_counted":97,"median_abs_move_pct":1.52,"p90_abs_move_pct":3.6,"pct_weeks_over_2pct":33},{"ticker":"GLD","weeks_counted":97,"median_abs_move_pct":1.11,"p90_abs_move_pct":2.97,"pct_weeks_over_2pct":25.8},{"ticker":"SPY","weeks_counted":97,"median_abs_move_pct":0.96,"p90_abs_move_pct":2.57,"pct_weeks_over_2pct":20.6},{"ticker":"TLT","weeks_counted":97,"median_abs_move_pct":0.66,"p90_abs_move_pct":1.9,"pct_weeks_over_2pct":8.2}],"shape":"table","sql":"WITH raw AS (\n    SELECT ticker,\n           toTimeZone(window_start, 'America/New_York') AS et,\n           close\n    FROM global_markets.delayed_stocks_minute_aggs\n    WHERE ticker IN ('SPY', 'QQQ', 'TLT', 'GLD', 'SLV', 'USO', 'UNG')\n      AND window_start >= toDateTime('2024-08-01 00:00:00')\n      AND window_start < toDateTime('2026-08-01 00:00:00')\n),\nbars AS (\n    SELECT ticker,\n           toDate(et) AS session_date,\n           toDayOfWeek(et) AS day_of_week,\n           toHour(et) * 60 + toMinute(et) AS minute_of_day,\n           close\n    FROM raw\n    WHERE toDayOfWeek(et) IN (2, 5)\n      AND (toHour(et) * 60 + toMinute(et)) BETWEEN 570 AND 959\n),\ntuesday_snapshot AS (\n    SELECT ticker,\n           toMonday(session_date) AS week_start,\n           argMax(close, minute_of_day) AS tuesday_close\n    FROM bars\n    WHERE day_of_week = 2\n    GROUP BY ticker, week_start\n),\nfriday_release AS (\n    SELECT ticker,\n           toMonday(session_date) AS week_start,\n           argMax(close, minute_of_day) AS friday_1530\n    FROM bars\n    WHERE day_of_week = 5\n      AND minute_of_day BETWEEN 900 AND 930\n    GROUP BY ticker, week_start\n)\nSELECT t.ticker AS ticker,\n       count() AS weeks_counted,\n       round(quantileDeterministic(0.5)(abs(toFloat64(f.friday_1530) / toFloat64(t.tuesday_close) - 1) * 100,\n                                        cityHash64(toString(t.week_start))), 2) AS median_abs_move_pct,\n       round(quantileDeterministic(0.9)(abs(toFloat64(f.friday_1530) / toFloat64(t.tuesday_close) - 1) * 100,\n                                        cityHash64(toString(t.week_start))), 2) AS p90_abs_move_pct,\n       round(100 * countIf(abs(toFloat64(f.friday_1530) / toFloat64(t.tuesday_close) - 1) * 100 >= 2) / count(), 1) AS pct_weeks_over_2pct\nFROM tuesday_snapshot AS t\nINNER JOIN friday_release AS f\n        ON t.ticker = f.ticker AND t.week_start = f.week_start\nGROUP BY t.ticker\nORDER BY median_abs_move_pct DESC","computed_at":"2026-08-04T14:59:58.653777+00:00","elapsed":0.00579158}