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.
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.
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.
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?
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.
| Parameter | Locked value |
|---|---|
| Trigger: data | SPY daily prices, 2005 to 2026, from the free yfinance library |
| Trigger: the news day | the 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 band | V1, 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, horizons | entry 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: controls | random news days (at least 2,000 draws, seed 20260619), random days of any kind, and every news day |
| Trigger: bars | F1 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: data | the 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 signal | the 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 horizons | the 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: controls | random weeks in the same market, buy-and-hold, and the crowded weeks shuffled in time, seed 20260619 |
| Crowd: bars | F1 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 together | crowded short in the S&P plus a trigger day, its count and its difference from the crowd alone |
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.
| Item | What it is | When and status |
|---|---|---|
| The corrected statistic | the 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 definition | found and ruled 2026-09-24; corrected run 18:11 UTC; the June engine and result file are kept unchanged beside it |
| Crude splice taken out | every crowd result is also shown without crude oil’s weeks after its data switched contracts | added 2026-09-24, after the first result; reported beside the as-run figure, never instead of it |
| The trigger in plain percent | the 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 day | run 2026-09-24, after the fact; not in the plan |
| The trigger without its best trade | the 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 holds | 1, 2, 8, 13 and 26 weeks: in the lock beside the primary four weeks, first run with the corrected engine, only the hold changed | run on 2026-09-24 at 21:18 UTC, after the four-week result and the correction were known |
| The jobs-report calendar check | the first-Friday rule compared with the actual release dates in the Bureau of Labor Statistics archive; counts only | run 2026-09-24 at 21:20 UTC |
| The trigger on the real release dates | the trigger, without the crowding check, re-run with the actual release dates in place of the first-Friday rule | an 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 check | what 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 days | run 2026-09-24 |
| Controls for the short mirror | random 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 none | in the plan; run late, appended 2026-09-24 |
| Controls for V3 | random news-day controls for V3, one of the plan’s two variants, using the lab’s own functions; the June engine printed none for it | appended 2026-09-24 |
| A blind review | a separate AI reviewer given the crowd plan, the June engine, the June result and the positioning data, with no correction attached | 2026-09-24, before the correction was relied on |
| Half | Item |
|---|---|
| Trigger | returns 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) |
| Trigger | the 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) |
| Trigger | the calendar was to be frozen as a file before any signal; the engine derived it in memory on each run instead |
| Trigger | the 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 |
| Trigger | robustness arms on the S&P futures and the cash index, and entry at the next day’s open: not run |
| Trigger | the 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 |
| Crowd | the 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 |
| Crowd | the 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 |
| Crowd | the 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 |
| Crowd | the 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 |
| Crowd | buy-and-hold was computed and never tabled |
| Crowd | both 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 |
| Crowd | the 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) |
| # | Pre-registered goalpost | Measured | Pass |
|---|---|---|---|
| Trigger F1, without the crowding check | At 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.431 | MISSED |
| Trigger F2, without the crowding check | Above the 90th percentile of random news days and of random days of any kind | 54th 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 check | Positive after costs, on a 42-day time stop or the stop | that exit was never simulated | NOT RUN AS WRITTEN |
| Crowd F1 | Pooled: after crowded short above zero and above after crowded long, the gap’s 95% interval clear of zero | as 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 F2 | After crowded short above the 90th percentile of random weeks, and the gap above the 90th percentile of random-week gaps | as run: 7th and 8th; crude splice out: 45th and 69th | MISSED both ways |
| Crowd F3 | Positive after costs, on the exit at neutral crowding | that exit was never built; only the cost part exists | NOT 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:
| Figure | Value | What it means |
|---|---|---|
| After crowded-short weeks, next 4 weeks, pooled | +0.23% as run · +0.45% crude splice out | Prices 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 out | They 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 weeks | 886 crowded short in 180 streaks, 1,186 crowded long in 212 streaks, as run | Streaks average about five weeks, so the intervals, which treat each week as independent, are too narrow (§3). |
| The gap against random weeks | 8th percentile as run · 69th crude splice out; the bar was the 90th | More than nine in ten sets of random weeks did better, as run. |
| Markets leaning his way | 2 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 settings | gap above zero in 1 of 9 as run and 1 of 9 with the splice out | Not a quirk of one setting. |
| The other five registered holds | first bar missed in 10 of 10 hold-and-variant cells | Run after the four-week result; §3 shows each. |
| The trigger, without the crowding check | 52 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 days | 54th percentile | Measured 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 check | 70% from one year, 2016; without 2016 the average is +0.287 per dollar of risk | One year carried most of it (§3). |
| Both halves together | fired 3 times in 21 years | Three 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). |
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.
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 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.
| Hold | Variant | After crowded short | After crowded long | Gap | 95% interval | Gap vs random weeks | First bar | Second bar |
|---|---|---|---|---|---|---|---|---|
| 1 week | as run | +0.10% | +0.10% | -0.01 | -0.26 to +0.26 | 54th | missed | missed |
| 1 week | crude splice excluded | +0.16% | +0.09% | +0.06 | -0.17 to +0.29 | 79th | missed | missed |
| 2 weeks | as run | +0.11% | +0.26% | -0.15 | -0.49 to +0.18 | 26th | missed | missed |
| 2 weeks | crude splice excluded | +0.21% | +0.21% | -0.00 | -0.31 to +0.31 | 62nd | missed | missed |
| 4 weeks (primary) | as run | +0.23% | +0.62% | -0.39 | -0.83 to +0.07 | 8th | missed | missed |
| 4 weeks (primary) | crude splice excluded | +0.45% | +0.45% | -0.00 | -0.41 to +0.42 | 69th | missed | missed |
| 8 weeks | as run | +0.79% | +1.28% | -0.48 | -1.10 to +0.17 | 16th | missed | missed |
| 8 weeks | crude splice excluded | +1.15% | +0.92% | +0.23 | -0.36 to +0.83 | 94th | missed | missed |
| 13 weeks | as run | +1.33% | +2.25% | -0.92 | -1.76 to -0.09 | 5th | missed | missed |
| 13 weeks | crude splice excluded | +1.79% | +1.67% | +0.11 | -0.65 to +0.90 | 91st | missed | missed |
| 26 weeks | as run | +2.50% | +3.55% | -1.06 | -2.14 to +0.01 | 18th | missed | missed |
| 26 weeks | crude splice excluded | +3.55% | +3.34% | +0.21 | -0.80 to +1.24 | 98th | missed | met |
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 tail | Gap as run | Gap, crude splice out |
|---|---|---|---|
| 52 | 5% | -0.63 | -0.33 |
| 52 | 10% | -0.37 | -0.17 |
| 52 | 20% | -0.44 | -0.26 |
| 156 | 5% | -0.62 | -0.08 |
| 156 | 10% | -0.39 | -0.00 |
| 156 | 20% | +0.01 | +0.27 |
| 260 | 5% | -0.73 | -0.40 |
| 260 | 10% | -0.32 | -0.05 |
| 260 | 20% | -0.33 | -0.07 |
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.
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.
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).
| Market | Crowded short / long weeks | After crowded short | After crowded long | Gap as run (95% interval) | Gap vs random weeks | Gap, crude splice out |
|---|---|---|---|---|---|---|
| S&P 500 | 218 / 199 | +1.30% | +0.28% | +1.02 (+0.10 to +1.90) | 100th | +1.02 (+0.13 to +1.94) |
| Gold | 148 / 277 | +0.78% | +1.40% | -0.62 (-1.50 to +0.26) | 6th | -0.62 (-1.55 to +0.24) |
| Crude oil | 137 / 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) |
| Euro | 175 / 238 | -0.74% | +0.61% | -1.35 (-1.92 to -0.79) | 0th | -1.35 (-1.91 to -0.78) |
| All five, pooled | 886 / 1186 | +0.23% | +0.62% | -0.39 (-0.83 to +0.07) | 8th | -0.00 (-0.41 to +0.42) |
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).
| Market | Daily close matches the price at | Evidence | Against the 3:30 pm release |
|---|---|---|---|
| S&P 500 (cash index) | 4:00 pm | 1.02 bp over 58 sessions | 30 minutes after: none |
| Gold | 1:30 pm | 1.22 bp over 49 sessions | 2 hours before |
| Crude oil | 2:30 pm | 5.30 bp over 49 sessions | 1 hour before |
| 10-year note | 3:00 pm | 1.44 bp over 49 sessions | 30 minutes before |
| Euro | most likely 3:00 pm | the 3 of 10 Fridays on one contract; the method is inconclusive on the rest | most 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.
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.
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.
| Market | The added-up number when the timing is shuffled | Twice 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.
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.
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.
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, at | His words | Note |
|---|---|---|
| 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.
| # | hold_weeks | variant | market | registration | run | crowded_short_weeks | crowded_long_weeks | r_s_pct | r_l_pct | gap_pct | ci95_low_pct | ci95_high_pct | pctile_gap_vs_random_weeks | pctile_gap_vs_shuffled_timing | pctile_short_leg_vs_random_weeks |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | 4 | as run | S&P 500 (E-mini positions, priced on the cash index) | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 218 | 199 | +1.30 | +0.28 | +1.02 | +0.10 | +1.90 | 100 | 98 | 99 |
| 2 | 4 | as run | Gold | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 148 | 277 | +0.78 | +1.40 | -0.62 | -1.50 | +0.26 | 6 | 9 | 33 |
| 3 | 4 | as run | Crude oil (WTI) | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 137 | 269 | -0.75 | +0.69 | -1.43 | -3.39 | +0.46 | 8 | 10 | 2 |
| 4 | 4 | as run | 10-year Treasury note | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 208 | 203 | +0.18 | -0.21 | +0.39 | +0.12 | +0.66 | 100 | 99 | 80 |
| 5 | 4 | as run | Euro | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 175 | 238 | -0.74 | +0.61 | -1.35 | -1.92 | -0.79 | 0 | 0 | 0 |
| 6 | 4 | as run | All five, pooled | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 886 | 1186 | +0.23 | +0.62 | -0.39 | -0.83 | +0.07 | 8 | 11 | 7 |
| 7 | 4 | crude splice excluded | S&P 500 (E-mini positions, priced on the cash index) | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 218 | 199 | +1.30 | +0.28 | +1.02 | +0.13 | +1.94 | 99 | 99 | 99 |
| 8 | 4 | crude splice excluded | Gold | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 148 | 277 | +0.78 | +1.40 | -0.62 | -1.55 | +0.24 | 8 | 10 | 32 |
| 9 | 4 | crude splice excluded | Crude oil (WTI) | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 73 | 255 | +0.88 | -0.06 | +0.94 | -1.56 | +3.62 | 76 | 75 | 44 |
| 10 | 4 | crude splice excluded | 10-year Treasury note | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 208 | 203 | +0.18 | -0.21 | +0.39 | +0.12 | +0.66 | 100 | 99 | 79 |
| 11 | 4 | crude splice excluded | Euro | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 175 | 238 | -0.74 | +0.61 | -1.35 | -1.91 | -0.78 | 0 | 0 | 0 |
| 12 | 4 | crude splice excluded | All five, pooled | registered primary hold | 2026-09-24 18:11 UTC, corrected engine | 822 | 1172 | +0.45 | +0.45 | -0.00 | -0.41 | +0.42 | 69 | 68 | 45 |
| 13 | 1 | as run | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 219 | 199 | +0.35 | +0.04 | +0.31 | -0.18 | +0.80 | 92 | 90 | 89 |
| 14 | 1 | as run | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +0.25 | +0.30 | -0.04 | -0.50 | +0.42 | 44 | 44 | 56 |
| 15 | 1 | as run | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 139 | 269 | -0.01 | -0.01 | -0.00 | -1.19 | +1.16 | 50 | 51 | 28 |
| 16 | 1 | as run | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +0.04 | -0.01 | +0.05 | -0.09 | +0.19 | 77 | 74 | 65 |
| 17 | 1 | as run | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 238 | -0.20 | +0.16 | -0.36 | -0.64 | -0.08 | 0 | 0 | 0 |
| 18 | 1 | as run | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 889 | 1186 | +0.10 | +0.10 | -0.01 | -0.26 | +0.26 | 54 | 53 | 37 |
| 19 | 1 | crude splice excluded | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 219 | 199 | +0.35 | +0.04 | +0.31 | -0.18 | +0.81 | 92 | 90 | 90 |
| 20 | 1 | crude splice excluded | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +0.25 | +0.30 | -0.04 | -0.50 | +0.40 | 41 | 43 | 54 |
| 21 | 1 | crude splice excluded | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 73 | 255 | +0.56 | -0.06 | +0.63 | -0.93 | +2.21 | 80 | 81 | 68 |
| 22 | 1 | crude splice excluded | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +0.04 | -0.01 | +0.05 | -0.09 | +0.19 | 79 | 75 | 66 |
| 23 | 1 | crude splice excluded | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 238 | -0.20 | +0.16 | -0.36 | -0.63 | -0.07 | 0 | 0 | 0 |
| 24 | 1 | crude splice excluded | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 823 | 1172 | +0.16 | +0.09 | +0.06 | -0.17 | +0.29 | 79 | 79 | 70 |
| 25 | 2 | as run | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 218 | 199 | +0.60 | +0.16 | +0.43 | -0.21 | +1.09 | 94 | 92 | 92 |
| 26 | 2 | as run | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +0.36 | +0.66 | -0.30 | -0.97 | +0.34 | 16 | 18 | 34 |
| 27 | 2 | as run | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 139 | 269 | -0.21 | +0.11 | -0.32 | -1.89 | +1.25 | 34 | 36 | 13 |
| 28 | 2 | as run | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +0.06 | -0.04 | +0.10 | -0.09 | +0.28 | 85 | 82 | 59 |
| 29 | 2 | as run | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 238 | -0.38 | +0.31 | -0.69 | -1.09 | -0.29 | 0 | 0 | 0 |
| 30 | 2 | as run | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 888 | 1186 | +0.11 | +0.26 | -0.15 | -0.49 | +0.18 | 26 | 28 | 14 |
| 31 | 2 | crude splice excluded | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 218 | 199 | +0.60 | +0.16 | +0.43 | -0.21 | +1.09 | 93 | 91 | 93 |
| 32 | 2 | crude splice excluded | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +0.36 | +0.66 | -0.30 | -0.98 | +0.33 | 17 | 20 | 35 |
| 33 | 2 | crude splice excluded | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 73 | 255 | +0.63 | -0.12 | +0.75 | -1.28 | +2.79 | 79 | 78 | 56 |
| 34 | 2 | crude splice excluded | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +0.06 | -0.04 | +0.10 | -0.09 | +0.28 | 84 | 83 | 57 |
| 35 | 2 | crude splice excluded | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 238 | -0.38 | +0.31 | -0.69 | -1.11 | -0.27 | 0 | 0 | 0 |
| 36 | 2 | crude splice excluded | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 822 | 1172 | +0.21 | +0.21 | -0.00 | -0.31 | +0.31 | 62 | 61 | 40 |
| 37 | 8 | as run | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 218 | 199 | +2.36 | +0.05 | +2.31 | +1.08 | +3.55 | 100 | 100 | 100 |
| 38 | 8 | as run | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +1.61 | +2.37 | -0.77 | -2.07 | +0.53 | 9 | 12 | 29 |
| 39 | 8 | as run | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 133 | 269 | +0.30 | +2.59 | -2.29 | -5.23 | +0.54 | 6 | 8 | 12 |
| 40 | 8 | as run | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +0.54 | -0.56 | +1.11 | +0.73 | +1.49 | 100 | 100 | 100 |
| 41 | 8 | as run | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 238 | -1.18 | +1.11 | -2.28 | -3.09 | -1.45 | 0 | 0 | 0 |
| 42 | 8 | as run | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 882 | 1186 | +0.79 | +1.28 | -0.48 | -1.10 | +0.17 | 16 | 17 | 21 |
| 43 | 8 | crude splice excluded | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 218 | 199 | +2.36 | +0.05 | +2.31 | +1.01 | +3.59 | 100 | 100 | 100 |
| 44 | 8 | crude splice excluded | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +1.61 | +2.37 | -0.77 | -2.05 | +0.53 | 10 | 13 | 30 |
| 45 | 8 | crude splice excluded | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 73 | 255 | +3.92 | +1.02 | +2.90 | -0.78 | +6.69 | 92 | 92 | 84 |
| 46 | 8 | crude splice excluded | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +0.54 | -0.56 | +1.11 | +0.74 | +1.49 | 100 | 100 | 100 |
| 47 | 8 | crude splice excluded | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 238 | -1.18 | +1.11 | -2.28 | -3.06 | -1.46 | 0 | 0 | 0 |
| 48 | 8 | crude splice excluded | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 822 | 1172 | +1.15 | +0.92 | +0.23 | -0.36 | +0.83 | 94 | 93 | 85 |
| 49 | 13 | as run | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 218 | 199 | +2.67 | +0.12 | +2.55 | +1.00 | +4.10 | 100 | 100 | 95 |
| 50 | 13 | as run | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +2.27 | +3.90 | -1.63 | -3.19 | -0.01 | 1 | 3 | 9 |
| 51 | 13 | as run | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 128 | 269 | +2.57 | +5.26 | -2.69 | -6.61 | +1.30 | 8 | 10 | 36 |
| 52 | 13 | as run | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +0.98 | -0.77 | +1.75 | +1.27 | +2.23 | 100 | 100 | 100 |
| 53 | 13 | as run | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 238 | -1.62 | +1.29 | -2.90 | -3.81 | -1.97 | 0 | 0 | 0 |
| 54 | 13 | as run | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 877 | 1186 | +1.33 | +2.25 | -0.92 | -1.76 | -0.09 | 5 | 7 | 20 |
| 55 | 13 | crude splice excluded | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 218 | 199 | +2.67 | +0.12 | +2.55 | +1.01 | +4.10 | 100 | 100 | 96 |
| 56 | 13 | crude splice excluded | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +2.27 | +3.90 | -1.63 | -3.21 | -0.04 | 1 | 2 | 10 |
| 57 | 13 | crude splice excluded | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 73 | 255 | +8.65 | +2.79 | +5.87 | +0.76 | +11.05 | 99 | 99 | 99 |
| 58 | 13 | crude splice excluded | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +0.98 | -0.77 | +1.75 | +1.27 | +2.22 | 100 | 100 | 100 |
| 59 | 13 | crude splice excluded | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 238 | -1.62 | +1.29 | -2.90 | -3.84 | -1.97 | 0 | 0 | 0 |
| 60 | 13 | crude splice excluded | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 822 | 1172 | +1.79 | +1.67 | +0.11 | -0.65 | +0.90 | 91 | 89 | 84 |
| 61 | 26 | as run | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 218 | 199 | +4.92 | +2.12 | +2.80 | +0.71 | +4.87 | 100 | 99 | 95 |
| 62 | 26 | as run | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +4.15 | +7.94 | -3.78 | -5.72 | -1.79 | 0 | 0 | 1 |
| 63 | 26 | as run | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 127 | 259 | +2.92 | +5.07 | -2.15 | -7.14 | +2.74 | 21 | 21 | 14 |
| 64 | 26 | as run | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +1.50 | -1.19 | +2.69 | +2.01 | +3.37 | 100 | 100 | 100 |
| 65 | 26 | as run | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 233 | -1.05 | +2.02 | -3.06 | -4.38 | -1.73 | 0 | 0 | 0 |
| 66 | 26 | as run | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 876 | 1171 | +2.50 | +3.55 | -1.06 | -2.14 | +0.01 | 18 | 18 | 9 |
| 67 | 26 | crude splice excluded | S&P 500 (E-mini positions, priced on the cash index) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 218 | 199 | +4.92 | +2.12 | +2.80 | +0.76 | +4.85 | 100 | 100 | 95 |
| 68 | 26 | crude splice excluded | Gold | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 148 | 277 | +4.15 | +7.94 | -3.78 | -5.78 | -1.76 | 0 | 0 | 1 |
| 69 | 26 | crude splice excluded | Crude oil (WTI) | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 73 | 255 | +15.13 | +4.11 | +11.02 | +4.92 | +16.83 | 100 | 100 | 100 |
| 70 | 26 | crude splice excluded | 10-year Treasury note | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 208 | 203 | +1.50 | -1.19 | +2.69 | +2.06 | +3.34 | 100 | 100 | 100 |
| 71 | 26 | crude splice excluded | Euro | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 175 | 233 | -1.05 | +2.02 | -3.06 | -4.43 | -1.76 | 0 | 0 | 0 |
| 72 | 26 | crude splice excluded | All five, pooled | registered hold; run 2026-09-24, after the four-week result and the correction | 2026-09-24 21:18 UTC, same engine, frozen prices | 822 | 1167 | +3.55 | +3.34 | +0.21 | -0.80 | +1.24 | 98 | 96 | 92 |
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.
| row | calendar | arm | crowding_check | registration | run | signals | mean_R_21_trading_days | ci95_low_R | ci95_high_R | pctile_vs_random_jobs_report_days | control_note | f1_whole_interval_above_zero |
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 1 | first 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 plan | none: tested without it on purpose; its plan said in advance that a fail here would not count against his method | registered | 2026-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.431 | 54.4 | the plan's primary control | missed |
| 2 | first Friday of the month (registered) | V2 long: V1 with the close in the top third of the day, a variant in the plan | none: tested without it on purpose; its plan said in advance that a fail here would not count against his method | registered | 2026-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.640 | no random-day control was computed for this arm | missed | |
| 3 | first Friday of the month (registered) | V3 long: V1 with a gap down at the open, a variant in the plan | none: tested without it on purpose; its plan said in advance that a fail here would not count against his method | registered | 2026-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.075 | 25.4 | control appended 2026-09-24 with the lab's own functions; the June engine printed none for this arm | missed |
| 4 | first Friday of the month (registered) | V1 short mirror: high above the prior close, close below it and the open; the secondary arm in the plan | none: tested without it on purpose; its plan said in advance that a fail here would not count against his method | registered | 2026-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.471 | 55.7 | control 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 none | missed |
| 5 | actual 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 plan | none: tested without it on purpose; its plan said in advance that a fail here would not count against his method | added 2026-09-24, not in the plan | 2026-09-24, the registered engine with only its calendar replaced, on the same frozen SPY snapshot | 49 | +0.679 | -0.945 | +2.301 | 46.7 | random draws from the real release dates, same ruler | missed |
| 6 | actual BLS release dates (UNREGISTERED sensitivity, plan committed before the run) | V3 long: V1 with a gap down at the open, a variant in the plan | none: tested without it on purpose; its plan said in advance that a fail here would not count against his method | added 2026-09-24, not in the plan | 2026-09-24, the registered engine with only its calendar replaced, on the same frozen SPY snapshot | 18 | -0.874 | -2.996 | +1.149 | 22.1 | control appended 2026-09-24 with the lab's own functions; the June engine printed none for this arm | missed |
| 7 | actual 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 plan | none: tested without it on purpose; its plan said in advance that a fail here would not count against his method | added 2026-09-24, not in the plan | 2026-09-24, the registered engine with only its calendar replaced, on the same frozen SPY snapshot | 63 | -1.306 | -2.721 | +0.209 | 50.0 | control appended 2026-09-24 with the lab's own functions; the June engine printed none for this arm | missed |
| Column | Meaning |
|---|---|
row | Row number, matching the ledger above. |
hold_weeks | How many weeks after the report each result is measured; 4 is the plan’s primary hold. |
variant | As run on the saved positioning data, or with crude oil’s weeks after its contract switch (2022-02-08) taken out. |
market | The market, or all five pooled. |
registration | Whether the hold was the plan’s primary, or a registered hold run afterwards. |
run | Which run produced the cell, with its UTC time. |
crowded_short_weeks | Weeks 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_weeks | The same for the top 10%. |
r_s_pct | Average price change, in percent, over the hold after crowded-short weeks. |
r_l_pct | The same after crowded-long weeks. |
gap_pct | r_s_pct minus r_l_pct, in percentage points: the bet needs it above zero. |
ci95_low_pct | Low end of the 95% bootstrap interval of the gap; it treats weeks as independent, so it is too narrow. |
ci95_high_pct | High end of the same interval. |
pctile_gap_vs_random_weeks | Percentile 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_timing | Percentile of the gap among 2,000 runs with the crowded weeks shuffled in time. |
pctile_short_leg_vs_random_weeks | Percentile of r_s_pct among 2,000 random-week draws (the other half of the second bar). |
| Column | Meaning |
|---|---|
row | Row number. |
calendar | The registered first-Friday rule, or the actual release dates (an extra run outside the plan). |
arm | The trigger variant; all are tested without the crowding check. |
crowding_check | Whether 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. |
registration | Registered in the plan, or added. |
run | The run that produced the row. |
signals | Trigger 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_days | Average 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_R | Low end of the 95% bootstrap interval of that average. |
ci95_high_R | High end. |
pctile_vs_random_jobs_report_days | Percentile against random draws of jobs-report days, same ruler; blank where none was computed. |
control_note | Where the random-day control comes from. |
f1_whole_interval_above_zero | Whether the whole interval sits above zero, the plan’s first bar. |
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.
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)