A gap up on heavy volume is supposed to be confirmation. A gap up on thin volume is
supposed to be a trap.
I finally had the data to check it: 641 adjusted daily bars for 3,116 Shanghai/Shenzhen
main-board stocks β 1.91 million stock-days, running through the 2026-10-22 close, pulled
from a free public quote endpoint. No vendor, no API key, no paid feed.
The folklore is backwards. Holding gap size fixed, the below-average-volume gap beat the
3x-volume gap in every bucket I measured, on both the next day and five days out. And the
bucket most retail traders chase β opening at the board limit β was the worst one of all.
What I measured
One row per stock-day t, using split/dividend-adjusted (qfq) prices:
| field | definition |
|---|---|
gap |
open[t] / close[t-1] - 1 |
vr |
volume[t] / mean(volume[t-20 .. t-1]) |
next1 |
close[t+1] / close[t] - 1 |
fwd5 |
close[t+5] / close[t] - 1 |
ST and delisting names are dropped (they have corporate-action artifacts in adjusted prices
that show up as fake gaps β one sample in the raw file printed a +632% "next day"). Everything
else on the main board is included, ~1.9M samples after cleaning.
Baseline, for reference: all stock-days, next-day mean +0.07% / median 0.00% / win 48.0%;
five-day mean +0.36% / median -0.13% / win 48.2%. The split is the drift β keep it in view,
because every number below has to beat it to mean anything.
1. Gap size alone
| gap bucket | n | next-day mean | next-day median | next-day win | 5-day mean | 5-day median | 5-day win |
|---|---|---|---|---|---|---|---|
| +2~3% | 29,691 | +0.49% | +0.19% | 52.0% | +0.36% | -0.45% | 46.6% |
| +3~5% | 19,332 | +0.81% | +0.47% | 54.1% | +0.32% | -0.92% | 44.7% |
| +5~9% | 9,480 | +0.91% | +0.47% | 53.1% | +0.91% | -1.45% | 43.6% |
| β₯9% (opens at the limit) | 9,310 | -0.34% | -1.76% | 45.4% | -0.90% | -6.44% | 32.8% |
The middle buckets do carry a next-day edge above the +0.07% baseline β modest, but real and
monotone from +2% to +9%.
Then the limit-up gap flips: median -6.4% over the next five days, with only 32.8% of cases
positive. The trade the crowd wants most is the one with the worst distribution. If you buy
a stock because it opened limit-up, two out of three lose over the week.
2. Gap Γ volume ratio β the sign flips
This is the part that broke my prior. Holding gap size fixed, split by volume ratio
(limit-up gaps excluded β see the data trap at the end):
| cell | n | next-day mean | next-day median | next-day win | 5-day mean | 5-day median | 5-day win |
|---|---|---|---|---|---|---|---|
| +5~9% gap, vr<1 | 1,431 | +2.88% | +3.22% | 67.6% | +8.09% | +3.20% | 62.0% |
| +5~9% gap, vr 1-2 | 2,637 | +0.87% | +0.39% | 52.9% | +1.31% | -0.44% | 47.6% |
| +5~9% gap, vr 2-3 | 1,898 | +0.81% | +0.34% | 51.8% | -0.20% | -1.78% | 41.5% |
| +5~9% gap, vr>3 | 3,514 | +0.20% | -0.25% | 48.0% | -1.71% | -3.32% | 34.2% |
| +3~5% gap, vr<1 | 3,812 | +1.07% | +0.80% | 59.4% | +2.39% | +0.91% | 54.9% |
| +3~5% gap, vr>3 | 4,575 | +0.90% | +0.75% | 54.8% | -1.52% | -2.88% | 34.3% |
| +2~3% gap, vr<1 | 10,046 | +0.50% | +0.29% | 53.7% | +0.76% | +0.10% | 50.4% |
| +2~3% gap, vr>3 | 3,213 | +0.55% | +0.09% | 50.4% | -1.00% | -2.28% | 37.1% |
Read the first and fourth rows against each other. Same gap size. Same 5-day horizon.
Low volume: +3.2% median, 62% win rate. 3x volume: -3.3% median, 34% win rate.
That is not a small effect, and it is not a single-cell artifact β the ordering
(vr<1 > vr 1-2 > vr 2-3 > vr>3 on the 5-day median) holds in all three gap buckets.
"Volume confirms the gap" gets the sign exactly wrong.
3. Is the mean lying? (fat-tail audit)
The tightest cell has an +8.09% mean. Before anyone backtests that, here is its distribution:
| cell | n | mean | median | p25 | p75 | p95 | share of total P&L from the best 5% |
|---|---|---|---|---|---|---|---|
| +5~9% gap, vr<1 | 1,424 | +8.09% | +3.20% | -4.79% | +15.22% | +27.84% | 54.2% |
| +5~9% gap, vr>3 | 3,497 | -1.71% | -3.32% | -8.42% | +2.53% | +21.01% | -104.1% |
Over half of that cell's entire P&L comes from its best 5% of cases, which are the θΏζΏ
(consecutive limit-up) runs. The median, +3.2%, is what a typical trade earns; the mean is
a lottery ticket you cannot size. This is exactly the shape that makes people think a rule
works: the aggregate looks great because of a handful of 10%-per-day sequences, while the
p25 says a quarter of the entries are down nearly 5% five days later.
4. Gap-downs: no knife-catching edge
| gap | n | next-day mean | next-day median | next-day win |
|---|---|---|---|---|
| -3~-2% | 34,113 | +0.06% | 0.00% | 49.8% |
| -5~-3% | 21,717 | -0.20% | -0.27% | 46.6% |
| β€-5% | 11,266 | -1.82% | -1.94% | 36.0% |
Small gap-downs are indistinguishable from noise. Big ones keep bleeding instead of bouncing β
there is no statistical case for "it already gapped down, so it's cheap."
One live session: 2026-10-22
57 of 3,116 stocks gapped β₯+2%. 70.2% closed below their open. 66.7% filled the gap the same
day. Nine opened at or above +9.9%:
- ζ°δΊεΆη¨ (002388): open +10.00%, close -10.00% β an 18.2% round trip from the open
- 倩θδΏ‘ (002212): open +9.99%, close -0.29%
- θε·ιΎζ° (603332): open +9.77%, close -3.47%
- δΉη§η (601566): open +9.38%, close -6.35%
Seven others held the limit all day. Those seven are also the data trap: a δΈεζΏ has almost
no volume, so vr collapses toward zero and every one of them lands in the "low volume" bucket.
If you run this study without excluding limit-up gaps, you get a spectacular fake edge that is
really just "consecutive limit-ups keep going." Excluding every gap β₯9%, the volume effect
survives: vr<1 next-day +1.04% / 5-day +2.10% vs vr>3 next-day +0.50% / 5-day -1.35%.
Why this probably isn't a bug
If a stock gaps up and volume triples, someone is unloading into the gap β the volume is the
supply. If it gaps up on below-average volume, there is no overhead supply; nobody wants to
hand over shares at that price, and the next day's buyers have to pay up.
That's a statement about participation, and in A-shares heavy participation at a price spike
is frequently distribution. A much smaller study I published earlier β 15,900 stock-days on
volume-confirmation breakouts β reached the same conclusion from a different angle: the
volume-breakout bucket was the only substantially negative one. Two independent cuts, same
sign.
What I am not claiming
- Main-board only β no ChiNext (300), STAR (688) or BSE. Those have 20%/30% limits and different microstructure; these numbers do not transfer.
- The window drifts positive. Baseline five-day is +0.36% mean. Every bucket above is measured against that, not against zero.
- No costs, no T+1 fill modelling. A-share T+1 means you cannot exit the gap day; all forward returns here are close-to-close.
- Overlapping windows. I quote no t-stats on purpose β 1.9M samples sound like a lot, but five-day windows over 641 bars are heavily overlapping and not independent.
- Adjusted-price artifacts. Delisting names were dropped after a +632% sample exposed how bad qfq data gets on restructured tickers.
- This is a measurement of what happened. Not advice, not a strategy, not a signal you should trade. The honest summary is "the volume direction on a gap inverts the forward return" β and the fat tail says do not size it like a sure thing.
Reproduce it
Script, results JSON and the earlier studies are all here β no keys needed, feed it your own
adjusted bars:
https://github.com/Felixwang007/a-share-signal-lab
python gap_study.py path/to/history_ext # one JSON per stock: adjusted daily bars
If you want the packaged version as an agent-callable tool (24-indicator technical scanner,
three-pillar screener), it's running as an Apify actor here:
https://apify.com/coiled_senna/a-share-stock-mcp
If you run the gap study on your own market, the two things worth copying are the
volume cross-tab and the fat-tail audit. Bucket averages hide the shape that actually decides
whether a rule is tradeable β and in this dataset the shape said the crowd was buying the
wrong side of the gap.













