Tool lesson

COT Report Analysis: Use Percentiles And COT Index As Context, Not Timing

A beginner-safe COT lesson for using percentiles and COT Index as historical context while keeping lookback, category, and no-timing caveats visible.

14 minBeginner7 chapters

Educational only

The examples teach workflow and risk framing. They do not provide trade recommendations, personalized advice, leverage guidance, or guaranteed outcomes.

Chapter 01

Separate raw net position from historical rank

Trader question

Is this position large, or historically stretched?

Raw contracts tell size. Percentile and COT Index tell where that size sits inside a chosen history window. The lesson blocks big-number panic before the history check is visible.

Desk checklist

  • Read the raw net position first.
  • Read the percentile or COT Index second.
  • Do not call a position stretched without naming the window.

Interactive proof

Sentiment tab hero panels, top signal rail percentile values, and category percentile ledger

Use the percentile lab to keep the same raw net number visible while changing its historical rank.

Managed money: Crowding can persist, but catalyst risk rises

Producers: Hedging pressure, not a simple bearish call

Swap dealers: Often risk-transfer context

Other reportables: Secondary conviction layer

Interactive desk lab

COT Percentile And Index Lab

A practical COT normalization lab for comparing raw net position, percentile rank, COT Index, and lookback depth before calling a position extreme.

Native scroll

A practical COT normalization lab for comparing raw net position, percentile rank, COT Index, and lookback depth before calling a position extreme.

44s Remotion sceneCotRawContractsVsRank

Raw number versus rank

A large raw net-position number is held back until it is ranked against a selected history window.

Storyboard beats4 cues
1

A raw net position appears as the tempting headline.

2

A history-window badge enters beside it.

3

The raw number maps into a percentile gauge.

4

The final copy says big is not the same as stretched.

Remotion code

CotRawContractsVsRank

The snippet is stored with the lesson so a future Remotion project can render the chapter video.

Show component snippet
import {AbsoluteFill, Easing, Sequence, interpolate, useCurrentFrame} from "remotion";

export const CotRawContractsVsRank = () => {
  const frame = useCurrentFrame();
  const rank = interpolate(frame, [48, 94], [0, 84], {extrapolateLeft: "clamp", extrapolateRight: "clamp", easing: Easing.bezier(0.16, 1, 0.3, 1)});

  return (
    <AbsoluteFill style={{background: "#071126", color: "#fff8e8", padding: 72}}>
      <h1 style={{fontSize: 54, lineHeight: 1}}>A big raw number still needs ranking.</h1>
      <div style={{marginTop: 52, display: "grid", gridTemplateColumns: "330px 1fr", gap: 22}}>
        <div style={{padding: 24, background: "#f1d59b", color: "#071126"}}>
          <span style={{fontWeight: 900}}>Raw net position</span>
          <strong style={{display: "block", marginTop: 18, fontSize: 64}}>+142k</strong>
        </div>
        <div style={{padding: 24, background: "#fffdf7", color: "#071126"}}>
          <span style={{fontWeight: 900}}>52-week rank</span>
          <div style={{marginTop: 24, height: 24, background: "#eadfcb"}}>
            <div style={{width: rank + "%", height: "100%", background: "#c98718"}} />
          </div>
          <strong style={{display: "block", marginTop: 18, fontSize: 46}}>{Math.round(rank)}th percentile</strong>
        </div>
      </div>
      <Sequence from={108} layout="none">
        <p style={{fontSize: 26, color: "#f1d59b"}}>Large is a size statement. Stretched is a history statement.</p>
      </Sequence>
    </AbsoluteFill>
  );
};

Sources used for this tutorial

Next step

Open the tool with the checklist beside you.

Move from the lesson into the matching Bullion Brains tool, keep the checklist visible, and treat the output as evidence until the caveats are clear.

Open COT Report Analysis