ATMResearch
Join Overfit - free
Overfit cover card on dark navy, kicker 'Larry Williams COT': the headline 'Better trades. Worse CAR/MaxDD.' over the line '92.6% of 4,888 filter variants beat baseline avg trade. Zero beat its 0.51 CAR/MaxDD.', with a corner badge reading '@ES.D · 4,889 variants'.
  1. Overfit/
  2. Research/
  3. Does the COT Report Actually Work? 4,889 Backtests on Larry Williams' COT Index

October 22, 2026

Does the COT Report Actually Work? 4,889 Backtests on Larry Williams' COT Index

Share

13 min read

Written by Ali Casey, founder of StatOasis and AlgoChef, creator of the Algo Trading Masterclass (ATM), with over 10 years of experience building systematic trading tools - building algorithmic strategies, testing ideas with data, and teaching traders how to build structured, portfolio-based trading workflows.

Published October 22, 2026 · Method

← Back to Research
Table of contents▾
  • TL;DR
  • Every week, you're handed the "smart money's" hand, and told to copy it
  • How we tested: 4,889 backtests, and why the base strategy is deliberately boring
  • Can we trust these numbers? Two independent engines, 4,889 for 4,889
  • Finding 1: Does the COT filter actually make the strategy better?
  • Finding 2: The featured setup, and why it was chosen after the fact
  • Finding 3: Which trader group actually works: Commercials, Non-Commercials, or Small Speculators?
  • The honest catch: better trades, a smaller account than no filter, and a lower CAR/MaxDD
  • The verdict, and the honest limits
  • What this means for you
  • Get the next study in your inbox
  • Methodology
  • FAQs

The short version

I ran 4,889 backtests of Larry Williams' COT index as a filter on an RSI(2) strategy on the E-mini S&P 500, 2006 to 2025, with every weekly report counted only from the close of the day the CFTC released it. The filter raised the average trade in 92.6% of the 4,888 filter-on variants. Not one of them beat the unfiltered strategy's $238,187.50 net profit or its 0.51 CAR/MaxDD. The best any variant reached was 0.36.

Picking better trades is not the same as earning more for the drawdown you take. On this grid the filter did the first in 92.6% of variants and never beat the baseline's CAR/MaxDD.

Methodology & risk note: Backtested event study of the E-mini S&P 500 (@ES.D, day session) daily data, 2006-2025, 4,889 strategy variants, frictionless. Results are hypothetical and not investment advice. Past patterns don't guarantee future results. Full method and disclaimer below.

TL;DR

  • The filter lifts the average trade in most variants. It never lifts CAR/MaxDD, the return you get for the percentage drawdown you sit through. 92.6% of the 4,888 filter-on variants beat the unfiltered baseline's $586.67 average trade (their median average trade is $796.56). Zero of them beat the baseline's 0.51 CAR/MaxDD. Their median CAR/MaxDD is 0.07.
  • It never makes the account bigger than the unfiltered one either. Zero of the 4,888 beat the baseline's $238,187.50 net profit. Across the 4,888, median net profit is $76,675.00 and median trade count is 95 (two separate medians), against the baseline's 406.
  • The featured setup trails the baseline on percentage drawdown and CAR/MaxDD. Filter on Small Speculators, avoid the 35 to 75 middle of their range, 24-week lookback: 158 trades, $159,212.50 net, a 2.63 profit factor, a 26.74% max drawdown against the baseline's 15.41%, and a CAR/MaxDD of 0.20 against 0.51. It was chosen after the fact, on the full sample, as the cell whose 27-cell neighbourhood has the highest mean CAR/MaxDD (0.199) inside Small Speculators, avoid-the-middle.
  • The "smart money" wasn't the smart pick, and neither was anyone else. A Small Speculators bull extreme was followed by the strongest median 20-day return of the six group and side rows (1.302%), ahead of a Commercials bull extreme (1.081%) and the unconditional day (1.076%). It beat both the unconditional day and a Commercials bull extreme at three of four horizons (5, 10 and 20 days), on 62 observations, and no Small Speculators filter beat the unfiltered baseline's CAR/MaxDD.
  • Verified twice, then timed honestly. An independent Python rebuild matched the original TradeStation grid on all 4,889 variants. The published grid then moves each report to the day it became public.

AvgTrade is the average dollar profit per trade. ProfitFactor is gross profit divided by gross loss. CAR/MaxDD is compound annual return divided by the worst drawdown: how much return you got per unit of pain.

Every week, you're handed the "smart money's" hand, and told to copy it

The US government publishes who is long and who is short S&P 500 futures once a week. The CFTC's Commitments of Traders report, the weekly public positioning file, normally comes out on the Friday of the week its positions are dated. It breaks the futures market into three groups: the commercial hedgers who actually use the underlying, the large speculators (hedge funds and money managers), and the small speculators, meaning the public. Larry Williams built a career reading it, turned it into a 0-to-100 index, and left the trading world one sticky rule: watch the Commercials, because they're the smart money.

That rule gets repeated in every forum and course, and almost nobody tests it. I repeated the follow-the-Commercials line myself for years before I ever put a number on it. So we did, with one rule held fixed from the first bar to the last: a report counts only from the close of its release day, never from the earlier date the data file stamps it with.

Two comfortable beliefs didn't survive contact with 4,889 backtests. The "smart money" Commercials, at a bull extreme, were followed by a median 20-day return of 1.081%, next to the 1.076% of an ordinary day. And the bigger belief, that bolting positioning data onto a strategy makes it a better strategy, failed in every single variant on the measure that pays for a drawdown.

We took the same plain RSI(2) mean-reversion rule at the heart of our RSI deep dive on trading the S&P 500 with mean reversion, bolted the COT index onto it exactly as Williams designed it, and ran 4,889 backtests. The questions were whether the filter earns its keep, and, separately, whether the folklore about which trader group to follow survives the numbers.

It raises the quality of the trades it keeps. It does not earn its keep.

How we tested: 4,889 backtests, and why the base strategy is deliberately boring

Here's exactly what sits behind every number below.

  • Instrument: @ES.D, the E-mini S&P 500 futures contract, day session, daily bars.
  • Window: January 3, 2006 through August 29, 2025 (4,959 daily bars).
  • Base strategy: RSI(2) mean-reversion, long only. Buy the next bar at market when RSI(2) drops below 25 and the account is flat. Exit the next bar at market when RSI(2) climbs above 70. No filter, no discretion: the plainest swing-trade rule there is, so any lift or drag gets pinned on the COT filter and nothing else. It's the same base oscillator we ran through a 33,792-variant shootout in RSI vs Stochastic vs Williams %R. Here it's the fixed control, not the thing under test.
  • The filter: Larry Williams' COT index, computed per trader group (Commercials, Non-Commercials, or Small Speculators) over a lookback window in weeks. The index scores where a group's current net position sits between its own highest and lowest net position over that lookback: 100 means the most bullishly positioned in the window, 0 the most bearishly positioned. Same math as a Stochastic oscillator, applied to positioning instead of price. Three filter modes gate entries: only trade below a lower level (fade the bearish extreme), only trade above an upper level (fade the bullish extreme), or avoid the whole middle band and trade only at either extreme.
  • Report timing: each report counts from the close of its CFTC release day. That is the Friday of the week its positions are dated, or the next business day after a federal holiday in that week, with 35 dated exceptions. 1,026 reports land on a later bar than the date the data file stamps them with.
  • The grid: one unfiltered baseline plus 4,888 filter-on combinations sweeping trader group x lookback (20 to 36 weeks, in 2-week steps) x filter mode x lower level x upper level: 4,889 variants total.
  • Capital and costs: $35,000 starting capital, one ES contract per trade, one position at a time, no compounding, frictionless: no commission or slippage modeled, so the filter is judged on its own merits, not on execution costs.
  • Reliability floor: 50 trades. 40 of the 4,889 variants fall below it, the smallest at 44 trades. They are flagged, not dropped, and none of them is the baseline or the featured variant.

The index value only refreshes on the days a group's net position actually changes, under the frozen interpretation used here. Every other day it holds a "not ready" value and blocks new entries. That's a structural reason the filter looks very different from the baseline in trade count, and it matters for how you read every table that follows.

The COT index, visualized: net position (top), the rolling high and low rails that define the lookback window, and the resulting 0-100 score, each report from its release day. Source: StatOasis backtested study, @ES.D daily data, 2006-2025.

Can we trust these numbers? Two independent engines, 4,889 for 4,889

Before any finding below is worth reading, it has to survive a harder test than "did the backtest run." Every trade count and net profit in the replication grid was produced twice, by two independent engines: one in TradeStation and one in Python, run on the same underlying data and reconciled line by line.

The baseline canary (the simplest possible check, filter off) is where verification starts. Our independent rerun produced 406 trades and $238,187.50 in net profit. The original TradeStation run produced 406 trades and $238,188.00. That's a match within a dollar, on a strategy that ran for more than 19 years.

Then the full grid. 4,889 out of 4,889 variants matched on trade count exactly, and on net profit within a dollar. Not a sample of the grid. Every single row.

That match shows the Python rebuild reproduces TradeStation, on the dates the data file stamps each report with. It does not check the timing, because a stamped date is earlier than the day the report became public. So the published grid takes one more step: every report moves to its release bar, and the numbers in the rest of this page come from that run. The unfiltered baseline reads no COT value at all, so it is identical in both runs.

This matters because a study is only as trustworthy as its rerun, and a rerun is only as trustworthy as its clock. It's the same standard we hold every study to, laid out in full in why most traders fail: the missing piece called robustness testing.

Finding 1: Does the COT filter actually make the strategy better?

Short answer: per trade, usually. On CAR/MaxDD, never. First the per-trade case, because it's the one the sales pages quote.

MeasureBaseline (filter off)Filter-on variants (4,888)
Beat baseline on average trade--92.6% of variants
Median AvgTrade$586.67$796.56
Beat baseline on profit factor--80.9% of variants
Median ProfitFactor1.842.11
Median Trades40695.0
Median NetProfit$238,187.50$76,675.00
Median MaxDDPct15.41%37.19%
Median CAR/MaxDD0.510.07
Beat baseline on CAR/MaxDD--0 of 4,888

92.6% of the 4,888 filter-on variants beat the baseline's $586.67 average trade. The median filter variant makes $796.56 per trade. Profit factor points the same way: 80.9% of filter variants beat the baseline's 1.84, with a median of 2.11.

Now read the bottom four rows. Each is a separate median across the 4,888 filter variants, not the figures of one single variant. The median trade count is 95 against 406, the median net profit $76,675.00 against $238,187.50, and the median max drawdown 37.19% against 15.41%. The median CAR/MaxDD is 0.07 against 0.51. Zero of the 4,888 beat the baseline on that measure. The highest any of them reached was 0.36.

The distribution, not a cherry-pick: 92.6% of the 4,888 filter-on variants beat the baseline's $586.67 average trade, and none beat its 0.51 CAR/MaxDD. Source: StatOasis backtested study, @ES.D daily data, 2006-2025.

The median filter variant does beat one named random control. That control fires as often as the median of the 4,849 variants at or above the 50-trade floor and holds as long as their median, and it averaged a CAR/MaxDD of 0.012 (sd 0.012) over 10 seeds. The median filter variant's 0.07 sits far outside that spread. So on CAR/MaxDD the median filter variant lands above this seeded control and below simply taking every RSI(2) signal.

Finding 2: The featured setup, and why it was chosen after the fact

The featured cell in the grid is filtering on Small Speculators, avoiding the middle of their 0 to 100 range (trading only when the index sits below 35 or above 75), with a 24-week lookback.

MetricBaselineFeatured variant
Trades406158
NetProfit$238,187.50$159,212.50
AvgTrade$586.67$1,007.67
WinPct75.86%74.05%
MaxDDPct15.41%26.74%
ProfitFactor1.842.63
CAR_MaxDD0.510.20

Average trade rises from $586.67 to $1,007.67 and profit factor from 1.84 to 2.63. Net profit, win rate, percentage drawdown and CAR/MaxDD go the other way. Win rate slips from 75.86% to 74.05%. Net profit falls to $159,212.50. Max drawdown deepens from 15.41% to 26.74%, and CAR/MaxDD falls from 0.51 to 0.20.

Fewer trades, less money, a deeper percentage drawdown: the featured variant against the unfiltered baseline. Source: StatOasis backtested study, @ES.D daily data, 2006-2025.

Here is how the cell was picked, and what that pick is worth. It isn't "the best row in the grid." Inside Small Speculators, avoid-the-middle, we averaged CAR/MaxDD across every setting one grid step away in every direction (lookback ±2 weeks, lower level ±5, upper level ±5). This cell had the highest neighbourhood average, 0.199 over 27 cells. 18 single cells in the same 725-variant region score higher than it on their own, and the best of them reaches 0.23.

That search read the whole 2006 to 2025 sample. No years were held back to test the pick on, so the featured cell is chosen after the fact. Read it as the cell whose 27-cell neighbourhood has the highest mean CAR/MaxDD in that 725-variant Small Speculators, avoid-the-middle region, not as a result that has passed an out-of-sample test. A pick made after the fact, from the most flattering neighbourhood in its region, still trails the unfiltered strategy by more than half on CAR/MaxDD. The grid-wide count says the same thing: none of the 4,888 beats 0.51.

The featured cell sits inside the bright band of its region. The best single cell in the region, at 0.23, is still below the unfiltered baseline's 0.51. Source: StatOasis backtested study, @ES.D daily data, 2006-2025.

The wider bucket (Small Speculators, avoid-the-middle mode) holds 725 variants with a median CAR/MaxDD of 0.11. If you take one comparison away from this section, make it 0.20 next to 0.51: the featured cell against the strategy with no filter at all.

Finding 3: Which trader group actually works: Commercials, Non-Commercials, or Small Speculators?

This is where the study breaks from the textbook. Classic COT theory says follow the Commercials: they're the "smart money," so a Commercials bull extreme (positioning at its most bullish in the lookback window) should lead a stronger move than usual. The Small Speculators are supposed to be the opposite: the crowd, wrong at the turns, worth fading rather than following.

We tested that directly. Using the classic Williams extreme levels (75 and above for bull, 25 and below for bear) at the featured 24-week lookback, here's the median forward return, event versus the unconditional baseline, at four horizons:

GroupExtremeEvents1-day median5-day median10-day median20-day median
Commercialsbull590.054%0.092%0.268%1.081%
Commercialsbear870.038%0.471%0.497%0.887%
Non-Commercialsbull660.089%0.205%0.400%1.123%
Non-Commercialsbear770.100%0.268%0.597%1.148%
Small Speculatorsbull63 (n=62)-0.017%0.423%0.781%1.302%
Small Speculatorsbear590.008%0.013%0.459%0.940%
Unconditional (all bars)----0.049%0.281%0.539%1.076%

Read the Commercials bull row first. It sits above the unconditional median at 1 day and 20 days, both narrowly (0.054% vs 0.049%, 1.081% vs 1.076%), and below it at 5 and 10 days (0.092% vs 0.281%, 0.268% vs 0.539%). The "follow the smart money" case doesn't show up here.

Small Speculators bull is the row that leans the other way. It runs above the unconditional median at 5 days (0.423% vs 0.281%), 10 days (0.781% vs 0.539%) and 20 days (1.302% vs 1.076%), and below it at 1 day (-0.017% vs 0.049%). Its 20-day median is the highest of all six rows. Small Speculators bear is the only row that holds one side of the unconditional line at every horizon, and it is the side below. Treat all of this as directionally suggestive at 59 to 87 events a row, not as a standalone signal. One observation in the Small Speculators bull row, dated 2025-08-29, sits on the last bar of the data and has no forward window, which is why that row reads n=62.

Worth knowing before you set an alert for these: extremes are a several-times-a-year event, not a daily one. Across the 2006 to 2025 window, each group hit a bull or bear extreme between 3.0 and 4.4 times per year per side (411 extreme-crossing events in total across all six group and side combinations). Once a group entered an extreme, mean run duration ranged from 3.6 to 5.2 consecutive weekly reports. So a COT extreme is less like a signal firing and more like a regime arriving. It shows up a few times a year and then holds for about a month.

The three groups' COT indexes, with the 63 Small Speculators bull extremes and 59 bear extremes marked on price. Source: StatOasis backtested study, @ES.D, 2006-2025.

Now run each group through the RSI(2) filter in the "avoid the middle" mode, the same mode that produced the featured variant.

GroupVariantsMedian TradesMedian NetProfitMedian AvgTradeMedian ProfitFactorMedian MaxDDPctMedian CAR/MaxDD
Commercials716124.0$95,962.50$771.882.0343.70%0.07
Non-Commercials704126.0$94,556.25$759.632.0633.81%0.10
Small Speculators725138.0$118,862.50$863.412.2534.96%0.11

Small Speculators have the highest median net profit, average trade, profit factor and CAR/MaxDD of the three groups. Non-Commercials have the shallowest median drawdown, 33.81% against 34.96%. Commercials, the group the textbook says to follow, have the lowest median profit factor and CAR/MaxDD and the deepest median drawdown, 43.70%. And the leader's 0.11 median CAR/MaxDD is still less than a quarter of the unfiltered baseline's 0.51. Winning the group contest does not mean beating no filter at all.

Across the whole grid, the single best CAR/MaxDD belongs to neither Small Speculators nor Commercials. It is a Non-Commercials cell in the same mode, at 0.36, on 191 trades with a 13.57% max drawdown. Selectivity is no quality guarantee either. Commercials fade-the-low-extreme trades a median of 77.5 times, the second-fewest of the nine group and mode buckets, and carries the lowest median average trade ($707.24) and profit factor (1.90) and the deepest median drawdown (51.04%) of all nine.

The Small Speculators and the Commercials also move in opposite directions almost by construction: their COT-index values carry a -0.4647 correlation over 1,016 comparable bars, since COT positioning is largely a zero-sum ledger across groups. When one group leans bullish, another tends to lean bearish, which is part of why "which group do you filter on" changes the answer this much.

None of this is causal proof that small traders are secretly smart. It's a pattern in one 20-year ES dataset that leans against the "just do what the big money does" instinct. That is the same instinct behind the 40-in, 20-out hedge fund trend strategy, a rule tested there as mechanical entries and exits, not as a bet on the institutions.

The honest catch: better trades, a smaller account than no filter, and a lower CAR/MaxDD

Here's the part we're not going to spin away, because a study that buries its own catch isn't worth the pixels.

The filter lifts the average trade in most variants. It does not make the strategy richer than the unfiltered one, and it does not lift its CAR/MaxDD. Of the 4,888 filter-on variants tested, exactly zero beat the baseline's total net profit of $238,187.50, and exactly zero beat its 0.51 CAR/MaxDD. Not the featured variant. Not any of the other 4,887. The median filter variant takes 95 trades across more than 19 years, against the baseline's 406.

MeasureBaselineFeatured variant
Trades406158
NetProfit$238,187.50$159,212.50
AvgTrade$586.67$1,007.67
MaxDDPct15.41%26.74%
CAR_MaxDD0.510.20
The baseline sits alone, far right, on trade count. Every filter variant traded fewer times than the baseline, and none of them beat its total net profit. Source: StatOasis backtested study, @ES.D daily data, 2006-2025.

One fair objection deserves its own paragraph. Drawdown percent is the largest dollar drop divided by the account's peak just before it, and a one-contract account that has grown less shows a bigger percentage on a smaller dollar loss. In dollars, the featured variant's worst drawdown is $31,700.00 against the baseline's $43,875.00, and 96.7% of filter variants have a smaller dollar drawdown than the baseline. Measured as net profit over that dollar drawdown, the featured variant still trails, 5.02 against 5.43. On that measure 165 of the 4,888 variants do beat the baseline, 3.4% of the grid. The percentage view is the house standard and the one CAR/MaxDD uses. The dollar view narrows the gap without closing it for the featured cell.

The trade count falls for a structural reason stated up top: the COT report is a weekly signal, and under the frozen interpretation used here, the index value only updates on the days a group's net position actually changes. Every other day, the gate carries no new information and blocks entry. Stack a slow, weekly-refresh gate onto a fast, 2-to-3-day RSI(2) swing trade, and the gate sits closed most of the time. The featured variant spends 15.37% of bars in a trade against the baseline's 44.59%. Better quality per trade, at the cost of trade count (no variant keeps more than 204 of the baseline's 406 trades), and the quality gain never outruns the lost volume in any of the 4,888 tries.

Larry Williams himself made a version of this point: the index isn't a light switch you flip on and off, and he never traded the level in isolation. His own approach stacks the COT reading with price and other conditions rather than trading it as a standalone trigger. This study only tested the stacked version on one strategy, and on that strategy the stack raised the average trade in 92.6% of variants and lowered CAR/MaxDD in all of them.

The verdict, and the honest limits

Does the COT report work? As a filter that raises the average trade on this RSI(2) long strategy on ES, yes, in 92.6% of 4,888 tested combinations. As a way to make more money than not filtering at all, or a higher CAR/MaxDD, no, not once, on this grid.

The "follow the smart money" folklore doesn't survive contact with the data either. The Commercials bull extreme was followed by a 20-day median barely different from an ordinary day, and within the avoid-the-middle filter mode the Commercials had the lowest median CAR/MaxDD of the three groups. The Small Speculators did best within that mode, and their best was still a fraction of the unfiltered strategy's.

Now the limits, because a study that hides them isn't worth trusting:

  • The featured variant was chosen after the fact. Its selection read the full 2006 to 2025 sample, and no period was held back to test it. It is the cell whose 27-cell neighbourhood has the highest mean CAR/MaxDD inside Small Speculators, avoid-the-middle. It is not an out-of-sample result, and it is not the single optimal setting to run.
  • Frictionless. Every number here is computed with no commission and no slippage. Net profit and average trade are reported before commission and slippage, and no cost model was run to size how much costs would reduce them.
  • Long-only. The base RSI(2) strategy and every COT filter variant were tested on long entries only. Nothing here says anything about the short side.
  • Single market. These results are @ES.D, the E-mini S&P 500 day session, and nothing else. They are not shown to generalize to other futures markets, other instruments, or other strategies.
  • Report timing is a rule plus 35 dated exceptions. 34 of those exceptions are sourced to a CFTC schedule or press release. One, for the 2018-12-04 office closure, is an unverified bound. The largest delay past a release is 1 bar.
  • Weekly data on a fast strategy. The COT report updates once a week, and its index only refreshes on days a group's net position changes. Most days, the gate carries no new information at all.
  • Two drawdown views. The percentage drawdown that CAR/MaxDD uses reads deeper on an account that has grown less. In dollars most filter variants have a smaller worst drawdown, and 165 of 4,888 beat the baseline on net profit over dollar drawdown.
  • Every number is from an independent rerun, verified 4,889 of 4,889 against the original TradeStation study on the data file's own dates, then run on release dates. None of it is sourced from the original export directly.

What this means for you

  1. Judge a filter by what it does to the account, not to the average trade. On the one strategy tested here, an RSI(2) long on ES, stacking Williams' COT index raised the average trade in 92.6% of variants and lowered CAR/MaxDD in all of them. A per-trade number on its own tells you whatever you were hoping to hear.
  2. Check the clock on every data point your backtest reads. A COT report is not public on the date the data file stamps it with. Read from that stamp, the cell the same neighbourhood rule picked scored a CAR/MaxDD of 0.68, better than the baseline's 0.51. Counted from release days, the pick moves to a different cell and scores 0.20.
  3. Question the "follow the smart money" default. In this data the Commercials bull extreme was followed by a 20-day median next to an ordinary day's, and Commercials had the lowest median CAR/MaxDD of the three groups in the avoid-the-middle mode. Test your own assumption about which group matters before you filter on it.
  4. Expect a weekly-refresh gate on a 2-to-3-day swing trade to sit closed most of the time. Under the frozen interpretation used here, the COT index refreshes only on the days a group's net position changes, and the median filtered variant takes 95 trades against the baseline's 406. This study ran one fast base strategy and did not compare it against a slower one.
  5. A neighbourhood pick is still a pick made after the fact. Choosing the cell whose neighbourhood has the highest average CAR/MaxDD protects you from one lucky cell. It does not test whether the whole neighbourhood beats the unfiltered strategy. Here it did not, on net profit or CAR/MaxDD.

Get the next study in your inbox

This is one study in an ongoing series. If you want the next one, the same kind of large-scale, independently-verified, frictionless-but-honest backtest, join The Overfit newsletter at StatOasis.com/Overfit. It's where we publish the data behind the trading ideas everyone argues about.

The COT report does have something to tell you. On this strategy, it said which trades looked better. It never found a CAR/MaxDD better than no filter at all.

Disclaimer

All results above are derived from historical backtesting using daily @ES.D (E-mini S&P 500) price data and do not represent actual trading results. Backtested performance is hypothetical. Past performance of any pattern does not guarantee future results. This page is for educational and informational purposes only and does not constitute investment advice. StatOasis is not a registered investment advisor. Nothing here is a recommendation to buy or sell any security or futures contract. Please consult a licensed financial professional before making any investment decision.

Transparency: StatOasis sells trading-education products. Our research is produced independently and is not altered to favor a sale.

Freshness: The underlying data covers 2006 through August 2025. We re-review this study when the dataset is extended.

StatOasis. ES (E-mini S&P 500) day session, RSI(2) + Williams COT filter, 2006-2025. Backtested, frictionless, long-only, single market. Not financial advice.

Methodology

Data source
@ES.D, the E-mini S&P 500 futures contract, day session, daily bars, plus CFTC Commitment of Traders net positions by trader group (Commercials, Non-Commercials, Small Speculators).
Date range
January 3, 2006 through August 29, 2025 (4,959 daily bars).
Entry / exit rules
Base strategy: RSI(2) mean-reversion, long only. Buy the next bar at market when RSI(2) drops below 25 and the account is flat, exit the next bar at market when RSI(2) climbs above 70. No filter, no discretion, so any lift or drag is pinned on the COT filter alone. Entries are then gated by Larry Williams' COT index, computed per trader group over a lookback in weeks, in three modes: trade only below a lower level, only above an upper level, or only outside a middle band. Grid: one unfiltered baseline plus 4,888 filter-on combinations sweeping trader group x lookback (20-36 weeks in 2-week steps) x filter mode x lower level x upper level.
Sizing
$35,000 starting capital, one ES contract per trade, one position at a time, no compounding. Frictionless: no commission or slippage modeled, so the filter is judged on its own merits rather than on execution costs.
Overlap mode
Flat-only. A new entry can only fire when the account is flat, so trades never overlap.
Look-ahead
Each weekly COT report counts as known only from the close of the day the CFTC released it: the Friday of the week its positions are dated, or the next business day after a federal holiday in that week, with 35 dated exceptions. 1,026 reports sit on a later bar than the data file's own stamp. RSI(2) is evaluated on the close and the order is filled at the next bar's open. Under the frozen COT interpretation, the index value only refreshes on days a group's net position actually changes, and on other days it holds not-ready and blocks entry.
Minimum sample
50 trades. 40 of the 4,889 variants fall below it (the smallest has 44 trades). They are flagged, not dropped. The baseline has 406 trades and the featured variant 158.
Buy-and-hold benchmark
Buy and hold @ES.D over the same 2006-2025 window on the same one-contract sizing: $238,612.50 net, 11.03% CAGR, and a worst drawdown of 98.28% of the account in March 2009 (CAGR over that worst drawdown, 0.112). One contract against $35,000 is leveraged enough that simply holding it nearly wiped the account, which is the context every filtered variant below should be read in.
Random control
Frequency-matched seeded coin flip on the same bars: 88 entries executed of 95 requested and a 4-bar hold, the median of the study's 4,849 variants at or above the 50-trade floor, averaged over 10 seeds from base seed 20260803. $17,632.75 net (sd $18,106.41), a 54.86% worst drawdown, CAGR over that drawdown 0.031 and CAR/MaxDD 0.012 (sd 0.012), 57.82% win rate. Computed by the StatOasis control harness.
Parameter scopeConfiguration held fixed

One configuration was held still on purpose, so the condition under test is the only thing that varies.

The base strategy is held completely still: RSI(2) mean-reversion, long only, buy below 25 and exit above 70, on @ES.D. Only the COT filter varies: trader group, lookback of 20-36 weeks, filter mode and threshold levels, 4,888 filter combinations plus one unfiltered baseline.

Why it was held fixed
The strategy is the instrument and the COT filter is the subject. Sweeping the RSI settings as well would leave any difference unattributable to either variable, which is the one thing this study exists to establish.
What this does not claim
Every finding is conditional on RSI(2) at 25/70 on ES. It makes no claim to survive re-tuning, and no claim about the COT filter on a different base strategy or a different market.

Run to v1 of the StatOasis research standard - the rules every study here has to meet before it is published. The version is the study's own: a standard that gained a rule later never reaches back and claims this one met it.

Historical backtest results are not a guarantee of future returns. This content is for educational purposes only and is not investment advice. Hypothetical performance disclosure (CFTC Rule 4.41).

Frequently asked questions

Does the COT report actually work for trading?⌄

As a filter that raises the average trade on this RSI(2) 25/70 long strategy on ES, 2006 to 2025, mostly yes. 92.6% of the 4,888 filter-on variants beat the unfiltered baseline's $586.67 average trade (median $796.56). As a way to earn more, or to earn a higher CAR/MaxDD, no. Zero of the 4,888 beat the baseline's $238,187.50 net profit, and zero beat its 0.51 CAR/MaxDD. The best any variant reached was 0.36.

What is Larry Williams' COT index and how is it calculated?⌄

It's a 0-to-100 score of how bullish or bearish a trader group's current net futures position is relative to its own recent history, using the same math as a Stochastic, applied to positioning instead of price. Take a group's net position, find its highest and lowest net position over a lookback window (the sweep ran 20 to 36 weeks, with 24 weeks in the featured setup), and score where the latest report sits between that high and low. 100 means the most bullish reading in the window. 0 means the most bearish.

Should you follow the Commercials or the Small Speculators in the COT report?⌄

Neither group rescues the filter in this data. A Small Speculators bull extreme was followed by the strongest median 20-day forward return of the six group and side rows (1.302%, on 62 observations), against 1.081% for a Commercials bull extreme and 1.076% for the unconditional day. It trailed both at the 1-day horizon. Inside the avoid-the-middle filter mode, Small Speculators had the best median CAR/MaxDD of the three groups at 0.11, against 0.10 for Non-Commercials and 0.07 for Commercials. Every one of those is far below the unfiltered baseline's 0.51.

Is the COT report reliable for timing trades?⌄

Not as a standalone entry trigger. The CFTC releases it once a week, and in this study each report counts only from the close of its release day. Under the frozen interpretation used here the index value only refreshes on the days a group's net position actually changes, so most days it carries no new information. That is a structural reason filtered trade counts run so far below the unfiltered baseline (a median of 95 trades versus 406). Treat it as slow context, not a fast trigger.

What COT index level counts as an extreme?⌄

The classic Williams convention used here: 75 and above is a bull extreme, 25 and below is a bear extreme. The featured filtered variant avoids a 35 to 75 middle band, which is a separate, swept parameter from the classic extreme levels used in the forward-return analysis.

Can you backtest the Commitment of Traders report?⌄

Yes, that's what this study is. We ran 4,889 backtested variants (one unfiltered baseline plus 4,888 filter-on combinations) of an RSI(2) mean-reversion strategy on the E-mini S&P 500, 2006 to 2025, gated by the Williams COT index across all three trader groups, every filter mode, and a full sweep of lookback and level settings. The one timing rule that matters is when a report counts as known. Here it is the close of the day the CFTC released it, never the earlier date the data file stamps the report with.

Are Commercials really the "smart money" in the COT report?⌄

Not in this data, on the measures tested. A Commercials bull extreme produced a median 20-day forward return of 1.081%, next to the unconditional 1.076%. It sat above the unconditional median at the 1-day and 20-day horizons, both narrowly, and below it at 5 and 10 days. Inside the avoid-the-middle filter mode, Commercials had the lowest median profit factor (2.03), the lowest median CAR/MaxDD (0.07) and the deepest median drawdown (43.70%) of the three groups. In fade-high mode they led on median average trade ($962.79) and trailed on median CAR/MaxDD (0.06).

How often does a COT extreme actually happen?⌄

A few times a year, and it lingers. In this 2006-2025 ES dataset, at a 24-week lookback, each trader group crossed into a bull or bear extreme (COT index 75 and above, or 25 and below) between 3.0 and 4.4 times per year per side, 411 extreme-crossing events in total. Mean run duration ranged from 3.6 to 5.2 consecutive weekly reports. Treat an extreme as a regime that arrives a few times a year and holds for about a month, not a trigger that fires daily.

What are the limitations of the COT report as a trading filter?⌄

The report updates weekly, so it is a slow signal, poorly suited to fast entries on its own. That showed up here as a sharp cut in trade frequency (median 95 filtered trades versus 406 unfiltered) and a filter that lifted average trade in 92.6% of variants but never total profit or CAR/MaxDD, across 4,888 tested combinations. The test is single-market, long-only and frictionless (no trading costs modeled), and the featured setting was chosen after the fact on the full sample, with no held-out period.

Read the Backtesting & Validation hub
← Back to Research

Table of contents

  • TL;DR
  • Every week, you're handed the "smart money's" hand, and told to copy it
  • How we tested: 4,889 backtests, and why the base strategy is deliberately boring
  • Can we trust these numbers? Two independent engines, 4,889 for 4,889
  • Finding 1: Does the COT filter actually make the strategy better?
  • Finding 2: The featured setup, and why it was chosen after the fact
  • Finding 3: Which trader group actually works: Commercials, Non-Commercials, or Small Speculators?
  • The honest catch: better trades, a smaller account than no filter, and a lower CAR/MaxDD
  • The verdict, and the honest limits
  • What this means for you
  • Get the next study in your inbox
  • Methodology
  • FAQs

Overfit - the newsletter

Skip the hype. Trust the data.One practical takeaway per issue.

Running a quick security check before this can be sent.

Delivered +2 times a month - when the work is ready, not on a calendar.I'll never sell your address.Unsubscribe in one click, any time.

Related Articles

Back to all research
#122

Robustness Testing: Why Most Traders Fail, and What 36,252 Backtests Say Actually Works

Mar 28, 2025 · 18 min read

Robustness testing is the step between a good backtest and deciding whether to trade it. I measured which checks actually predict what a strategy does in held-back history, then retested the whole thing on 53 markets — where the stack still works, several individual checks turn out to have been overstated threefold, and two of them point the wrong way on some asset classes.

Read more→
#142

The Better-RSI Showdown: We Tested 4 RSI Upgrades on SPY, QQQ, IWM, and DIA

Sep 10, 2026 · 10 min read

1,856 backtests across four RSI families on SPY, QQQ, IWM and DIA: Connors RSI and Z-Score RSI modestly beat plain RSI on median risk-adjusted return, Laguerre RSI was the worst of the four despite its lag-free marketing, and the simplified three-condition Triple RSI tested here does not reproduce the popular win-rate claim.

Read more→
#143

RSI vs Stochastic vs Williams %R: 33,792 Backtests

Sep 24, 2026 · 12 min read

33,792 backtests across RSI, Stochastic and Williams %R on four index ETFs: the setup matters more than the indicator. 89.7% of long-side variants made money against 8.8% of short-side, and buying dips beat chasing breakouts 55.7% to 42.9%.

Read more→
#141

I Backtested ICT / Smart Money Concepts — What Survives

Sep 3, 2026 · 10 min read

The four core ICT / Smart Money Concepts entries — order blocks, fair value gaps, liquidity sweeps and Optimal Trade Entry — codified into mechanical rules and run against three textbook entries and a coin flip across four markets. None showed a statistically significant 5- or 10-day forward-return edge on SPY.

Read more→

Overfit - the newsletter

Skip the hype. Trust the data.

One practical, evidence-driven takeaway per issue - strategy testing, portfolio construction, market structure, trading psychology, tactical asset allocation.

Running a quick security check before this can be sent.

Delivered +2 times a month - when the work is ready, not on a calendar.I'll never sell your address.Unsubscribe in one click, any time.

StatOasis is calm, evidence-based algorithmic-trading education, founded by Ali Casey. Ali builds systematic trading strategies and teaches the workflow behind them: research, build, test, combine, deploy. He writes the Overfit newsletter, published since 2024, and runs the Algo Trading Masterclass.

Socials

  • X ↗
  • YouTube ↗
  • Instagram ↗
  • LinkedIn ↗
  • GitHub ↗
  • Muck Rack ↗
  • LinkedIn SO ↗
  • GitHub SO ↗

Products

  • Overfit - the newsletter
  • Algo Trading Masterclass
  • StatOasis Community
  • 36 Ways to Buy the Dip
  • AlgoChef ↗

Reading & tools

  • Research
  • Methodology
  • Survive the Decade
  • Wall of Love

StatOasis

  • About Ali Casey
  • Contact
© 2026 StatOasis. Calm, evidence-based.
PrivacyTermsHypothetical resultsCalifornia