← Ground Truth report library

Fading the crowd with the COT report: the full test of Jason Shapiro's free-video rule

Episode A09 · report format v2 · lab runs 2026-06-19, 2026-09-24, 2026-09-26 and 2026-09-27 · both plans written before their runs (the plans’ own text and file timestamps, not a commit)
VERDICT — The version anyone can build from his free videos showed no positioning edge

We wrote two plans on 2026-06-19 and tested each half of his rule on its own. The crowding signal, in five futures markets taken one at a time, over the four weeks after a crowded week: prices rose +0.23% on average after the big speculators were crowded short and +0.62% after they were crowded long, a gap of -0.39 points (95% interval -0.83 to +0.07). With the stretch of crude oil where our data switched contracts taken out, both came to +0.45% and the gap rounds to zero (-0.00, interval -0.41 to +0.42). The plan’s first bar needed that gap above zero with its interval clear of zero. It missed both ways, and the plan’s word for that outcome is fail. The reversal-day trigger, tested without the crowding check, on jobs-report days: 52 signals in 21 years, an average of +0.868 per dollar of risk over the next month, with a 95% interval from -0.691 to +2.431, which includes zero. In plain percent, in a check we ran afterwards, the trigger without the crowding check sat at the 36.2nd percentile of random days. Its own plan said in advance that a fail there would not count against his method. We first recorded this wrongly. In June our code added the two sides where the plan said subtract, and for three months our notes said the crowding signal had a small tilt his way. We found the error on 2026-09-24 and the correction was ruled the same day (§1). The ceiling: this is a verdict on the version we could build, five markets one at a time. It is not a verdict on Jason Shapiro, and not on the design he describes trading, the most crowded few of the thirty-seven markets he watches.

What we granted, and what we actually tested

Granted, not measured: Jason Shapiro is a long-tenured, respected practitioner: Jack Schwager profiled him as the contrarian in Unknown Market Wizards (2020). By his own account he has traded futures for more than thirty years and has used this report as his main data set for more than twenty (§6). He publishes his method free on his channel, Crowded Market Report. His own doctrine is more cautious than the internet’s version of it: he says “nobody sees the future”, that the report “sets you up in good risk reward trades that's it”, and he encourages people not to copy his trades. His record claim, no down year in twenty years, is his claim; we cannot check it, and nothing here needs it to be false.

Tested: The crowding half. Each week of the positioning data, January 2000 to June 2026, the large speculators’ net position in five futures markets (the S&P 500 E-mini, gold, WTI crude oil, the 10-year Treasury note and the euro), ranked against up to 156 weeks of that market’s own positions, ending with that week (fewer in each market’s first three years: the ranking starts once 20 weeks exist). The bottom 10% counted as crowded short and the top 10% as crowded long. After a crowded-short week the test bought at the first closing price on or after the positioning date plus three days, which our engine took to be the Friday the report came out: a Friday close for 1,954 of the 2,072 crowded weeks, and the next close after a Friday with no price for 72; for 15 crowded weeks whose positioning date was a Monday, the Thursday close, the day before that week’s Friday; for 20 crowded weeks reported before a market’s daily prices begin, the first price there is; and for 11 others a Monday, Tuesday or Wednesday close, up to 11 days after that date (§3). After a crowded-long week it bet on a fall. The result is the price change over the next four weeks, the plan’s primary hold, for each market on its own and for the five pooled. The trigger half, without the crowding check. On the first Friday of each month (our rule for the jobs report), a day whose low went below the previous day’s closing price and which then closed above both that price and its own opening price. Entry at that day’s closing price; the result over the next 21 trading days, counted in units of the distance from the entry down to that day’s low. No stop was executed; that low is the ruler. Both halves together. A crowded-short week in the S&P plus a reversal day, which the plan registered as its own check.

What this report does NOT claim: anything about Jason Shapiro’s own trading, record or character; the design he describes trading, the most crowded few of the thirty-seven markets he watches at any time; news other than the monthly jobs report, the only release our trigger used; his exits and his stops; his use of the report to judge the odds and the risk-reward, including whether a crowded reading helps on the risk side, on which we measured nothing; anything he sells; any market other than these five; and anything about returns after dividends or inflation: every figure is a price change in nominal terms, before costs except where a bar names its cost allowance.

§1 · The two plans, written before the runs

Both plans are dated 2026-06-19, and each states that it was locked before the first run. They lived in a private working folder with no version control, so what backs that word is the plans’ own text and the files’ timestamps, not a commit. The last-write times (UTC) are consistent with the order the plans claim: the trigger plan at 18:42:34, its engine at 18:45:03 and its result at 18:46:35; the crowd plan at 19:24:05, written after the trigger result was in (the plan says so itself), then the crowd test’s first run, which wrote its positioning file at 19:26:20. A last-write time is not proof of order. The crowd test’s engine was last written at 19:31:36, after its first run, so it was edited at least once after running, and what changed cannot be recovered. On 2026-09-24 the eight June files were copied, byte for byte, into our research repository, and every later step below is dated there. Those commit times are our own attestation of the timeline, not a public record a reader can inspect.

The falsifiable question

Two, one per half, each with its bars written first. The crowd: over the next four weeks, do prices rise more after the big speculators are crowded short than after they are crowded long, with the gap’s interval clear of zero and the result beating random weeks? The trigger, without the crowding check: over the next 21 trading days, does a jobs-report reversal day drift up with its interval clear of zero, and beat random days?

Our stated prior: one line, in the trigger plan

The trigger plan’s section on a possible second phase says in passing that a fail was “likely for the standalone trigger” (line 143), meaning the trigger tested without the crowding check; the plan was last written before its run. The crowd plan states no expected outcome. The trigger plan also says in advance how each outcome is to be read; the crowd plan says a fail closes the test of the version anyone can build from his free material.

The design as locked

ParameterLocked value
Trigger: dataSPY daily prices, 2005 to 2026, from the free yfinance library
Trigger: the news daythe jobs report, taken as the first Friday of each month; the inflation report and the Federal Reserve decision named and deferred
Trigger: the signal (V1)on the news day, the low below the previous close, then the close above the previous close and above the open
Trigger: the bandV1, V2 (V1 with the close in the top third of the day’s range) and V3 (V1 with a gap down at the open), side by side; a short mirror as a secondary arm
Trigger: entry, ruler, horizonsentry at the signal day’s close; stop at that day’s low, the unit of risk; results at 1, 3, 5, 10, 21, 42 and 63 trading days, 21 primary
Trigger: controlsrandom news days (at least 2,000 draws, seed 20260619), random days of any kind, and every news day
Trigger: barsF1 drift, F2 above the 90th percentile of both random controls, F3 positive after costs on a 42-day time stop or the stop; PASS, WEAK and FAIL as quoted below
Crowd: datathe CFTC’s legacy futures-only weekly report, 2000 to 2026, the non-commercial (large speculator) net position; prices for the S&P 500 index, gold, crude oil, the 10-year note and the euro from yfinance
Crowd: the signalthe net position’s percentile over the previous 156 weeks (band 52, 156, 260); crowded short at or below the 10th (band 5, 10, 20), crowded long at or above the 90th
Crowd: entry and horizonsthe closing price of the report’s Friday; price change at 1, 2, 4, 8, 13 and 26 weeks, in percent, 4 primary; an exit when the index returns to 0.40–0.60
Crowd: controlsrandom weeks in the same market, buy-and-hold, and the crowded weeks shuffled in time, seed 20260619
Crowd: barsF1 asymmetry, F2 above the 90th percentile of random weeks, F3 positive after costs on the exit; pooled and per market; PASS, WEAK and FAIL as quoted below
Both halves togethercrowded short in the S&P plus a trigger day, its count and its difference from the crowd alone

Added, or first run, after the plans

Everything in this table came after the June runs. Three rows were asked for in the plans but not run, or not reported, in June: the other five registered holds, the short mirror’s controls, and the average without its best trade for the trigger tested without the crowding check. The rest were added afterwards.

ItemWhat it isWhen and status
The corrected statisticthe June crowd engine stored the trades after crowded-long weeks with their sign flipped and then subtracted them, so it measured the two sides added together; the corrected engine computes the plan’s own gap (after crowded short minus after crowded long), scores it against the random weeks the plan names, and keeps every other definitionfound and ruled 2026-09-24; corrected run 18:11 UTC; the June engine and result file are kept unchanged beside it
Crude splice taken outevery crowd result is also shown without crude oil’s weeks after its data switched contractsadded 2026-09-24, after the first result; reported beside the as-run figure, never instead of it
The trigger in plain percentthe trigger, without the crowding check, compared with random days in percent instead of the plan’s unit of risk, which runs wider on a reversal dayrun 2026-09-24, after the fact; not in the plan
The trigger without its best tradethe plan’s second concentration check for the trigger tested without the crowding check, the average without its single best trade: the engine computes and prints it, but the June write-up never reported it (§3)printed by the lab’s 2026-09-24 re-run of the unchanged engine; reported on this page for the first time
The other five registered holds1, 2, 8, 13 and 26 weeks: in the lock beside the primary four weeks, first run with the corrected engine, only the hold changedrun on 2026-09-24 at 21:18 UTC, after the four-week result and the correction were known
The jobs-report calendar checkthe first-Friday rule compared with the actual release dates in the Bureau of Labor Statistics archive; counts onlyrun 2026-09-24 at 21:20 UTC
The trigger on the real release datesthe trigger, without the crowding check, re-run with the actual release dates in place of the first-Friday rulean extra run outside the written plan: its own plan was committed at 21:32:15 UTC and the run started at 21:35:21 UTC on 2026-09-24; it cannot change the registered result
The settle-time checkwhat time of day each market’s daily closing price is fixed, against the report’s 3:30 pm New York release, found by matching it against the same vendor’s five-minute prices for about the last 59 daysrun 2026-09-24
Controls for the short mirrorrandom news-day controls for the short mirror, using the lab’s own functions: the plan asked for the same diagnostics for it as for the main arm, and the June engine printed nonein the plan; run late, appended 2026-09-24
Controls for V3random news-day controls for V3, one of the plan’s two variants, using the lab’s own functions; the June engine printed none for itappended 2026-09-24
A blind reviewa separate AI reviewer given the crowd plan, the June engine, the June result and the positioning data, with no correction attached2026-09-24, before the correction was relied on

Promised in the plans and not delivered as written

HalfItem
Triggerreturns were to use prices adjusted for splits and dividends, with raw prices only for the day’s pattern; the engine used unadjusted prices throughout, so the trigger’s returns leave out SPY’s dividends (read by us from the engine on 2026-09-26)
Triggerthe plan’s plausibility guard asked for a sane trade count before any verdict was trusted (about 5 to 15 signals a year, about 3 to 5 once only the jobs report was used); tested without the crowding check, the trigger fired about 2.4 times a year, and neither the lab nor this page judged whether that count passes the guard. The same guard asked that no single event drive the result, and that was never judged either (the average without the best trade is in §3)
Triggerthe calendar was to be frozen as a file before any signal; the engine derived it in memory on each run instead
Triggerthe plan named pooling its three variants with the same reversal pattern on every trading day as the way to soften its small number of signals; no pooled figure was computed, and each was reported separately in the lab’s output
Triggerrobustness arms on the S&P futures and the cash index, and entry at the next day’s open: not run
Triggerthe third bar’s exit (a 42-day time stop or the stop) was never simulated; for the trigger tested without the crowding check, the lab’s own third-bar pass is the 21-day mean minus costs, so the third bar was not run as written. Those costs were set trade by trade: a round trip of one cent a side in SPY, commission taken as zero, divided by each trade’s own risk and then averaged, where the plan divided the round trip by the median risk
Crowdthe exit when crowding returns to neutral was never built, so the third bar exists only as its cost part; that cost was a flat 0.05% per round trip written into the engine and never printed by any run, where the plan asked for it to be computed and reported, not assumed
Crowdthe June engine scored the second bar’s gap against the shuffled weeks rather than the random weeks the plan names, and averaged five per-market percentiles; the corrected engine scores both, as the ledger shows
Crowdthe plan set its bars for each market as well as pooled; the lab scored them pooled only, and each market’s figures are published here (§3 and the ledger) without a market-by-market verdict
Crowdthe plan’s guards (without the top market, without the top episode, two halves of the period, a check that the positioning series is not broken) were not computed; that last check is the one that would have caught the two flaws in the positioning data (§3). Its check that the number of crowded readings in each market is sane (about a handful a year) was never judged either
Crowdbuy-and-hold was computed and never tabled
Crowdboth halves together: the plan asked for the count and its difference from the crowd alone; the lab counted the signals (3) and averaged each crowding bucket’s 21-day result in units of risk, against trigger days with no crowding, and never computed the difference from the crowd alone
Crowdthe plan said a market with no clean price series is dropped and logged, and that each week is entered at the closing price of the report’s Friday; Yahoo’s daily prices for gold, crude oil, the 10-year note and the euro begin in late August and September 2000, months after the positioning data, and the engine neither dropped nor logged that: it entered the 20 crowded weeks before a market’s first price at that first price (§3). Of the other 2,052 crowded weeks, 1,954 were entered at a Friday close and 72 at the next close after a Friday with no price; 15 whose positioning date was a Monday were entered at the Thursday close, the day before that week’s Friday, and 11 more at a Monday, Tuesday or Wednesday close, up to 11 days after the positioning date plus three days, two of them across a gap in the prices (the 10-year note’s 12 days in 2008, the S&P’s 7 in 2001; §3). The plan’s ranking window was 156 weeks; the engine starts ranking once a market has 20 weeks, so 243 crowded weeks, all in the markets’ first three years, were ranked against fewer than 156 (§3)

Deliberately not tested, named in the plans

  1. The crowding check inside the trigger test: the trigger was tested without it on purpose. Named in advance: trigger plan lines 13–16.
  2. The inflation report and the Federal Reserve decision as news days: deferred because we had no free, exact history of their dates. Named in advance: trigger plan lines 37–42.
  3. His discretionary veto, a reading of which setups to skip: designed as a second phase and never signed off. Named in advance: trigger plan line 121; crowd plan line 20.
Each ending had its reading written before the run: a pass would move the work on (for the trigger, to his combined setup; for the crowd, to a build decision); a weak result would read as the market’s own drift; a fail of the trigger would point the test at the crowding check, and a fail of the crowd would close the test of this version. Both endings were disarmed on paper before the run.

The bars each plan set

#Pre-registered goalpostMeasuredPass
Trigger F1, without the crowding checkAt 21 trading days, the average above zero with its 95% interval clear of zero+0.868 per dollar of risk, interval -0.691 to +2.431MISSED
Trigger F2, without the crowding checkAbove the 90th percentile of random news days and of random days of any kind54th percentile of random jobs-report days; the any-day half is measured in a unit that runs wider on a reversal day, so §4 replaces it with a check in percent (36.2nd)MISSED
Trigger F3, without the crowding checkPositive after costs, on a 42-day time stop or the stopthat exit was never simulatedNOT RUN AS WRITTEN
Crowd F1Pooled: after crowded short above zero and above after crowded long, the gap’s 95% interval clear of zeroas run: +0.23% and +0.62%, gap -0.39 (-0.83 to +0.07); crude splice out: +0.45% and +0.45%, gap -0.00 (-0.41 to +0.42)MISSED both ways
Crowd F2After crowded short above the 90th percentile of random weeks, and the gap above the 90th percentile of random-week gapsas run: 7th and 8th; crude splice out: 45th and 69thMISSED both ways
Crowd F3Positive after costs, on the exit at neutral crowdingthat exit was never built; only the cost part existsNOT RUN AS WRITTEN

Both first bars missed, so each plan’s own word for its result is fail: for the trigger (tested without the crowding check), a fail its plan said could not count against his method; for the crowd, a fail as run and with the crude splice taken out. Neither third bar was run as written. On 2026-09-24 the channel ruled the crowd’s result corrected from weak to fail. What each plan says, in its own lines:

The plans’ own lines, word for word (markdown emphasis removed; three edits marked in brackets). In the plans, Test A is the trigger tested without the crowding check, which they call the COT gate, and Test B is the crowd. The trigger plan, lines 18–20 and 95–103:The crowd plan, lines 23–25 and 64–73:

Corrections to this lab, in order

  1. 2026-06-19, the first write-up. The crowd test was recorded as weak, with a small tilt his way clear of zero that could not beat random weeks. The trigger’s comparison with random days of any kind was made in a unit of risk that runs wider on a reversal day, that comparison is not printed here (§4).
  2. 2026-09-24, moving the lab into our research repository. Reading the code against the plan, and the data it read, found that the crowd engine added the two sides where the plan said subtract, that the 10-year note’s positioning data stops in February 2022, and that crude oil’s series switches contracts at the same point.
  3. 2026-09-24, the correction. A blind reviewer reached the same four points unprompted; the channel then ruled the crowd’s result a fail, and the corrected engine ran at 18:11 UTC, a few minutes after the ruling. The June engine and result file are kept unchanged. A settle-time check then confirmed the early-price flaw the reviewer had raised (§3).
  4. 2026-09-24, the later runs. The other five registered holds (21:18 UTC), the calendar check (21:20 UTC) and the trigger on the real release dates, still without the crowding check, its plan committed first (21:32 UTC, run 21:35 UTC). None changed a registered result.

§2 · The headline arithmetic

FigureValueWhat it means
After crowded-short weeks, next 4 weeks, pooled+0.23% as run · +0.45% crude splice outPrices rose on average after the big speculators were crowded short.
After crowded-long weeks, next 4 weeks, pooled+0.62% as run · +0.45% crude splice outThey rose as much or more after the crowd was crowded long.
The gap the bet needed above zero-0.39 points (-0.83 to +0.07) · -0.00 (-0.41 to +0.42)Wrong sign as run; zero with the splice out. The first bar missed both ways.
Crowded weeks886 crowded short in 180 streaks, 1,186 crowded long in 212 streaks, as runStreaks average about five weeks, so the intervals, which treat each week as independent, are too narrow (§3).
The gap against random weeks8th percentile as run · 69th crude splice out; the bar was the 90thMore than nine in ten sets of random weeks did better, as run.
Markets leaning his way2 of 5 as run (S&P +1.02, 10-year note +0.39); 3 of 5 with the splice out (crude +0.94)Gold -0.62 and the euro -1.35 leaned the other way; crude -1.43 as run. Split, not faint; no single market is a finding.
The nine pre-declared settingsgap above zero in 1 of 9 as run and 1 of 9 with the splice outNot a quirk of one setting.
The other five registered holdsfirst bar missed in 10 of 10 hold-and-variant cellsRun after the four-week result; §3 shows each.
The trigger, without the crowding check52 signals, +0.868 per dollar of risk over 21 trading days (-0.691 to +2.431)The interval includes zero: the first bar missed.
The trigger, without the crowding check, against random jobs-report days54th percentileMeasured with the same ruler: an ordinary jobs-report day.
The trigger, without the crowding check, in plain percent (a check run afterwards)+0.51% against +0.74% for a random day (36.2nd percentile) and +0.57% for a random jobs-report day (45.8th)Behind most random days. Not in the plan.
Where the trigger’s total came from, without the crowding check70% from one year, 2016; without 2016 the average is +0.287 per dollar of riskOne year carried most of it (§3).
Both halves togetherfired 3 times in 21 yearsThree is not a result in either direction; we print the count only. The difference from the crowd alone that the plan asked for was never computed (§1).

§3 · Was it the path? The stress tests

Several things could make this result an artifact of how we ran it. We checked what we could and name what we could not. Every interval on this page for the crowd treats each crowded week as independent, but crowded weeks come in streaks whose forward windows overlap, so those intervals are too narrow; that makes passing easier, not harder. The trigger, tested without the crowding check, fires at most once a month, and the lab did not measure whether its intervals are too narrow.

Edge or weather: the trigger’s one year, without the crowding check

Tested without the crowding check, the trigger’s 52 signals added up to +45.1 units of risk, and +31.6 of that came from 2016 alone, 70%. Without its best year, the trigger without the crowding check averages +0.287 per dollar of risk (47 signals) instead of +0.868. The plan asked for a second concentration check, the average without the single best trade: the engine prints it, the June write-up left it out, and the lab’s 2026-09-24 re-run of the unchanged engine prints +0.542 per dollar of risk for the trigger without the crowding check, reported on this page for the first time. Split in two, the trigger without the crowding check averaged -0.138 in 2005–2015 (27 signals) and +1.955 in 2016–2026 (25). Its two registered variants and its short mirror, all tested without the crowding check, are in the trigger table in §7; each one’s interval includes zero.

The other registered holds, run afterwards

The plan listed holds of 1, 2, 4, 8, 13 and 26 weeks with four weeks primary, and at first only four weeks was run. We ran the other five on 2026-09-24, after the four-week result and the correction were known, with the same corrected engine and only the hold changed. The first bar missed in 10 of 10 cells. As run, the pooled gap is below zero at every hold; with the crude splice out it is above zero at four of the five other holds, with every one of those intervals spanning zero. One interval sits clear of zero, the other way from fading the crowd: 13 weeks as run, -0.92 (-1.76 to -0.09). The second bar is met in one cell, 26 weeks with the splice out (98th percentile), where the first bar still misses. At long holds the forward windows of neighbouring weeks overlap even more, so these intervals are narrower still than they should be.

HoldVariantAfter crowded shortAfter crowded longGap95% intervalGap vs random weeksFirst barSecond bar
1 weekas run+0.10%+0.10%-0.01-0.26 to +0.2654thmissedmissed
1 weekcrude splice excluded+0.16%+0.09%+0.06-0.17 to +0.2979thmissedmissed
2 weeksas run+0.11%+0.26%-0.15-0.49 to +0.1826thmissedmissed
2 weekscrude splice excluded+0.21%+0.21%-0.00-0.31 to +0.3162ndmissedmissed
4 weeks (primary)as run+0.23%+0.62%-0.39-0.83 to +0.078thmissedmissed
4 weeks (primary)crude splice excluded+0.45%+0.45%-0.00-0.41 to +0.4269thmissedmissed
8 weeksas run+0.79%+1.28%-0.48-1.10 to +0.1716thmissedmissed
8 weekscrude splice excluded+1.15%+0.92%+0.23-0.36 to +0.8394thmissedmissed
13 weeksas run+1.33%+2.25%-0.92-1.76 to -0.095thmissedmissed
13 weekscrude splice excluded+1.79%+1.67%+0.11-0.65 to +0.9091stmissedmissed
26 weeksas run+2.50%+3.55%-1.06-2.14 to +0.0118thmissedmissed
26 weekscrude splice excluded+3.55%+3.34%+0.21-0.80 to +1.2498thmissedmet

The nine pre-declared settings

The plan fixed three lookbacks and three crowding tails in advance. At four weeks the pooled gap is above zero in 1 of 9 as run (+0.01 points at 156 weeks and a 20% tail) and in 1 of 9 with the splice out (+0.27, the same setting). The other eight are at or below zero in both. These are point estimates with no intervals.

Lookback (weeks)Crowded tailGap as runGap, crude splice out
525%-0.63-0.33
5210%-0.37-0.17
5220%-0.44-0.26
1565%-0.62-0.08
15610%-0.39-0.00
15620%+0.01+0.27
2605%-0.73-0.40
26010%-0.32-0.05
26020%-0.33-0.07

Two flaws in the positioning data

The 10-year note’s positioning series in our saved copy of the report ends on 2022-02-01, so that market covers about 22 years, not 26. Crude oil’s series is the New York WTI contract until 2022-02-01 and then, from 2022-02-08, a WTI contract on a different exchange: our code matched markets by name, the regulator renamed its markets that week, and the second contract was joined onto the first. Ranked against the old contract’s much larger positions, the new one often reads as crowded short: 64 of crude’s 137 crowded-short weeks fall after the switch, 48 of them in the three years when the ranking mixed the two contracts. We report both flaws and repair neither; the crude one we can step around, so every crowd result is shown as run and with crude’s weeks after the switch taken out.

Where the prices begin, and the ranking’s first three years

Yahoo’s daily prices for gold, crude oil, the 10-year note and the euro begin between 2000-08-23 and 2000-09-21, about six and a half to eight and a half months after the positioning data, which starts in January 2000 (February for crude oil); the S&P’s prices start earlier. For the 20 crowded weeks reported before a market’s first price (4 crowded short and 16 crowded long, in gold, the 10-year note and the euro, reported from May to September 2000), our engine used the first price it had as the entry, 6 to 103 days after the report came out, and at the four-week hold 15 of those 20 trades show a change of exactly zero. Two series also have a gap of more than five days: the 10-year note’s prices skip from 2008-06-19 to 2008-07-01, so one crowded week reported in June 2008 was entered 11 days late, and the S&P’s skip from 2001-09-10 to 2001-09-17, which moved one crowded week’s entry to that Monday; at the 1-, 8-, 13- and 26-week holds the same gaps also move one to three exits. The ranking also starts once a market has 20 weeks of positions, so 243 crowded weeks, all in the markets’ first three years (93 crowded short, 150 crowded long), were ranked against fewer than 156 weeks. We report both and repair neither: every crowd figure on this page includes those weeks.

Measured afterwards, on 2026-09-26, on the same frozen inputs: without the 20 early weeks, the pooled four-week figures as run are unchanged at two decimals (+0.23% and +0.62%, a gap of -0.39), and with the crude splice out the second becomes +0.46% instead of +0.45%, the gap still just below zero. No single market’s gap moves by more than 0.28 points at any registered hold, and none changes direction. Ranking only once 156 weeks exist moves the pooled four-week gap to -0.34 as run (95% interval -0.83 to +0.14) and to +0.10 with the crude splice out (-0.33 to +0.53), and no market changes direction at four weeks. At the four-week primary hold the first and second bars still miss, as run and with the splice out, under either change, so the plan’s word is still fail.

Market by market: split, not faint

The S&P and the 10-year note leaned his way; gold and the euro leaned the other way; crude flips with the switch. We read these after the pooled result, from intervals too narrow for weeks that come in streaks, and one market in five is exactly the kind of result a plan exists to stop us picking. No single market here is a finding, in either direction. The S&P is the first market we would test again, on data it has never seen (§8).

MarketCrowded short / long weeksAfter crowded shortAfter crowded longGap as run (95% interval)Gap vs random weeksGap, crude splice out
S&P 500218 / 199+1.30%+0.28%+1.02 (+0.10 to +1.90)100th+1.02 (+0.13 to +1.94)
Gold148 / 277+0.78%+1.40%-0.62 (-1.50 to +0.26)6th-0.62 (-1.55 to +0.24)
Crude oil137 / 269-0.75%+0.69%-1.43 (-3.39 to +0.46)8th+0.94 (-1.56 to +3.62)
10-year note (data to 2022-02-01)208 / 203+0.18%-0.21%+0.39 (+0.12 to +0.66)100th+0.39 (+0.12 to +0.66)
Euro175 / 238-0.74%+0.61%-1.35 (-1.92 to -0.79)0th-1.35 (-1.91 to -0.78)
All five, pooled886 / 1186+0.23%+0.62%-0.39 (-0.83 to +0.07)8th-0.00 (-0.41 to +0.42)

The early-price flaw

The report counts positions as of Tuesday (in our saved copy, 104 of its 6,667 weekly rows carry a Monday, Wednesday or Friday date instead) and comes out on Friday at 3:30 pm New York time. The crowd test entered at the daily closing price dated that Friday as our engine reckons it, the positioning date plus three days, or at the next price after it (for 15 crowded weeks whose positioning date was a Monday, at the Thursday close, the day before that Friday; before a market’s daily prices begin, at the first one there is; see above). For each market we asked at what time of day that closing price is fixed, by matching it against the same day’s five-minute prices over about the last 59 days of the feed. The method recovers the known 4:00 pm close of the S&P cash index. In three of the five markets (gold, crude oil and the 10-year note) the price was fixed before the report was public, and most likely in the euro too, where the method is weakest; only the S&P leg traded after it (one of its 417 crowded weeks is among the 15 entered at a Thursday close).

MarketDaily close matches the price atEvidenceAgainst the 3:30 pm release
S&P 500 (cash index)4:00 pm1.02 bp over 58 sessions30 minutes after: none
Gold1:30 pm1.22 bp over 49 sessions2 hours before
Crude oil2:30 pm5.30 bp over 49 sessions1 hour before
10-year note3:00 pm1.44 bp over 49 sessions30 minutes before
Euromost likely 3:00 pmthe 3 of 10 Fridays on one contract; the method is inconclusive on the restmost likely 30 minutes before

This reads today’s version of the price feed, not what it served for every year back to 2000, and it does not check weeks when the report came out late, or whether the reports behind the 15 Thursday entries were out by that Thursday’s close: none of our files records the positioning report’s release dates. Measured afterwards, on 2026-09-27, on the same frozen inputs: without those 15 weeks the pooled four-week gap is -0.38 as run and +0.00 with the crude splice out, and keeping only the 1,954 weeks entered at a Friday close it is -0.43 and -0.03; no market changes direction at four weeks, and at every registered hold the first bar still misses, as run and with the splice out, so the plan’s word is still fail. We did not measure what the time-of-day head start did to the result. If fading the crowd worked, a head start could only have helped the crowding signal, and the crowding signal still failed.

The jobs-report dates

Our trigger took the jobs report to be the first Friday of each month. Against the Bureau of Labor Statistics archive, 34 of the rule’s 242 dates were not release days, and it missed 49 of the 257 actual releases. As an extra run outside the written plan, with its own plan committed first, we re-ran the trigger without the crowding check on the real release dates: 49 signals, +0.679 per dollar of risk (-0.945 to +2.301). On the real dates, and still without the crowding check, it missed its first bar, as did the two other arms that run’s own plan asked for, V3 and the short mirror; the run also computed V2, which missed its first bar too and is not in the trigger table. The registered result is the first-Friday one, and this run cannot change it.

§4 · The controls

Random jobs-report days (the trigger, tested without the crowding check). The plan compares the trigger with jobs-report days picked at random, measured with the same ruler. Against random sets of 52 drawn from the 227 eligible jobs-report days, whose average was +0.686 per dollar of risk, the trigger without the crowding check landed at the 54th percentile. Its plan also asked for random days of any kind; in its unit of risk that comparison is tilted against the trigger, because a reversal day’s low sits further below its close (the unit is 0.84% of the price on the days the trigger fired without the crowding check, against 0.51% on any day). So we do not print that percentile. The check in plain percent, run afterwards and not in the plan, is in §2: the trigger without the crowding check sat behind most random days.

Random weeks (the crowd). For the second bar the engine picks weeks at random in the same market, as many as the crowded weeks, treats them as crowded, and works out the same gap, 2,000 times. The ledger gives each cell’s percentile against those random gaps, and the after-crowded-short result against random weeks. The bar was the 90th percentile.

Shuffled timing (the crowd). The engine also shuffles which weeks count as crowded, 2,000 times, keeping each market’s own weeks. The ledger gives that percentile too. It is the null that measured our error:

The receipt for the error. With the crowded weeks shuffled, the number the June engine computed, the two sides added together, comes to twice the market’s own drift, within a hundredth of a point in 5 of 5 markets. That is what the June statistic measured when the report carried no information at all. The pooled June figure even sat below its own shuffled value. We print neither June figure.

MarketThe added-up number when the timing is shuffledTwice the market's own 4-week drift
S&P 500+1.20%+1.21%
Gold+1.84%+1.85%
Crude oil+1.84%+1.83%
10-year note+0.20%+0.20%
Euro+0.23%+0.24%

A blind reviewer. Before we relied on the correction, a separate AI reviewer was given the crowd plan, the June engine, the June result and the positioning data, with no conclusion supplied. It reached the same four points on its own: the two sides were added; with no information that sum is twice the drift, not zero; on the plan’s gap the pooled result misses the first bar, so the plan’s word is fail; and the 10-year series is cut short while crude’s is spliced. It also raised the early price, which §3 then checked.

Both halves together. Of the 52 days the trigger fired without the crowding check, 3 fell in a crowded-short week for the S&P, 8 in a crowded-long week and 41 in neither. Three signals in 21 years support no inference, so we print the counts, not the averages the lab computed; the difference from the crowd alone that the plan asked for was never computed.

§5 · The case against our own test

The strongest case against our test, in four points. These are our words, not his, and every one of them is fair. We sort them by what has a run behind it.

  1. Breadth. By his own account he looks at thirty-seven markets and trades only the few showing the most crowded positioning, and at any one time that is a small handful. We ran five markets one at a time and took every crowded week. Our June result file itself calls our design the weaker one. Never run. It is a new test, with its own plan written first, and clean prices for thirty-seven futures markets are a cost we have not worked out.
  2. One kind of news. In the example he likes to give, the bad news was an inflation number; our trigger used only the jobs report, and a date rule that picked the wrong day 34 times in 242. Partly run: only the jobs report was ever run, and no other kind of news was tested. The date rule was checked, and the trigger, re-run without the crowding check on the real jobs-report dates, still missed its first bar. Both halves together fired three times in 21 years, too few to read.
  3. What the report is for. By his own account the report tells you where the odds sit and sets up the risk-reward, and the news is how he picks the turn (§6). Every bar we ran asked about the average price move after a crowded week; none asked about the risk side, such as how deep the losses ran or whether a stop survived. Never run. We have measured nothing on the risk side and cannot tell you he is right or wrong about it.
  4. We traded early. In three of the five markets our entry price was fixed before the report was public, and most likely in a fourth, the euro (§3). Confirmed by a check for three, most likely for the euro; effect not measured. If fading the crowd worked, the head start could only have helped it, and the crowding signal still failed.

Why trust the fix, when we got the first version wrong? Because the fix is checkable without trusting us: the shuffled-timing receipt in §4 shows what the June number measured, a blind reviewer reached the same four points unprompted, the June engine and its result file sit unchanged beside the corrected one, and the ledger below is the file the figures come from.

§6 · Their own terms

His words below are quoted exactly as the caption transcripts of his two videos carry them. We stored both and checked every quoted line against them word for word, spelling included (the captions write the report’s name in lower case). Nothing else on this page is in quote marks as his words; every other line about what he says is our paraphrase, credited to the video it comes from. The video we quote most is unlisted on his channel and appears in his public teaching playlist. We call him he and his, as the episode page of his interview on The AlphaMind Podcast (#72) does.

Video, atHis wordsNote
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 3:37“I wait till these guys get really short then I look for a market to not go down on bad news and I get long”how he describes his trade
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 5:09“nobody sees the future”
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 5:29“it sets you up in good risk reward trades that's it”what the report does, in his words
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 5:45“it's just like counting cards at a casino”the comparison is to trading
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 6:14“I only bet when the odds are in my favor that's all cot does”
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 4:08“I'm a turn picker”
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 12:13“I encourage people to not mimic my trades that's not the best way to go”
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 1:39“I have not had a down year in 20 years”his claim; we cannot check it
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 1:47“that's not because of me it's because of the cot data”
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 1:55“we've tested it we've looked at it there's nothing there”what he says people tell him
Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy at 2:00“if you have no down years in the last 20 years then by all means ignore everything I say about this stuff”his reply
Stop Losses In Trading Do Not Work Most Of The Time, But... at 0:12“you got to use them because it keeps you alive”about stop losses
Stop Losses In Trading Do Not Work Most Of The Time, But... at 0:23“I'm going to guess somewhere around 80% of the time you wish you didn't use them because you get stopped”
Stop Losses In Trading Do Not Work Most Of The Time, But... at 0:42“they save you from completely blowing out”
Stop Losses In Trading Do Not Work Most Of The Time, But... at 1:46“That probably would have blown me out”a crowded market that kept going after his stop
Stop Losses In Trading Do Not Work Most Of The Time, But... at 1:56“there's always a way that things can do something”

Reported, not quoted. By his own account he has traded futures for more than thirty years (The Only Mathematical Way to Beat Wall Street, 0:00), has been a hedge fund manager for more than thirty (I'm 59, I've Been Trading Since 25. Watch this., 0:14), and has used this report as his main data set for more than twenty (Why Trading with COT Data is the Key to Success: The Jason Shapiro Strategy, 1:28). He says he looks at thirty-seven markets as potential trades and trades only the ones showing the most crowded positioning, a small handful at any one time, maybe one, two or three (The Only Mathematical Way to Beat Wall Street, 0:30 to 0:52). The example of a news failure he likes to give is an inflation number in 2022 that came in much higher than expected, a market that went down and then closed up, which he calls his trigger to get long (I'm 59, I've Been Trading Since 25. Watch this., 3:31 to 4:05).

What we did with his words. The trigger is his news failure turned into a rule you can read off a chart; the crowd test is his reading of the report turned into a ranking. Neither is his whole method, and his own framing, that the report sets the odds and the news picks the turn, is the reason §5 counts the risk side as untested.

§7 · The complete ledger — all 72 rows

All 72 crowd cells are below and in the CSV: the four-week primary hold first, then the five other registered holds, each as run and with crude’s spliced weeks taken out, for each market and the five pooled. Percent figures are price changes over the hold, before costs, with no dividends. The trigger rows are a separate download below; the nine settings are the table in §3. Check our arithmetic: the CSV below is the same file the figures above are computed from.
Download the full 72-row ledger (CSV)
#hold_weeksvariantmarketregistrationruncrowded_short_weekscrowded_long_weeksr_s_pctr_l_pctgap_pctci95_low_pctci95_high_pctpctile_gap_vs_random_weekspctile_gap_vs_shuffled_timingpctile_short_leg_vs_random_weeks
14as runS&P 500 (E-mini positions, priced on the cash index)registered primary hold2026-09-24 18:11 UTC, corrected engine218199+1.30+0.28+1.02+0.10+1.901009899
24as runGoldregistered primary hold2026-09-24 18:11 UTC, corrected engine148277+0.78+1.40-0.62-1.50+0.266933
34as runCrude oil (WTI)registered primary hold2026-09-24 18:11 UTC, corrected engine137269-0.75+0.69-1.43-3.39+0.468102
44as run10-year Treasury noteregistered primary hold2026-09-24 18:11 UTC, corrected engine208203+0.18-0.21+0.39+0.12+0.661009980
54as runEuroregistered primary hold2026-09-24 18:11 UTC, corrected engine175238-0.74+0.61-1.35-1.92-0.79000
64as runAll five, pooledregistered primary hold2026-09-24 18:11 UTC, corrected engine8861186+0.23+0.62-0.39-0.83+0.078117
74crude splice excludedS&P 500 (E-mini positions, priced on the cash index)registered primary hold2026-09-24 18:11 UTC, corrected engine218199+1.30+0.28+1.02+0.13+1.94999999
84crude splice excludedGoldregistered primary hold2026-09-24 18:11 UTC, corrected engine148277+0.78+1.40-0.62-1.55+0.2481032
94crude splice excludedCrude oil (WTI)registered primary hold2026-09-24 18:11 UTC, corrected engine73255+0.88-0.06+0.94-1.56+3.62767544
104crude splice excluded10-year Treasury noteregistered primary hold2026-09-24 18:11 UTC, corrected engine208203+0.18-0.21+0.39+0.12+0.661009979
114crude splice excludedEuroregistered primary hold2026-09-24 18:11 UTC, corrected engine175238-0.74+0.61-1.35-1.91-0.78000
124crude splice excludedAll five, pooledregistered primary hold2026-09-24 18:11 UTC, corrected engine8221172+0.45+0.45-0.00-0.41+0.42696845
131as runS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices219199+0.35+0.04+0.31-0.18+0.80929089
141as runGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+0.25+0.30-0.04-0.50+0.42444456
151as runCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices139269-0.01-0.01-0.00-1.19+1.16505128
161as run10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+0.04-0.01+0.05-0.09+0.19777465
171as runEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175238-0.20+0.16-0.36-0.64-0.08000
181as runAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8891186+0.10+0.10-0.01-0.26+0.26545337
191crude splice excludedS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices219199+0.35+0.04+0.31-0.18+0.81929090
201crude splice excludedGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+0.25+0.30-0.04-0.50+0.40414354
211crude splice excludedCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices73255+0.56-0.06+0.63-0.93+2.21808168
221crude splice excluded10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+0.04-0.01+0.05-0.09+0.19797566
231crude splice excludedEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175238-0.20+0.16-0.36-0.63-0.07000
241crude splice excludedAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8231172+0.16+0.09+0.06-0.17+0.29797970
252as runS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices218199+0.60+0.16+0.43-0.21+1.09949292
262as runGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+0.36+0.66-0.30-0.97+0.34161834
272as runCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices139269-0.21+0.11-0.32-1.89+1.25343613
282as run10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+0.06-0.04+0.10-0.09+0.28858259
292as runEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175238-0.38+0.31-0.69-1.09-0.29000
302as runAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8881186+0.11+0.26-0.15-0.49+0.18262814
312crude splice excludedS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices218199+0.60+0.16+0.43-0.21+1.09939193
322crude splice excludedGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+0.36+0.66-0.30-0.98+0.33172035
332crude splice excludedCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices73255+0.63-0.12+0.75-1.28+2.79797856
342crude splice excluded10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+0.06-0.04+0.10-0.09+0.28848357
352crude splice excludedEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175238-0.38+0.31-0.69-1.11-0.27000
362crude splice excludedAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8221172+0.21+0.21-0.00-0.31+0.31626140
378as runS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices218199+2.36+0.05+2.31+1.08+3.55100100100
388as runGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+1.61+2.37-0.77-2.07+0.5391229
398as runCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices133269+0.30+2.59-2.29-5.23+0.546812
408as run10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+0.54-0.56+1.11+0.73+1.49100100100
418as runEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175238-1.18+1.11-2.28-3.09-1.45000
428as runAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8821186+0.79+1.28-0.48-1.10+0.17161721
438crude splice excludedS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices218199+2.36+0.05+2.31+1.01+3.59100100100
448crude splice excludedGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+1.61+2.37-0.77-2.05+0.53101330
458crude splice excludedCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices73255+3.92+1.02+2.90-0.78+6.69929284
468crude splice excluded10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+0.54-0.56+1.11+0.74+1.49100100100
478crude splice excludedEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175238-1.18+1.11-2.28-3.06-1.46000
488crude splice excludedAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8221172+1.15+0.92+0.23-0.36+0.83949385
4913as runS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices218199+2.67+0.12+2.55+1.00+4.1010010095
5013as runGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+2.27+3.90-1.63-3.19-0.01139
5113as runCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices128269+2.57+5.26-2.69-6.61+1.3081036
5213as run10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+0.98-0.77+1.75+1.27+2.23100100100
5313as runEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175238-1.62+1.29-2.90-3.81-1.97000
5413as runAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8771186+1.33+2.25-0.92-1.76-0.095720
5513crude splice excludedS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices218199+2.67+0.12+2.55+1.01+4.1010010096
5613crude splice excludedGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+2.27+3.90-1.63-3.21-0.041210
5713crude splice excludedCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices73255+8.65+2.79+5.87+0.76+11.05999999
5813crude splice excluded10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+0.98-0.77+1.75+1.27+2.22100100100
5913crude splice excludedEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175238-1.62+1.29-2.90-3.84-1.97000
6013crude splice excludedAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8221172+1.79+1.67+0.11-0.65+0.90918984
6126as runS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices218199+4.92+2.12+2.80+0.71+4.871009995
6226as runGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+4.15+7.94-3.78-5.72-1.79001
6326as runCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices127259+2.92+5.07-2.15-7.14+2.74212114
6426as run10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+1.50-1.19+2.69+2.01+3.37100100100
6526as runEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175233-1.05+2.02-3.06-4.38-1.73000
6626as runAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8761171+2.50+3.55-1.06-2.14+0.0118189
6726crude splice excludedS&P 500 (E-mini positions, priced on the cash index)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices218199+4.92+2.12+2.80+0.76+4.8510010095
6826crude splice excludedGoldregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices148277+4.15+7.94-3.78-5.78-1.76001
6926crude splice excludedCrude oil (WTI)registered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices73255+15.13+4.11+11.02+4.92+16.83100100100
7026crude splice excluded10-year Treasury noteregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices208203+1.50-1.19+2.69+2.06+3.34100100100
7126crude splice excludedEuroregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices175233-1.05+2.02-3.06-4.43-1.76000
7226crude splice excludedAll five, pooledregistered hold; run 2026-09-24, after the four-week result and the correction2026-09-24 21:18 UTC, same engine, frozen prices8221167+3.55+3.34+0.21-0.80+1.24989692

The trigger rows, without the crowding check

Each arm of the trigger, tested without the crowding check: all four on the registered first-Friday calendar, and on the real release dates (an extra run outside the plan) the three arms that run’s own plan asked for. That run also computed V2 on the real dates, again without the crowding check; it missed its first bar too and is not tabled. The first row is the registered primary result.

rowcalendararmcrowding_checkregistrationrunsignalsmean_R_21_trading_daysci95_low_Rci95_high_Rpctile_vs_random_jobs_report_dayscontrol_notef1_whole_interval_above_zero
1first Friday of the month (registered)V1 long: low below the prior close, then close above the prior close and the open; the primary arm in the plannone: tested without it on purpose; its plan said in advance that a fail here would not count against his methodregistered2026-09-24 re-run of the registered engine on one frozen SPY snapshot of 5,399 daily bars (the published 2026-06-19 run had 5,398)52+0.868-0.691+2.43154.4the plan's primary controlmissed
2first Friday of the month (registered)V2 long: V1 with the close in the top third of the day, a variant in the plannone: tested without it on purpose; its plan said in advance that a fail here would not count against his methodregistered2026-09-24 re-run of the registered engine on one frozen SPY snapshot of 5,399 daily bars (the published 2026-06-19 run had 5,398)45+0.392-0.975+1.640no random-day control was computed for this armmissed
3first Friday of the month (registered)V3 long: V1 with a gap down at the open, a variant in the plannone: tested without it on purpose; its plan said in advance that a fail here would not count against his methodregistered2026-09-24 re-run of the registered engine on one frozen SPY snapshot of 5,399 daily bars (the published 2026-06-19 run had 5,398)20-0.602-2.404+1.07525.4control appended 2026-09-24 with the lab's own functions; the June engine printed none for this armmissed
4first Friday of the month (registered)V1 short mirror: high above the prior close, close below it and the open; the secondary arm in the plannone: tested without it on purpose; its plan said in advance that a fail here would not count against his methodregistered2026-09-24 re-run of the registered engine on one frozen SPY snapshot of 5,399 daily bars (the published 2026-06-19 run had 5,398)59-1.175-2.643+0.47155.7control run late, appended 2026-09-24 with the lab's own functions: the plan asked for the same diagnostics for the short mirror as for the main arm, and the June engine printed nonemissed
5actual BLS release dates (UNREGISTERED sensitivity, plan committed before the run)V1 long: low below the prior close, then close above the prior close and the open; the primary arm in the plannone: tested without it on purpose; its plan said in advance that a fail here would not count against his methodadded 2026-09-24, not in the plan2026-09-24, the registered engine with only its calendar replaced, on the same frozen SPY snapshot49+0.679-0.945+2.30146.7random draws from the real release dates, same rulermissed
6actual BLS release dates (UNREGISTERED sensitivity, plan committed before the run)V3 long: V1 with a gap down at the open, a variant in the plannone: tested without it on purpose; its plan said in advance that a fail here would not count against his methodadded 2026-09-24, not in the plan2026-09-24, the registered engine with only its calendar replaced, on the same frozen SPY snapshot18-0.874-2.996+1.14922.1control appended 2026-09-24 with the lab's own functions; the June engine printed none for this armmissed
7actual BLS release dates (UNREGISTERED sensitivity, plan committed before the run)V1 short mirror: high above the prior close, close below it and the open; the secondary arm in the plannone: tested without it on purpose; its plan said in advance that a fail here would not count against his methodadded 2026-09-24, not in the plan2026-09-24, the registered engine with only its calendar replaced, on the same frozen SPY snapshot63-1.306-2.721+0.20950.0control appended 2026-09-24 with the lab's own functions; the June engine printed none for this armmissed
Download the trigger rows (CSV) Download the design as locked (JSON)
Column dictionary: the cells CSV
ColumnMeaning
rowRow number, matching the ledger above.
hold_weeksHow many weeks after the report each result is measured; 4 is the plan’s primary hold.
variantAs run on the saved positioning data, or with crude oil’s weeks after its contract switch (2022-02-08) taken out.
marketThe market, or all five pooled.
registrationWhether the hold was the plan’s primary, or a registered hold run afterwards.
runWhich run produced the cell, with its UTC time.
crowded_short_weeksWeeks whose large-speculator position sat in the bottom 10% of up to 156 weeks ending with that week (fewer in a market’s first three years), counted when the hold ends within the price data. Weeks reported before a market’s daily prices begin were entered at its first price: 4 crowded short and 16 crowded long, at every hold (§3).
crowded_long_weeksThe same for the top 10%.
r_s_pctAverage price change, in percent, over the hold after crowded-short weeks.
r_l_pctThe same after crowded-long weeks.
gap_pctr_s_pct minus r_l_pct, in percentage points: the bet needs it above zero.
ci95_low_pctLow end of the 95% bootstrap interval of the gap; it treats weeks as independent, so it is too narrow.
ci95_high_pctHigh end of the same interval.
pctile_gap_vs_random_weeksPercentile of the gap among 2,000 gaps from random weeks in the same markets (the plan’s second bar asks for above the 90th).
pctile_gap_vs_shuffled_timingPercentile of the gap among 2,000 runs with the crowded weeks shuffled in time.
pctile_short_leg_vs_random_weeksPercentile of r_s_pct among 2,000 random-week draws (the other half of the second bar).
Column dictionary: the trigger CSV
ColumnMeaning
rowRow number.
calendarThe registered first-Friday rule, or the actual release dates (an extra run outside the plan).
armThe trigger variant; all are tested without the crowding check.
crowding_checkWhether the crowding (COT) check was applied: on every row it was not. The trigger was tested without it on purpose, and its plan said in advance that a fail here would not count against his method.
registrationRegistered in the plan, or added.
runThe run that produced the row.
signalsTrigger days with a full 63-trading-day window after them and a distance to the low of at least 0.1% of the price.
mean_R_21_trading_daysAverage result over 21 trading days in the direction of the trade, divided by the distance from the entry to the stop: for the long arms, the price change divided by the distance down to the signal day’s low; for the short mirror, the price change with its sign reversed (the short trade’s result), divided by the distance up to the signal day’s high. A negative short-mirror value means the price rose.
ci95_low_RLow end of the 95% bootstrap interval of that average.
ci95_high_RHigh end.
pctile_vs_random_jobs_report_daysPercentile against random draws of jobs-report days, same ruler; blank where none was computed.
control_noteWhere the random-day control comes from.
f1_whole_interval_above_zeroWhether the whole interval sits above zero, the plan’s first bar.

§8 · What would change our mind

  1. His design. Each week, find the most crowded of about thirty-seven markets and trade only those, across the full calendar of news releases, with a fresh plan written before the run. If it comes back positive, this verdict narrows to the one-market-at-a-time version.
  2. The S&P on data it has never seen. It leaned his way (+1.02 points, at the 100th and 98th percentiles of its two nulls) and is the one market whose daily closing price is fixed after the 3:30 pm release (one of its 417 crowded weeks was entered at a Thursday close; §3). But we singled it out after seeing all five, with intervals over 93 streaks of crowded weeks that are too narrow; only a new test on unseen data, planned first, can make it evidence.
  3. Our data, repaired. Re-fetch the renamed positioning series, freeze the prices, enter only at prices fixed after 3:30 pm, and re-run the corrected test unchanged.
  4. Both halves together, with enough signals to read. The full calendar of releases across many markets, so the combined setup fires often enough; that calendar costs money.

§9 · What survives

The report itself survives. It is free, it is real, and every week it shows you where the big speculators stand. His advice on stops was never on trial here, and nothing we found argues with it.

What did not survive, on the version we could build, is the idea that a crowded reading on its own tells you which way to trade next. The check to carry out of here is the one that measured our own number: when someone shows you a chart of trades taken after crowded readings, ask what the same trades would have made on random weeks. When a number beats zero but cannot beat random weeks, believe the random weeks.

§10 · Tools for your own testing

Everything we publish is free — the reports, the result ledgers, all of it. This test ran on free public data; most of our tests need market data we pay for, and that is the one thing that costs us real money.

Positioning: the Commodity Futures Trading Commission’s free weekly Commitments of Traders report, legacy futures-only annual files for 2000 to 2026, the non-commercial long minus short position for each market, saved once on 2026-06-19 (6,667 weekly rows) and never re-fetched. The 10-year note’s series in that copy ends on 2022-02-01 and crude oil’s is spliced across two contracts (§3).

Prices: Yahoo Finance’s free daily data through the yfinance library, the daily closing price as served: the S&P 500 cash index, gold, WTI crude oil, 10-year note and euro futures in their continuous front-month series, and SPY with its daily open, high, low and close for the trigger. For the settle-time check (§3) we also used the same vendor’s five-minute intraday prices for the five markets over about the last 59 days, downloaded through yfinance on 2026-09-24. We do not control this vendor, we did not check how it joins one futures contract month to the next, and prices count the price change alone, with no dividends. The June runs, and the first runs of 2026-09-24 including the corrected four-week run, downloaded prices afresh; the later runs that day (the other holds and the real-date re-run) froze the inputs they used, and our re-check below reads those frozen files.

Release dates: the Bureau of Labor Statistics archive of Employment Situation releases, saved on 2026-09-24. Cash and risk-free rates: none are used. No other market data went into this report. All of the data behind these results came from three sources: the Commodity Futures Trading Commission, Yahoo Finance and the Bureau of Labor Statistics. They do not pay us, have no say in a verdict, and none of them is the link below. EODHD, the affiliate below, supplied none of it and has no say in a verdict.

Checked by us: re-running the lab’s own crowd engine on the frozen inputs at all six registered holds reproduced 768 of 768 of the fields we compared: the ten figures per cell that the ledger carries, for all 72 cells, and each of the 12 blocks’ three bars and verdict. It also reproduced 18 of 18 settings rows, after a planted mismatch was caught first. It did not compare the other figures the logs print, such as the three more on each cell’s row (216 in all; the receipt table in §4 uses ten of them). That is consistency with the recorded runs at their printed precision, not a check on the vendor’s prices. The trigger, tested without the crowding check, was not re-run for this page; the lab’s own re-run of 2026-09-24, with one more day of prices, reproduced every figure of the June trigger write-up that this page prints, and it is the source of the average without the best trade (§3), which June never reported.

Buying market data? Going through here supports Ground Truth (affiliate)
The firewall: going through that link pays us a small commission at no extra cost to you. It is a way to support the channel, not a description of our pipeline — the vendors that produced our numbers are named directly above, and we would rather say so plainly than let a commission blur the two. That is the only money this channel takes. Never from anyone whose claims we test — and never for anything inside a category we review.

Get every report + the 7 Questions one-pager (free)