Does CVD by Trade Size Tell You Where NQ Is Headed?

NQ Futures  ·  last 12 months of data (May 2025 – Apr 2026)  ·  249 trading days, every one starting 08:30 ET (1hr warmup before the 9:30 RTH open)  ·  every size from 1 to 500+ contracts

  • Split every NQ trade over the last 12 months into size groups.
  • Tested one question per group: does its flow predict price, confirm it, or tell you nothing?
  • Read the takeaways box below and you have the whole report — everything after it is the proof, in charts.
Key takeaways
  1. The ATAS "Cumulative Trades" setting changes the answer, not just the strength. Several size groups flip from net buying to net selling (or back) just by toggling it.Keep it checked ON — see the section below.
  2. 1-contract trades move against price, not with it — the one real surprise in this whole study.See "the sweet spot" section.
  3. 10-19 contracts is the single best size range to watch on its own. Bigger isn't better — correlation gets weaker as size climbs past that.
  4. The simplest effective filter: watch everything except 1-lots ("2+"). It beat every other combination we tested, including "big trades only" filters.
  5. Nothing predicts price ahead of time. Every size group, measured three different ways, lines up with price at the same moment — never before it.
  6. For rare, big-size trades, watch the running session total, not a short rolling window — there aren't enough of them in any 15 minutes to read cleanly, but they add up to a real signal over the day.
  7. Over the year, small/mid size (2-49 contracts) was net selling while price rose; 50+ was net buying. Consistent with bigger players accumulating while smaller traders took profits.
  8. Disagreement between size groups reads price better than either group alone. Small selling while big buys called the direction right ~72% of the time.See "the divergence test" section.
Trading days tested
249
NQ move over the year
+6,525 pts
Sizes tested
1 → 500+
Does flow lead price?
No — same-minute only

First, the setting that changes everything — Cumulative Trades ON vs OFF

  • ATAS's CVD Pro / Multi Market Powers has a checkbox: "Cumulative Trades." We ran this whole study both ways to show why it matters.
  • A single large order often hits the tape as several smaller prints, not one.
  • ON glues those pieces back into the real trade size (right side below).
  • OFF treats every piece as its own tiny trade (left side) — a real 53-lot block trade disappears into 3 unrelated small readings.
One order: SELL 53 contracts hits the tape as 3 separate fills 20 18 15 what happens next depends on one setting CUMULATIVE TRADES: OFF each fragment bucketed on its own 20 18 15 the real 53-lot trade never shows up invisible to any "50+" filter CUMULATIVE TRADES: ON the 3 fragments are merged first 20 18 15 53 correctly counted as "50+" a real block trade, visible at last
Those aren't small differences — they're the opposite conclusion. With the wrong setting, you'd read "buyers in control" when it was actually sellers, or vice versa. Keep Cumulative Trades checked ON. Every finding from here on uses the ON (corrected) numbers.
See the full ON vs OFF numbers, all 18 size groups ▾
BucketTrades (ON)Trades (OFF)Tracks price (ON)Tracks price (OFF)Net bias 12mo (ON)Net bias 12mo (OFF)
1 contract FLIPS 42,714,87448,947,634 -0.22+0.10 +82,208 -99,342
2-4 contracts 13,162,21015,423,262 +0.29+0.61 -106,035 -152,504
5-9 contracts 1,899,5481,665,606 +0.55+0.58 +10,481 +84,829
10-19 contracts FLIPS 543,386144,028 +0.56+0.52 -79,320 +44,413
20-49 contracts 157,97426,067 +0.47+0.22 -85,079 -1,113
50-99 contracts 26,4753,646 +0.36+0.07 +506 +4,589
100-199 contracts 5,992950 +0.31+0.08 +40,679 +6,232
200-499 contracts 1,395259 +0.17+0.08 +37,068 +19,057
500+ contracts 10853 +0.10+0.08 +18,703 +13,050
1+ (everyone) 58,511,96266,211,505 +0.68+0.68 -80,789 -80,789
2+ (drop 1-lots) FLIPS 15,797,08817,263,871 +0.72+0.68 -162,997 +18,553
5+ FLIPS 2,634,8781,840,609 +0.70+0.57 -56,962 +171,057
10+ FLIPS 735,330175,003 +0.64+0.39 -67,443 +86,228
20+ 191,94430,975 +0.54+0.21 +11,877 +41,815
50+ 33,9704,908 +0.43+0.14 +96,956 +42,928
100+ 7,4951,262 +0.31+0.12 +96,450 +38,339
200+ 1,503312 +0.19+0.10 +55,771 +32,107
500+ 10853 +0.10+0.08 +18,703 +13,050

One more thing before the findings — what does a "correlation" number mean?

You'll see numbers like +0.72 or -0.22 throughout what follows — a correlation, on a scale from -1 to +1:

-1.0-0.50+0.5+1.0
Perfectly opposite No relationship Move together perfectly
  • +0.72 means: net buying tends to line up with price going up at the same time (and net selling with price going down).
  • It does not mean this group predicts price — and it's not a percentage or a win rate.
  • Below, we don't just give you the number — we show you what it looks like.

Does the flow actually track price? — see it, don't just take our word

  • Scatter dot = one 15-minute stretch. Left/right = how much that group bought or sold; up/down = what price did over that same 15 minutes.
  • Cloud leaning bottom-left to top-right = a relationship you can see with your own eyes.
  • Gauge = a simpler, different measure of the same thing: out of every 15-minute stretch, what % of the time did direction actually match price?
  • The percentage won't equal the r-value — r factors in how big each move was, the percentage only counts direction — but a strong r and a high percentage move together, as you'll see below.
Scatter plot for 1 contract
44%
of the time, 1 contract went the OPPOSITE way within that same 15-min window(worse than a coin flip)
Scatter plot for 5-9 contracts
69%
of the time, 5-9 contracts agreed with price within that same 15-min window(usually agreed)
Scatter plot for 10-19 contracts
70%
of the time, 10-19 contracts agreed with price within that same 15-min window(usually agreed)
Scatter plot for 2+ (drop 1-lots)
80%
of the time, 2+ (drop 1-lots) agreed with price within that same 15-min window(usually agreed)
Scatter plot for 50+
68%
of the time, 50+ agreed with price within that same 15-min window(usually agreed)
Scatter plot for 100+
68%
of the time, 100+ agreed with price within that same 15-min window(usually agreed)
Reading these: "2+ (drop 1-lots)" agreed with price 80% of the time — about 4 times out of 5, and its scatter cloud (r = +0.72) leans tight and diagonal. "1 contract" agreed only 44% of the time — worse than a coin flip — and its cloud (r = -0.22) leans the wrong way. Two different measurements, same conclusion each time: one is strong and positive, the other is weak and backwards.

Which size range works best on its own — the sweet spot

Each size range tested alone, three ways: the same trailing 15-minute window used everywhere else in this report, a slower 60-minute window, and the running session total. Longer bar = tighter relationship to price.

1 contract
15-min-0.22
60-min-0.24
Session-0.44
Weak (works against price)
2-4 contracts
15-min+0.29
60-min+0.21
Session+0.20
Moderate
5-9 contracts
15-min+0.55
60-min+0.50
Session+0.51
Strong
10-19 contracts
15-min+0.56
60-min+0.54
Session+0.53
Very strong
20-49 contracts
15-min+0.47
60-min+0.48
Session+0.50
Strong
50-99 contracts
15-min+0.36
60-min+0.42
Session+0.54
Moderate
100-199 contracts
15-min+0.31
60-min+0.42
Session+0.57
Moderate
200-499 contracts
15-min+0.17
60-min+0.22
Session+0.33
Weak
500+ contracts
15-min+0.10
60-min+0.13
Session+0.22
Barely there
The single biggest surprise: 1-contract trades work against price, not with it. The best single size range is 10-19 contracts, not the biggest trades — strength falls steadily as size climbs past that, and 500+ barely moves the needle, mostly because there are so few of them (about 1 every 2 trading days).

The best practical filter — what to actually watch

Set a minimum size, count everything above it. "5+" = every trade of 5+ contracts, summed together. Same three windows as above: 15-min, 60-min, session total.

1+ (everyone)
15-min+0.68
60-min+0.66
Session+0.64
Very strong
2+ (drop 1-lots)
15-min+0.72
60-min+0.71
Session+0.75
Very strong
5+
15-min+0.70
60-min+0.71
Session+0.75
Very strong
10+
15-min+0.64
60-min+0.67
Session+0.72
Very strong
20+
15-min+0.54
60-min+0.60
Session+0.69
Strong
50+
15-min+0.43
60-min+0.51
Session+0.63
Strong
100+
15-min+0.31
60-min+0.40
Session+0.53
Moderate
200+
15-min+0.19
60-min+0.25
Session+0.35
Weak
500+
15-min+0.10
60-min+0.13
Session+0.22
Barely there
The practical answer: the single best filter is excluding 1-contract trades and counting everything else (2+). It beats using all trades, and it beats any narrower "big trades only" filter.

Does any size see the future? — leading vs. lagging, and how far we looked

  • This is trend vs. trend, not instant vs. instant.
  • Compares net buying/selling over a trailing 15-minute stretch to price's move over that same stretch.
  • Slid that comparison from 60 min before to 60 min after, one minute at a time, to check every other offset.
every bucket's strongest match landed right here, every time flow vs. a price move that ALREADY finished happening (would mean flow reacts LATE) SAME 15-MIN WINDOW (coincident) flow vs. a price move that HASN'T happened yet (would mean flow predicts AHEAD) -60 min -30 min 0 +30 min +60 min ← further into the past further into the future →
  • Below: all 6 size groups, plotted continuously from -60 to +60 minutes, not just a few points.
  • Each line = % of 15-min windows where that bucket's trend matched price's trend, at that offset.
  • Dashed line at 50% = coin flip, no relationship at all.
Line chart showing trend-agreement percentage across all lags from -60 to +60 minutes for all 6 size groups, every line spiking at the same minute (lag 0) and falling to 50% chance level elsewhere
Every line spikes at the exact same place: lag 0, same minute. Move 15+ minutes either direction and every single line collapses back to the 50% coin-flip line — that's the real evidence for "coincident, not predictive." One extra detail only visible now that it's a continuous line: the small/mid buckets ("2+", "10-19", "5-9") sit flat at 50% and then snap up sharply right at the peak, while the rarer, bigger buckets ("50+", "100+") ramp up more gradually starting nearly an hour early. That doesn't mean big size predicts anything — the peak is still exactly at zero for all of them — but big-size flow appears to build in slower, more sustained waves rather than sharp bursts, echoing the earlier session-total finding.
The ratio you asked about: in that same-window comparison, every 100 contracts of net buying or selling in "2+ (drop 1-lots)" lines up with about +4.8 points of NQ price move, on average, in the same direction. That's not a rule you can bet on tick-for-tick — it's an average slope across 249 trading days — but it's the direct answer to "how much does price actually move per contract."
See the same-window agreement % and points-per-100-contracts ratio for all 6 size groups ▾
BucketSame-window agreementPrice move per 100 contracts
1 contract44%-3.9 pts
5-9 contracts69%+13.8 pts
10-19 contracts70%+13.8 pts
2+ (drop 1-lots)80%+4.8 pts
50+68%+5.8 pts
100+68%+5.3 pts

"5-9" and "10-19" move price more per contract (+13.8 pts/100) than "2+" (+4.8 pts/100) — even though "2+" has the higher agreement %. "2+" is more reliable (far more volume); 5-19 lot trades carry more price impact per contract. Two different questions, one table.

Two ways to watch this — running session total vs. a rolling window

  • Session total = running tally since the 08:30 ET open.
  • Rolling 15/60-min = only a recent window, resetting constantly.
  • Common trade sizes: barely matters which you use. Rare/big sizes: matters a lot.
See the full session vs. rolling numbers, all 18 size groups ▾
BucketSession totalRolling 15-minRolling 60-min
1 contract GAP-0.44-0.22-0.24
2-4 contracts+0.20+0.29+0.21
5-9 contracts+0.51+0.55+0.50
10-19 contracts+0.53+0.56+0.54
20-49 contracts+0.50+0.47+0.48
50-99 contracts GAP+0.54+0.36+0.42
100-199 contracts GAP+0.57+0.31+0.42
200-499 contracts GAP+0.33+0.17+0.22
500+ contracts GAP+0.22+0.10+0.13
1+ (everyone)+0.64+0.68+0.66
2+ (drop 1-lots)+0.75+0.72+0.71
5++0.75+0.70+0.71
10++0.72+0.64+0.67
20+ GAP+0.69+0.54+0.60
50+ GAP+0.63+0.43+0.51
100+ GAP+0.53+0.31+0.40
200+ GAP+0.35+0.19+0.25
500+ GAP+0.22+0.10+0.13
Rows marked GAP (in the table above) show session total reading noticeably stronger than a 15-minute window — mostly the rare/big-size groups, like 100-199 contracts (+0.57 session vs. +0.31 rolling). Rule of thumb: watch a rolling window for common sizes, watch the running session total for anything you'd call "big money."

Who was actually buying and selling this year

NQ rose about 6,525 points over the 12 months tested. Net buying vs. selling by size group, same window:

BucketNet over 12 months
1 contract+82,208 (net buying)
2-4 contracts-106,035 (net selling)
5-9 contracts+10,481 (net buying)
10-19 contracts-79,320 (net selling)
20-49 contracts-85,079 (net selling)
50-99 contracts+506 (net buying)
100-199 contracts+40,679 (net buying)
200-499 contracts+37,068 (net buying)
500+ contracts+18,703 (net buying)
The story in one line: while price climbed all year, the small and mid-size crowd (2-49 contracts) was actually net selling in aggregate, while everything sized 50 contracts and up was net buying. Doesn't mean big size "called" the move (nothing leads — see above) — just that, over the long run, size and direction lined up.

When size groups disagree — the divergence test

  • Every finding so far looked at one size group at a time. This tests what happens when two disagree.
  • Paired 1 contract (works against price alone, r=-0.23) against 50+ (works with price alone, r=+0.44) — the two buckets that already behave the most differently.
  • Split every 15-minute window into 4 states by what each group was doing, then checked what price did in that same window.
Both buying
22.9% of all 15-min windows
64%
of the time, price went up in that window
avg move: +9.7 pts
STRONGEST READ
Small SELLS, Big BUYS
29.4% of all 15-min windows
72%
of the time, price went up in that window
avg move: +16.8 pts
STRONGEST READ
Small BUYS, Big SELLS
28.7% of all 15-min windows
29%
of the time, price went up in that window
avg move: -19.0 pts
Both selling
19.0% of all 15-min windows
39%
of the time, price went up in that window
avg move: -7.5 pts
Disagreement beats agreement. When small sells while big buys, price went up 72% of the time — cleaner than either bucket alone, and cleaner than when they agree ("both buying" only hit 64%). The mirror image holds too: small buying while big sells was right about price falling 71% of the time. The classic "smart money accumulates while retail sells the dip" story actually shows up in the data — and its opposite, distribution into retail buying, shows up too.
But it still doesn't predict ahead. Checked whether any of these 4 states says anything about the next 15-minute window (not the same one) — they all land within a point of the 51% baseline, no better than a coin flip. Same conclusion as everywhere else in this report: divergence is a sharper way to confirm what's happening right now, not a way to see what's coming next.

Does this hold up at the open too?

Split the same 4 states into the first 90 minutes of RTH (9:30-11:00 ET) vs. the rest of the session, to check whether the read changes at the open.

Both buying
First 90m RTH (9:30-11:00)
+19.5
Rest of session (11:00-16:00)
+6.0
Small SELLS, Big BUYS
First 90m RTH (9:30-11:00)
+24.2
Rest of session (11:00-16:00)
+14.6
Small BUYS, Big SELLS
First 90m RTH (9:30-11:00)
-25.9
Rest of session (11:00-16:00)
-16.3
Both selling
First 90m RTH (9:30-11:00)
-13.4
Rest of session (11:00-16:00)
-5.7
Same direction, bigger moves. "Small sells, big buys" called price up 72% of the time in the first 90 minutes vs. 72% the rest of the day — essentially identical reliability. But the average move was roughly 1.7× bigger at the open (+24.2 pts vs. +14.6 pts) — consistent with NQ simply having more range in the first 90 minutes than at any other point in the day, not with the signal itself being different at the open.

20 real examples — see it for yourself

  • 4 real trading days × 5 size filters.
  • Each chart stacks all 3 readings under price: rolling 15-min, rolling 60-min, session-cumulative.
  • Click any chart to enlarge. Click a group below to expand.

How to actually use this

  • Turn Cumulative Trades ON in ATAS's CVD Pro / Multi Market Powers, or any custom version you build.
  • Don't chase the biggest prints expecting an edge — 200+ and 500+ contract trades are rare and, on their own, one of the weakest trackers of price minute to minute.
  • The 5-20 contract range is the sweet spot if you want to watch one size band closely.
  • If you want one simple filter, use "everything except 1-lots."
  • Use the running session total for big/rare sizes, a rolling window for common sizes.
  • None of this predicts price ahead of time — use it to confirm what's already happening, not to front-run a move that hasn't started.
  • Watch for disagreement between size groups — small selling while big buys (or the reverse) reads price more cleanly than either group alone. Still won't tell you what happens next.
Keep in mind: this is a research study, not a trading strategy with entries, exits, or a win rate. It covers 12 months on NQ specifically. The 200+ and 500+ buckets are backed by very few real trades (as low as ~1 every 2 days) — treat those two rows as directional color, not a firm rule.
Paid Service · NQ Futures
Want a report on your signal?
We run your signal against the same NQ tick data — same method as this study, applied to your specific entry condition.
Get Your Report →All Studies