COT data can help describe the positioning environment in which a strategy trades. It cannot tell you what every participant intended, and it must not be attached to trades before the report was available. The most important technical choice is therefore the time join. A convincing positioning chart is not useful if it allows a Wednesday trade to see information published later in the week.

A practical analysis asks whether a fixed strategy behaves differently under positioning conditions known before entry. It compares returns, drawdown, trade counts and time exposure rather than treating one attractive bucket as a new trading rule. This article builds that process using hypothetical positions and trade results.

Distinguish the position date from availability

The CFTC generally publishes weekly COT reports on Friday at 3:30 p.m. Eastern Time using positions from the preceding Tuesday. Holiday schedules can alter the release. The observation date describes the positions, while the release timestamp determines when a public-data strategy could first use them. Consult the official schedule rather than assuming a permanent three-calendar-day delay.

Use an actual availability timestamp for each report. Convert from a named timezone such as America/New_York, not a fixed UTC offset, because daylight-saving time changes the offset. If the exact historical publication time is unknown, adopt a documented conservative availability policy. Do not pretend that a date-only archive establishes second-level knowledge.

For a trade entered at time t, select the most recent report whose availability timestamp is no later than t. A Wednesday entry will normally receive the previous week's published report. An entry immediately before Friday's release also receives the older report. An entry after release can use the new value only after any ingestion and processing delay required by the modeled strategy.

Hypothetical eventReport available to the strategyDealer net position
Wednesday 10:00 ET entryPrevious published week−20,000 contracts
Friday 15:29 ET entryPrevious published week−20,000 contracts
Friday 15:31 ET entryNew release, assuming received−35,000 contracts

The new −35,000 value may describe Tuesday positions, but that does not make it available on Tuesday. Joining on the observation date would move information backward through time. This is look-ahead bias, and it can create a filter whose historical results cannot be reproduced by a real-time strategy.

Position date is not publication dateHypothetical −20,000 old / −35,000 new net position. The update is unavailable until the Friday release has been received. Friday labels use New York time. Holiday release schedules can differ. Net position actually available: -20k, -20k, -20k, -20k, -35k, -35k. Backdating the new release · look-ahead: -35k, -35k, -35k, -35k, -35k, -35kPosition date is not publication dateNet position actually availableBackdating the new release · look-ahead-35k-30k-25k-20kTue closeWednesdayThursdayFri 15:29Fri 15:31LaterObservation / publication sequenceDealer net position (contracts)
Hypothetical −20,000 old / −35,000 new net position. The update is unavailable until the Friday release has been received. Friday labels use New York time. Holiday release schedules can differ.

Select the correct report and contract

Financial futures can be represented in the Traders in Financial Futures report, with categories including Dealer/Intermediary, Asset Manager/Institutional, Leveraged Funds and Other Reportables. The report exists in futures-only and futures-and-options-combined forms. These are different datasets and should not be silently mixed.

Map the traded instrument to the intended CFTC contract market. Similar names, standard and smaller contracts, or related index products do not justify an automatic merge. Preserve the contract identifier and report family with every derived feature. If you intentionally use a related market as a proxy, label and test that relationship.

Trader categories describe business roles rather than a direct buy or sell recommendation. In particular, Dealer/Intermediary is not a measured series of intraday market-maker hedge orders. Aggregated positions cannot establish that dealers caused a particular strategy drawdown. An observed association is a research finding, not a causal explanation.

Define the metric and its units

Long positions, short positions, net positions and share of open interest answer different questions. Net position is long minus short. If a hypothetical category holds 120,000 long contracts and 155,000 short contracts, its net position is −35,000 contracts. That is net short within the selected report definition, not a forecast that price must decline.

If total open interest is 500,000 contracts, the net share is −35,000 / 500,000 = −7%. A raw position level and its percentage of open interest should use different axis units. A growing market can produce larger contract counts without a proportionally larger positioning imbalance.

A weekly change is also distinct from the level. Moving from −20,000 to −35,000 contracts is a change of −15,000 contracts. It represents a more negative net balance. It does not tell you whether longs fell, shorts rose or both. Inspect the component series when that distinction matters to the hypothesis.

Build relative measures using past information only

A percentile can show how unusual the current position is relative to a chosen history. For example, a 10th-percentile reading means the current value is low compared with the reference observations under the declared percentile convention. It does not mean there is a 90% chance of a price reversal.

The reference window must use only observations available at the decision time. Calculating percentiles from the entire future sample leaks later information into earlier classifications. Decide whether the current observation is included and how ties are handled, then use the same definition consistently.

A z-score subtracts a historical mean and divides by a historical standard deviation. It is dimensionless. If the reference mean is −10,000 contracts, standard deviation is 12,500 and the current value is −35,000, the z-score is −2. That indicates distance in reference standard deviations, not a universal probability unless additional distributional assumptions are justified.

Compare the strategy rather than positioning alone

A positioning chart without strategy performance answers only what positioning did. To evaluate relevance, align the strategy's equity and drawdown with the same timeline. Use explicit axes and units. Do not overlay dollar equity, percentage drawdown and contract counts on one unlabeled scale.

For a hypothetical filter, take six chronological net trade results: +$200, −$300, +$100, −$200, +$400 and −$100. Total profit is $100. Suppose the pre-entry positioning condition selects trades one, three and five. Their results sum to $700, while the excluded trades sum to −$600. The original total reconciles as $700 − $600 = $100.

This is a useful attribution example, but it is not evidence that the condition predicts profits. The condition might have been selected after observing these six trades. The sample is tiny. A real study needs enough independent observations, predeclared rules and validation. The arithmetic tells you what was included, not whether the pattern will persist.

Keep filtered equity on a common calendar

When a trade is excluded, its P&L should not appear in the selected-trade curve. The selected curve should remain flat over that interval if no other selected exposure exists. Keep original and filtered curves on the same calendar so differences in trading frequency remain visible.

If curves all start from $100,000, their account levels cannot simply be added. Subtract the starting capital first when reconciling selected and excluded P&L. In the six-trade example, final selected equity is $100,700 and excluded equity is $99,400. Their profit changes, $700 and −$600, add to the original $100 gain.

Drawdown must be recalculated from each filtered path. It is not the average of the original drawdowns on selected trade dates. Filtering changes peaks and troughs. For open-equity analysis, retain the selected positions' marked exposure rather than pretending all P&L occurred at entry.

COT filtering on one common trade calendarThe six-trade example, $100,000 starting equity per curve. Selected +$700 and excluded −$600 reconcile to original +$100 in P&L, not by adding the starting capitals. Flat sections preserve the common calendar. Original: 100k, 100.2k, 99.9k, 100k, 99.8k, 100.2k, 100.1k. Selected: 100k, 100.2k, 100.2k, 100.3k, 100.3k, 100.7k, 100.7k. Excluded: 100k, 100k, 99.7k, 99.7k, 99.5k, 99.5k, 99.4kCOT filtering on one common trade calendarOriginalSelectedExcluded99k99.5k100k100.5k101k0123456Trade numberEquity (USD)
The six-trade example, $100,000 starting equity per curve. Selected +$700 and excluded −$600 reconcile to original +$100 in P&L, not by adding the starting capitals. Flat sections preserve the common calendar.

Distinguish attribution from a strategy replay

Removing completed trades is an attribution exercise. A full strategy with the filter enabled may generate a different sequence because excluded positions free capital, change cooldown state or permit later entries. If the strategy is path-dependent, rerun its code with the rule implemented before claiming executable filtered performance.

Use attribution to find a candidate hypothesis, then freeze its metric, threshold, lag and direction treatment. Replay the strategy under those rules on separate data. Include costs and any additional processing delay. A filter that looks helpful after the fact may fail once its operational consequences are modeled.

Direction labels need care. Dealer long positions refer to a COT category's holdings. Long trades refer to your strategy's direction. They are not the same field. A chart title should identify both, such as strategy long trades grouped by dealer net-position percentile.

Drawdown from the running equity peakThe six-trade example, $100,000 starting equity per curve. Selected +$700 and excluded −$600 reconcile to original +$100 in P&L, not by adding the starting capitals. Flat sections preserve the common calendar. Original: 0, 0, -300, -200, -400, 0, -100. Selected: 0, 0, 0, 0, 0, 0, 0. Excluded: 0, 0, -300, -300, -500, -500, -600Drawdown from the running equity peakOriginalSelectedExcluded-600-400-20000123456Trade numberDrawdown (USD)
The six-trade example, $100,000 starting equity per curve. Selected +$700 and excluded −$600 reconcile to original +$100 in P&L, not by adding the starting capitals. Flat sections preserve the common calendar.

Validate regimes across separate periods

Fit thresholds on development data or use a rolling historical rule defined in advance. Apply the same method to validation and final holdout. Do not recompute each period's quintiles independently and call them the same economic regimes unless the experiment explicitly studies within-period ranks.

If final holdout has already been inspected to choose the threshold, it is no longer a fresh test of that choice. It can still be displayed and compared, but its role in the research process should remain clear. A new report identifier does not restore independence.

Report trade count, session count and exposure duration for every regime. A filter can improve total drawdown simply by trading far less. Compare average trade and returns per relevant unit of exposure as well as total profit, while retaining the uncertainty associated with small or clustered samples.

Review missing information honestly

No report before the beginning of the available archive means no known positioning value. Do not backfill the first observed report into earlier trades. A missing week can justify carrying forward the last actually known value with an age measure, but it should not be interpolated as if the future report had been partially known.

Keep data age separate from position magnitude. A stale report can have the same net position value as a recent report while offering different context. Test whether your rule permits stale observations and define a maximum age if appropriate. That policy must be fixed before judging its performance.

For every chart, retain a small audit sample of entry timestamps and the report assigned to each one. Manually checking entries just before and after several releases often catches timing mistakes faster than reviewing aggregate performance statistics.

A usable research conclusion

The useful result is a statement about a fixed strategy under a precisely defined, pre-entry positioning condition. It includes the sample, the timing policy and how equity and drawdown changed. It does not infer hidden motives from an aggregate category or present a selected historical bucket as a forecast.